import { config, mount } from "@vue/test-utils"; import GroupSection from "@/components/Group/GroupSection.vue"; import RouteName from "@/router/name"; import { routes } from "@/router"; import { describe, it, expect, beforeEach } from "vitest"; import { createRouter, createWebHistory, Router } from "vue-router"; import Oruga from "@oruga-ui/oruga-next"; config.global.plugins.push(Oruga); let router: Router; beforeEach(async () => { router = createRouter({ history: createWebHistory(), routes: routes, }); // await router.isReady(); }); const groupPreferredUsername = "my_group"; const groupDomain = "remotedomain.net"; const groupUsername = `${groupPreferredUsername}@${groupDomain}`; const defaultSlotText = "A list of elements"; const createSlotButtonText = "+ Create a post"; type Props = { title?: string; icon?: string; privateSection?: boolean; route?: { name: string; params: { preferredUsername: string } }; }; const baseProps: Props = { title: "My group section", icon: "bullhorn", route: { name: RouteName.POSTS, params: { preferredUsername: groupUsername, }, }, }; const generateWrapper = (customProps: Props = {}) => { return mount(GroupSection, { props: { ...baseProps, ...customProps }, slots: { default: `
${defaultSlotText}
`, create: `${createSlotButtonText}`, }, global: { plugins: [router], }, }); }; describe("GroupSection", () => { it("renders group section with basic informations", () => { const wrapper = generateWrapper(); expect(wrapper.find("i.mdi").classes(`mdi-${baseProps.icon}`)).toBe(true); expect(wrapper.find("h2").text()).toBe(baseProps.title); expect(wrapper.find("a").attributes("href")).toBe(`/@${groupUsername}/p`); // expect(wrapper.find(".group-section-title").classes("privateSection")).toBe( // true // ); expect(wrapper.find("section > div.flex-1").text()).toBe(defaultSlotText); expect(wrapper.find(".flex.justify-end.p-2 a").text()).toBe( createSlotButtonText ); expect(wrapper.find(".flex.justify-end.p-2 a").attributes("href")).toBe( `/@${groupUsername}/p/new` ); expect(wrapper.html()).toMatchSnapshot(); }); it("renders public group section", () => { const wrapper = generateWrapper({ privateSection: false }); // expect(wrapper.find(".group-section-title").classes("privateSection")).toBe( // false // ); expect(wrapper.html()).toMatchSnapshot(); }); });