forked from potsda.mn/mobilizon
2e72f6faf4
yarn v1 is being deprecated and starts to have some issues Signed-off-by: Thomas Citharel <tcit@tcit.fr>
99 lines
2.6 KiB
TypeScript
99 lines
2.6 KiB
TypeScript
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: `<div>${defaultSlotText}</div>`,
|
|
create: `<router-link :to="{
|
|
name: 'POST_CREATE',
|
|
params: {
|
|
preferredUsername: '${groupUsername}'
|
|
}
|
|
}"
|
|
class="btn-primary">${createSlotButtonText}</router-link>`,
|
|
},
|
|
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();
|
|
});
|
|
});
|