perform front-end unit test from "view/Admin" - #1805

This commit is contained in:
Laurent Gay
2025-09-25 18:24:21 +02:00
parent 413d80c4e6
commit 4afbe18621
3 changed files with 46 additions and 16 deletions

View File

@@ -1,4 +1,4 @@
import { beforeEach, describe, it, expect } from "vitest";
import { beforeEach, describe, it, expect, vi } from "vitest";
import { enUS } from "date-fns/locale";
import { routes } from "@/router";
import { createRouter, createWebHistory, Router } from "vue-router";
@@ -9,6 +9,12 @@ import { Oruga } from "@oruga-ui/oruga-next";
import flushPromises from "flush-promises";
import { UPDATE_CURRENT_USER_CLIENT, LOGGED_USER } from "@/graphql/user";
vi.mock("@/utils/html", () => {
return {
getValueFromMeta: (name: string) => name,
escapeHtml: (html: string) => html,
};
});
config.global.plugins.push(Oruga);
let router: Router;
@@ -22,18 +28,24 @@ beforeEach(async () => {
// await router.isReady();
});
const update_mock = {
data: {},
};
const logged_mock = {
data: {},
data: {
loggedUser: {
__typename: "User",
defaultActor: {
__typename: "Person",
id: "1",
unreadConversationsCount: 0,
},
id: "1",
},
},
};
const generateWrapper = (mock_update = {}, mock_logged = {}) => {
const generateWrapper = (mock_logged = {}) => {
const global_data = getMockClient([
[UPDATE_CURRENT_USER_CLIENT, mock_update],
[LOGGED_USER, mock_logged],
UPDATE_CURRENT_USER_CLIENT,
]);
global_data.provide.dateFnsLocale = enUS;
global_data.plugins = [router];
@@ -49,11 +61,12 @@ const generateWrapper = (mock_update = {}, mock_logged = {}) => {
describe("ProviderValidation", () => {
it("Show simple", async () => {
const wrapper = generateWrapper(update_mock, logged_mock);
const wrapper = generateWrapper(logged_mock);
await wrapper.vm.$nextTick();
await flushPromises();
expect(wrapper.html()).toMatchSnapshot();
expect(requestHandlers.handle_0).toHaveBeenCalledTimes(0);
expect(requestHandlers.handle_1).toHaveBeenCalledTimes(0);
expect(requestHandlers.handle_0).toHaveBeenCalledTimes(1);
expect(requestHandlers.handle_0).toHaveBeenCalledWith({});
});
});

View File

@@ -3,12 +3,12 @@
exports[`AdminGroupProfile > Show simple 1`] = `
"<div class="section">
<breadcrumbs-nav links="[object Object],[object Object],[object Object]"></breadcrumbs-nav>
<div><a href="/@group_name" class="mx-auto max-w-sm block mb-2">
<div><a href="/@group_name@domain" class="mx-auto max-w-sm block mb-2">
<div data-v-b0ff4ece="" class="bg-white dark:bg-mbz-purple rounded-lg flex space-x-4 items-center flex-col p-4 shadow-md sm:p-8 pb-10 w-80">
<div data-v-b0ff4ece="" class="flex pl-2"><span data-v-b0ff4ece="" class="ltr:-mr-0.5 rtl:-ml-0.5 material-design-icon account-circle-icon ltr:-mr-0.5 rtl:-ml-0.5" aria-hidden="true" role="img"><svg fill="currentColor" class="material-design-icon__svg" width="48" height="48" viewBox="0 0 24 24"><path d="M12,19.2C9.5,19.2 7.29,17.92 6,16C6.03,14 10,12.9 12,12.9C14,12.9 17.97,14 18,16C16.71,17.92 14.5,19.2 12,19.2M12,5A3,3 0 0,1 15,8A3,3 0 0,1 12,11A3,3 0 0,1 9,8A3,3 0 0,1 12,5M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12C22,6.47 17.5,2 12,2Z"><!--v-if--></path></svg></span></div>
<div data-v-b0ff4ece="" class="text-center overflow-hidden w-full">
<h5 data-v-b0ff4ece="" class="text-xl font-medium violet-title tracking-tight text-gray-900 dark:text-gray-200 whitespace-pre-line line-clamp-2">Group name</h5>
<p data-v-b0ff4ece="" class="text-gray-500 dark:text-gray-200 truncate"><span data-v-b0ff4ece="" dir="ltr">@group_name</span></p>
<p data-v-b0ff4ece="" class="text-gray-500 dark:text-gray-200 truncate"><span data-v-b0ff4ece="" dir="ltr">@group_name@domain</span></p>
<div data-v-b0ff4ece="" class="only-first-child line-clamp-10"></div>
<!--v-if-->
</div>
@@ -60,7 +60,7 @@ exports[`AdminGroupProfile > Show simple 1`] = `
</tr>
<tr>
<td>Domain</td>
<td>Local</td>
<td>domain</td>
</tr>
<tr>
<td>Uploaded media size</td>
@@ -71,8 +71,9 @@ exports[`AdminGroupProfile > Show simple 1`] = `
<div class="flex gap-1"><button type="button" class="o-btn o-btn--primary" role="button" data-oruga="button"><span class="o-btn__wrapper"><!----><span class="o-btn__label">Suspend</span>
<!----></span>
</button>
<!--v-if-->
<!--v-if-->
<!--v-if--><button type="button" class="o-btn o-btn--primary o-btn--outlined-primary" role="button" data-oruga="button"><span class="o-btn__wrapper"><!----><span class="o-btn__label">Refresh profile</span>
<!----></span>
</button>
</div>
<section>
<h2>1 members</h2>

View File

@@ -9,8 +9,12 @@ import AdminGroupProfile from "@/views/Admin/AdminGroupProfile.vue";
import { config, mount } from "@vue/test-utils";
import { Oruga } from "@oruga-ui/oruga-next";
import flushPromises from "flush-promises";
import { dialogPlugin } from "@/plugins/dialog";
import { notifierPlugin } from "@/plugins/notifier";
config.global.plugins.push(Oruga);
config.global.plugins.push(dialogPlugin);
config.global.plugins.push(notifierPlugin);
let router: Router;
@@ -51,7 +55,7 @@ const group_mock = {
__typename: "Group",
avatar: null,
banner: null,
domain: null,
domain: "domain",
id: "1125368",
manuallyApprovesFollowers: false,
mediaSize: 0,
@@ -130,5 +134,17 @@ describe("AdminGroupProfile", () => {
postsLimit: 10,
postsPage: 1,
});
wrapper.find('button[type="button"]').trigger("click");
await flushPromises();
wrapper.vm.suspendProfile({ id: "12346" });
await flushPromises();
expect(requestHandlers.handle_0).toHaveBeenCalledTimes(1);
expect(requestHandlers.handle_1).toHaveBeenCalledTimes(0);
expect(requestHandlers.handle_2).toHaveBeenCalledTimes(1);
expect(requestHandlers.handle_3).toHaveBeenCalledTimes(0);
expect(requestHandlers.handle_2).toHaveBeenCalledWith({
id: "12346",
});
});
});