diff --git a/tests/unit/specs/components/admin/__snapshots__/adminGroupProfile.spec.ts.snap b/tests/unit/specs/components/admin/__snapshots__/adminGroupProfile.spec.ts.snap new file mode 100644 index 000000000..9502a86f1 --- /dev/null +++ b/tests/unit/specs/components/admin/__snapshots__/adminGroupProfile.spec.ts.snap @@ -0,0 +1,255 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`AdminGroupProfile > Show simple 1`] = ` +"
+ +
+
+
+
+
Group name
+

@group_name

+
+ +
+ +
+ +
+ + + + + + + + + + + + + + + +
StatusActive
DomainLocal
Uploaded media size0 octet
+
+ + +
+
+

1 members

+
+
Member Role Date
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Member Role Date
+ + AdministratorSunday, June 13, 2021
9:24 AM
+ + + +
+
+
+
+ +
+
+
+
+
+

30410 organized events

+
+
Title Begins on
+ + +
+ + + + + + + + + + + + + + + + + + + +
Title Begins on
+
+

+ No organized events found +

+

+ +

+
+
+ + + +
+
+
+
+ +
+
+
+
+
+

0 posts

+
+
Title Publication date
+ + +
+ + + + + + + + + + + + + + + + + + + +
Title Publication date
+
+

+ No posts found +

+

+ +

+
+
+ + + +
+
+
+
+ +
+
+
+
+
" +`; diff --git a/tests/unit/specs/components/admin/__snapshots__/adminProfile.spec.ts.snap b/tests/unit/specs/components/admin/__snapshots__/adminProfile.spec.ts.snap new file mode 100644 index 000000000..8a210c5cf --- /dev/null +++ b/tests/unit/specs/components/admin/__snapshots__/adminProfile.spec.ts.snap @@ -0,0 +1,258 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`AdminProfile > Show simple 1`] = ` +"
+ +
+
+
+
+
CurrentPerson
+

@current

+ +
+
+
+
+ +
+
+

Details

+
+
+
+
+ + + + + + + + + + + + + + + + + + + +
StatusActive
DomainLocal
Uploaded media size0 octet
Usercurrent@mobilizon.test
+
+
+
+
+
+
+

Actions

+

+ +
+
+

Organized events

+
+
Begins on Title
+ + +
+ + + + + + + + + + + + + + + + + + + +
Begins on Title
+
+

+ No organized events listed +

+

+ +

+
+
+ + + +
+
+
+
+ +
+
+
+
+
+

Participations

+
+
Begins on Title
+ + +
+ + + + + + + + + + + + + + + + + + + +
Begins on Title
+
+

+ No participations listed +

+

+ +

+
+
+ + + +
+
+
+
+ +
+
+
+
+
+

Memberships

+
+
Group Role Date
+ + +
+ + + + + + + + + + + + + + + + + + + + +
Group Role Date
+
+

+ No memberships found +

+

+ +

+
+
+ + + +
+
+
+
+ +
+
+
+
+
" +`; diff --git a/tests/unit/specs/components/admin/__snapshots__/dashboard.spec.ts.snap b/tests/unit/specs/components/admin/__snapshots__/dashboard.spec.ts.snap new file mode 100644 index 000000000..865634c87 --- /dev/null +++ b/tests/unit/specs/components/admin/__snapshots__/dashboard.spec.ts.snap @@ -0,0 +1,28 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`Dashboard > Show simple 1`] = ` +"
+ +
+

Administration

+
+ + + + + + +
+
+
+

Last published event

+ +
+
+

Last group created

+ +
+
+
+
" +`; diff --git a/tests/unit/specs/components/admin/__snapshots__/groupProfiles.spec.ts.snap b/tests/unit/specs/components/admin/__snapshots__/groupProfiles.spec.ts.snap new file mode 100644 index 000000000..c67344908 --- /dev/null +++ b/tests/unit/specs/components/admin/__snapshots__/groupProfiles.spec.ts.snap @@ -0,0 +1,122 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`GroupProfiles > Show simple 1`] = ` +"
+ + +
+
+
+
Username Domain
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Username Domain
+ + +
+ + +
+
+
+
+

Group #1

@group1 +
+
+
+
+
+
+
+

Group #4

@group4 +
+
+
+
+
+
+
+

Group #2

@group2 +
+
+
+
+ + + +
+
+
+
+ +
+
+
+
+
" +`; diff --git a/tests/unit/specs/components/admin/__snapshots__/instanceView.spec.ts.snap b/tests/unit/specs/components/admin/__snapshots__/instanceView.spec.ts.snap new file mode 100644 index 000000000..636dfae90 --- /dev/null +++ b/tests/unit/specs/components/admin/__snapshots__/instanceView.spec.ts.snap @@ -0,0 +1,33 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`InstanceView > Show simple 1`] = ` +"
+ +
+
+

Mobilizon

+

Mobilizon for test

Software details: Mobilizon - 5.1.5 +
Visit mobilizon.test +
+
+
+ + +
0Followings
+
0Followers
+ +
2,81 mégaoctetsUploaded media size
+
+
+
+
+
+
+ + +

This instance doesn't follow yours.

+
+
+
+
" +`; diff --git a/tests/unit/specs/components/admin/__snapshots__/instancesView.spec.ts.snap b/tests/unit/specs/components/admin/__snapshots__/instancesView.spec.ts.snap new file mode 100644 index 000000000..bea979cef --- /dev/null +++ b/tests/unit/specs/components/admin/__snapshots__/instancesView.spec.ts.snap @@ -0,0 +1,119 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`InstancesView > Show simple 1`] = ` +"
+ +
+

Instances

+
+
+
+
+
+ +
+
+
+ +
+
+

+

+ + + +
+

+

+ + + +

+
+
+ +
+
+
+

+
+
+ +
+
+
+
+
+
+
+ +
+
+
+
+
+ + + +
+
+
+ +
+
+ +
+
" +`; diff --git a/tests/unit/specs/components/admin/__snapshots__/profilesView.spec.ts.snap b/tests/unit/specs/components/admin/__snapshots__/profilesView.spec.ts.snap new file mode 100644 index 000000000..32c6776f4 --- /dev/null +++ b/tests/unit/specs/components/admin/__snapshots__/profilesView.spec.ts.snap @@ -0,0 +1,115 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`ProfilesView > Show simple 1`] = ` +"
+ +
+
+
+
Username Domain
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Username Domain
+ + +
+ + +
+
+
+
Mobilizon Anonymous Actor
@anonymous
+
+
+
+
+
+
Mobilizon
@mobilizon
+
+
+
+
+
+
Example
@example
+
+
+
+ + + +
+
+
+
+ +
+
+
+
+
" +`; diff --git a/tests/unit/specs/components/admin/adminGroupProfile.spec.ts b/tests/unit/specs/components/admin/adminGroupProfile.spec.ts new file mode 100644 index 000000000..927648ec4 --- /dev/null +++ b/tests/unit/specs/components/admin/adminGroupProfile.spec.ts @@ -0,0 +1,134 @@ +import { beforeEach, describe, it, expect } from "vitest"; +import { enUS } from "date-fns/locale"; +import { routes } from "@/router"; +import { createRouter, createWebHistory, Router } from "vue-router"; +import { GET_GROUP, REFRESH_PROFILE } from "@/graphql/group"; +import { SUSPEND_PROFILE, UNSUSPEND_PROFILE } from "@/graphql/actor"; +import { getMockClient, requestHandlers } from "../../mocks/client"; +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"; + +config.global.plugins.push(Oruga); + +let router: Router; + +beforeEach(async () => { + router = createRouter({ + history: createWebHistory(), + routes: routes, + }); + + // await router.isReady(); +}); + +const generateWrapper = (group_mock: any = {}) => { + const global_data = getMockClient([ + [GET_GROUP, group_mock], + REFRESH_PROFILE, + SUSPEND_PROFILE, + UNSUSPEND_PROFILE, + ]); + global_data.provide.dateFnsLocale = enUS; + global_data.plugins = [router]; + return mount(AdminGroupProfile, { + props: { + id: "123456", + }, + global: { + ...global_data, + stubs: { + RouterLink: false, + }, + }, + }); +}; + +const group_mock = { + data: { + getGroup: { + __typename: "Group", + avatar: null, + banner: null, + domain: null, + id: "1125368", + manuallyApprovesFollowers: false, + mediaSize: 0, + members: { + __typename: "PaginatedMemberList", + elements: [ + { + __typename: "Member", + actor: { + __typename: "Person", + avatar: null, + domain: null, + id: "6548012", + name: "member #1", + preferredUsername: "member_1", + summary: "member #1", + type: "PERSON", + url: "https://mobilizon.test/@member_1", + }, + id: "3d70f3c8-050f-49dd-b7fe-9bb4398225c8", + insertedAt: "2021-06-13T09:24:47", + role: "ADMINISTRATOR", + }, + ], + total: 1, + }, + name: "Group name", + openness: "INVITE_ONLY", + organizedEvents: { + __typename: "PaginatedEventList", + elements: [], + total: 30410, + }, + physicalAddress: null, + posts: { + __typename: "PaginatedPostList", + elements: [], + total: 0, + }, + preferredUsername: "group_name", + resources: { + __typename: "PaginatedResourceList", + elements: [], + total: 0, + }, + summary: null, + suspended: false, + todoLists: { + __typename: "PaginatedTodoListList", + elements: [], + total: 0, + }, + type: "GROUP", + url: "https://mobilizon.test/@group_name", + visibility: "PUBLIC", + }, + }, +}; + +describe("AdminGroupProfile", () => { + it("Show simple", async () => { + const wrapper = generateWrapper(group_mock); + await wrapper.vm.$nextTick(); + await flushPromises(); + expect(wrapper.html()).toMatchSnapshot(); + expect(requestHandlers.handle_0).toHaveBeenCalledTimes(1); + expect(requestHandlers.handle_1).toHaveBeenCalledTimes(0); + expect(requestHandlers.handle_2).toHaveBeenCalledTimes(0); + expect(requestHandlers.handle_3).toHaveBeenCalledTimes(0); + expect(requestHandlers.handle_0).toHaveBeenCalledWith({ + id: "123456", + membersLimit: 10, + membersPage: 1, + organizedEventsLimit: 10, + organizedEventsPage: 1, + postsLimit: 10, + postsPage: 1, + }); + }); +}); diff --git a/tests/unit/specs/components/admin/adminProfile.spec.ts b/tests/unit/specs/components/admin/adminProfile.spec.ts new file mode 100644 index 000000000..9ce79fd38 --- /dev/null +++ b/tests/unit/specs/components/admin/adminProfile.spec.ts @@ -0,0 +1,114 @@ +import { beforeEach, describe, it, expect } from "vitest"; +import { enUS } from "date-fns/locale"; +import { routes } from "@/router"; +import { createRouter, createWebHistory, Router } from "vue-router"; +import { getMockClient, requestHandlers } from "../../mocks/client"; +import AdminProfile from "@/views/Admin/AdminProfile.vue"; +import { config, mount } from "@vue/test-utils"; +import { Oruga } from "@oruga-ui/oruga-next"; +import flushPromises from "flush-promises"; +import { + GET_PERSON, + SUSPEND_PROFILE, + UNSUSPEND_PROFILE, +} from "@/graphql/actor"; + +config.global.plugins.push(Oruga); + +let router: Router; + +beforeEach(async () => { + router = createRouter({ + history: createWebHistory(), + routes: routes, + }); + + // await router.isReady(); +}); + +const person_mock = { + data: { + person: { + __typename: "Person", + avatar: null, + banner: null, + domain: null, + feedTokens: [ + { + __typename: "FeedToken", + token: "Se4rSUMzeX8KMC4bz7Yybq", + }, + ], + id: "2", + mediaSize: 0, + memberships: { + __typename: "PaginatedMemberList", + elements: [], + total: 0, + }, + name: "CurrentPerson", + organizedEvents: { + __typename: "PaginatedEventList", + elements: [], + total: 0, + }, + participations: { + __typename: "PaginatedParticipantList", + elements: [], + total: 0, + }, + preferredUsername: "current", + summary: null, + suspended: false, + type: "PERSON", + url: "https://mobilizon.test/@current", + user: { + __typename: "User", + email: "current@mobilizon.test", + id: "1", + }, + }, + }, +}; + +const generateWrapper = (mock_person: any = {}) => { + const global_data = getMockClient([ + [GET_PERSON, mock_person], + SUSPEND_PROFILE, + UNSUSPEND_PROFILE, + ]); + global_data.provide.dateFnsLocale = enUS; + global_data.plugins = [router]; + return mount(AdminProfile, { + props: { + id: "987654", + }, + global: { + ...global_data, + stubs: { + RouterLink: false, + }, + }, + }); +}; + +describe("AdminProfile", () => { + it("Show simple", async () => { + const wrapper = generateWrapper(person_mock); + await wrapper.vm.$nextTick(); + await flushPromises(); + expect(wrapper.html()).toMatchSnapshot(); + expect(requestHandlers.handle_0).toHaveBeenCalledTimes(1); + expect(requestHandlers.handle_1).toHaveBeenCalledTimes(0); + expect(requestHandlers.handle_2).toHaveBeenCalledTimes(0); + expect(requestHandlers.handle_0).toHaveBeenCalledWith({ + actorId: "987654", + membershipsLimit: 10, + membershipsPage: 1, + organizedEventsLimit: 10, + organizedEventsPage: 1, + participationLimit: 10, + participationsPage: 1, + }); + }); +}); diff --git a/tests/unit/specs/components/admin/dashboard.spec.ts b/tests/unit/specs/components/admin/dashboard.spec.ts new file mode 100644 index 000000000..5d3b26aa4 --- /dev/null +++ b/tests/unit/specs/components/admin/dashboard.spec.ts @@ -0,0 +1,129 @@ +import { beforeEach, describe, it, expect } from "vitest"; +import { enUS } from "date-fns/locale"; +import { routes } from "@/router"; +import { createRouter, createWebHistory, Router } from "vue-router"; +import { getMockClient, requestHandlers } from "../../mocks/client"; +import DashboardView from "@/views/Admin/DashboardView.vue"; +import { config, shallowMount } from "@vue/test-utils"; +import { Oruga } from "@oruga-ui/oruga-next"; +import flushPromises from "flush-promises"; +import { DASHBOARD } from "@/graphql/admin"; + +config.global.plugins.push(Oruga); + +let router: Router; + +beforeEach(async () => { + router = createRouter({ + history: createWebHistory(), + routes: routes, + }); + + // await router.isReady(); +}); + +const dashboard_mock = { + data: { + dashboard: { + __typename: "Dashboard", + lastGroupCreated: { + __typename: "Group", + avatar: null, + domain: null, + id: "1125368", + name: "lastGroup", + preferredUsername: "lastgroup", + summary: null, + type: "GROUP", + url: "https://mobilizon.test/@lastGroup", + }, + lastPublicEventPublished: { + __typename: "Event", + attributedTo: { + __typename: "Group", + avatar: null, + domain: null, + id: "1125368", + name: "lastGroup", + preferredUsername: "lastgroup", + summary: null, + type: "GROUP", + url: "https://mobilizon.test/@lastGroup", + }, + beginsOn: "2026-04-28T15:00:00Z", + id: "2675674", + options: { + __typename: "EventOptions", + anonymousParticipation: false, + attendees: null, + commentModeration: "CLOSED", + hideNumberOfParticipants: false, + hideOrganizerWhenGroupEvent: false, + isOnline: false, + maximumAttendeeCapacity: null, + offers: [], + participationConditions: null, + program: null, + remainingAttendeeCapacity: null, + showEndTime: true, + showParticipationPrice: null, + showRemainingAttendeeCapacity: null, + showStartTime: true, + timezone: "Europe/Paris", + }, + organizerActor: { + __typename: "Person", + avatar: null, + domain: null, + id: "109687", + name: "organizer", + preferredUsername: "organizer", + summary: "Organizer", + type: "PERSON", + url: "https://mobilizion.test/@organizer", + }, + picture: { + __typename: "Media", + alt: null, + url: "https://mobilizion.test/media/f57a2cfc8c959b0dafc94c0eed74ad8f7050844ce1c9147fcdb58dd2ac709cde.webp?name=Market.webp", + uuid: "1416f0ff-826d-44ba-94c7-e81b29095f87", + }, + title: "Last event very nice", + uuid: "76600bf1-b870-4577-9941-1072ebdcd753", + }, + numberOfComments: 5, + numberOfConfirmedParticipationsToLocalEvents: 23, + numberOfEvents: 340, + numberOfFollowers: 12, + numberOfFollowings: 35, + numberOfGroups: 67, + numberOfReports: 9, + numberOfUsers: 220, + }, + }, +}; + +const generateWrapper = (mock_dashboard = {}) => { + const global_data = getMockClient([[DASHBOARD, mock_dashboard]]); + global_data.provide.dateFnsLocale = enUS; + global_data.plugins = [router]; + return shallowMount(DashboardView, { + global: { + ...global_data, + stubs: { + RouterLink: false, + }, + }, + }); +}; + +describe("Dashboard", () => { + it("Show simple", async () => { + const wrapper = generateWrapper(dashboard_mock); + await wrapper.vm.$nextTick(); + await flushPromises(); + expect(wrapper.html()).toMatchSnapshot(); + expect(requestHandlers.handle_0).toHaveBeenCalledTimes(1); + expect(requestHandlers.handle_0).toHaveBeenCalledWith({}); + }); +}); diff --git a/tests/unit/specs/components/admin/groupProfiles.spec.ts b/tests/unit/specs/components/admin/groupProfiles.spec.ts new file mode 100644 index 000000000..c3eb9829f --- /dev/null +++ b/tests/unit/specs/components/admin/groupProfiles.spec.ts @@ -0,0 +1,122 @@ +import { beforeEach, describe, it, expect } from "vitest"; +import { enUS } from "date-fns/locale"; +import { routes } from "@/router"; +import { createRouter, createWebHistory, Router } from "vue-router"; +import { getMockClient, requestHandlers } from "../../mocks/client"; +import GroupProfiles from "@/views/Admin/GroupProfiles.vue"; +import { config, mount } from "@vue/test-utils"; +import { Oruga } from "@oruga-ui/oruga-next"; +import flushPromises from "flush-promises"; +import { LIST_GROUPS } from "@/graphql/group"; +import { htmlRemoveId } from "../../common"; + +config.global.plugins.push(Oruga); + +let router: Router; + +beforeEach(async () => { + router = createRouter({ + history: createWebHistory(), + routes: routes, + }); + + // await router.isReady(); +}); + +const groups_mock = { + data: { + groups: { + __typename: "PaginatedGroupList", + elements: [ + { + __typename: "Group", + avatar: null, + banner: null, + domain: null, + id: "1125368", + name: "Group #1", + organizedEvents: { + __typename: "PaginatedEventList", + elements: [], + total: 0, + }, + preferredUsername: "group1", + summary: null, + suspended: false, + type: "GROUP", + url: "https://mobilizon.test/@group1", + }, + { + __typename: "Group", + avatar: null, + banner: null, + domain: null, + id: "175368", + name: "Group #4", + organizedEvents: { + __typename: "PaginatedEventList", + elements: [], + total: 0, + }, + preferredUsername: "group4", + summary: null, + suspended: false, + type: "GROUP", + url: "https://mobilizon.test/@group4", + }, + { + __typename: "Group", + avatar: null, + banner: null, + domain: null, + id: "1126368", + name: "Group #2", + organizedEvents: { + __typename: "PaginatedEventList", + elements: [], + total: 0, + }, + preferredUsername: "group2", + summary: null, + suspended: false, + type: "GROUP", + url: "https://mobilizon.test/@group2", + }, + ], + total: 3, + }, + }, +}; + +const generateWrapper = (mock_groups = {}) => { + const global_data = getMockClient([[LIST_GROUPS, mock_groups]]); + global_data.provide.dateFnsLocale = enUS; + global_data.plugins = [router]; + return mount(GroupProfiles, { + global: { + ...global_data, + stubs: { + RouterLink: false, + }, + }, + }); +}; + +describe("GroupProfiles", () => { + it("Show simple", async () => { + const wrapper = generateWrapper(groups_mock); + await wrapper.vm.$nextTick(); + await flushPromises(); + expect(htmlRemoveId(wrapper.html())).toMatchSnapshot(); + expect(requestHandlers.handle_0).toHaveBeenCalledTimes(1); + expect(requestHandlers.handle_0).toHaveBeenCalledWith({ + domain: "", + limit: 10, + local: true, + name: "", + page: 1, + preferredUsername: "", + suspended: false, + }); + }); +}); diff --git a/tests/unit/specs/components/admin/instanceView.spec.ts b/tests/unit/specs/components/admin/instanceView.spec.ts new file mode 100644 index 000000000..d06813a9f --- /dev/null +++ b/tests/unit/specs/components/admin/instanceView.spec.ts @@ -0,0 +1,88 @@ +import { beforeEach, describe, it, expect } from "vitest"; +import { enUS } from "date-fns/locale"; +import { routes } from "@/router"; +import { createRouter, createWebHistory, Router } from "vue-router"; +import { + ACCEPT_RELAY, + ADD_INSTANCE, + INSTANCE, + REJECT_RELAY, + REMOVE_RELAY, +} from "@/graphql/admin"; +import { getMockClient, requestHandlers } from "../../mocks/client"; +import InstanceView from "@/views/Admin/InstanceView.vue"; +import { config, mount } from "@vue/test-utils"; +import { Oruga } from "@oruga-ui/oruga-next"; +import flushPromises from "flush-promises"; + +config.global.plugins.push(Oruga); + +let router: Router; + +beforeEach(async () => { + router = createRouter({ + history: createWebHistory(), + routes: routes, + }); + + // await router.isReady(); +}); + +const instance_mock = { + data: { + instance: { + __typename: "Instance", + domain: "mobilizon.test", + eventCount: 20, + followedStatus: "NONE", + followerStatus: "NONE", + followersCount: 0, + followingsCount: 0, + groupCount: 1, + hasRelay: true, + instanceDescription: "Mobilizon for test", + instanceName: "Mobilizon", + mediaSize: 2951695, + personCount: 5, + relayAddress: "relay@mobilizon.test", + reportsCount: 1, + software: "Mobilizon", + softwareVersion: "5.1.5", + }, + }, +}; + +const generateWrapper = (mock_instance = {}) => { + const global_data = getMockClient([ + ACCEPT_RELAY, + ADD_INSTANCE, + [INSTANCE, mock_instance], + REJECT_RELAY, + REMOVE_RELAY, + ]); + global_data.provide.dateFnsLocale = enUS; + global_data.plugins = [router]; + return mount(InstanceView, { + global: { + ...global_data, + stubs: { + RouterLink: false, + }, + }, + }); +}; + +describe("InstanceView", () => { + it("Show simple", async () => { + const wrapper = generateWrapper(instance_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_2).toHaveBeenCalledTimes(1); + expect(requestHandlers.handle_3).toHaveBeenCalledTimes(0); + expect(requestHandlers.handle_4).toHaveBeenCalledTimes(0); + expect(requestHandlers.handle_2).toHaveBeenCalledWith({}); + }); +}); diff --git a/tests/unit/specs/components/admin/instancesView.spec.ts b/tests/unit/specs/components/admin/instancesView.spec.ts new file mode 100644 index 000000000..f95f6b05c --- /dev/null +++ b/tests/unit/specs/components/admin/instancesView.spec.ts @@ -0,0 +1,106 @@ +import { beforeEach, describe, it, expect } from "vitest"; +import { enUS } from "date-fns/locale"; +import { routes } from "@/router"; +import { createRouter, createWebHistory, Router } from "vue-router"; +import { getMockClient, requestHandlers } from "../../mocks/client"; +import InstancesView from "@/views/Admin/InstancesView.vue"; +import { config, mount } from "@vue/test-utils"; +import { Oruga } from "@oruga-ui/oruga-next"; +import flushPromises from "flush-promises"; +import { ADD_INSTANCE, INSTANCES } from "@/graphql/admin"; + +config.global.plugins.push(Oruga); + +let router: Router; + +beforeEach(async () => { + router = createRouter({ + history: createWebHistory(), + routes: routes, + }); + + // await router.isReady(); +}); + +const instances_mock = { + data: { + instances: { + __typename: "PaginatedInstanceList", + elements: [ + { + __typename: "Instance", + domain: "mobilizon.test", + eventCount: 20, + followedStatus: "NONE", + followerStatus: "NONE", + followersCount: 0, + followingsCount: 0, + groupCount: 1, + hasRelay: true, + instanceDescription: "Mobilizon for test.", + instanceName: "Mobilizon", + mediaSize: 2951695, + personCount: 5, + relayAddress: "relay@mobilizon.test", + reportsCount: 1, + software: "Mobilizon", + softwareVersion: "5.1.5", + }, + { + __typename: "Instance", + domain: "agenda.test", + eventCount: 4, + followedStatus: "APPROVED", + followerStatus: "NONE", + followersCount: 0, + followingsCount: 12, + groupCount: 0, + hasRelay: true, + instanceDescription: "agenda gancio", + instanceName: "Agenda de Crémeaux", + mediaSize: 3774456, + personCount: 0, + relayAddress: "events@agenda.test", + reportsCount: 0, + software: "gancio", + softwareVersion: "1.27.0", + }, + ], + total: 2, + }, + }, +}; + +const generateWrapper = (mock_instances = {}) => { + const global_data = getMockClient([ + ADD_INSTANCE, + [INSTANCES, mock_instances], + ]); + global_data.provide.dateFnsLocale = enUS; + global_data.plugins = [router]; + return mount(InstancesView, { + global: { + ...global_data, + stubs: { + RouterLink: false, + }, + }, + }); +}; + +describe("InstancesView", () => { + it("Show simple", async () => { + const wrapper = generateWrapper(instances_mock); + await wrapper.vm.$nextTick(); + await flushPromises(); + expect(wrapper.html()).toMatchSnapshot(); + expect(requestHandlers.handle_0).toHaveBeenCalledTimes(0); + expect(requestHandlers.handle_1).toHaveBeenCalledTimes(1); + expect(requestHandlers.handle_1).toHaveBeenCalledWith({ + filterDomain: "", + filterFollowStatus: "ALL", + limit: 10, + page: 1, + }); + }); +}); diff --git a/tests/unit/specs/components/admin/profilesView.spec.ts b/tests/unit/specs/components/admin/profilesView.spec.ts new file mode 100644 index 000000000..e7e60ea85 --- /dev/null +++ b/tests/unit/specs/components/admin/profilesView.spec.ts @@ -0,0 +1,101 @@ +import { beforeEach, describe, it, expect } from "vitest"; +import { enUS } from "date-fns/locale"; +import { routes } from "@/router"; +import { createRouter, createWebHistory, Router } from "vue-router"; +import { getMockClient, requestHandlers } from "../../mocks/client"; +import ProfilesView from "@/views/Admin/ProfilesView.vue"; +import { config, mount } from "@vue/test-utils"; +import { Oruga } from "@oruga-ui/oruga-next"; +import flushPromises from "flush-promises"; +import { LIST_PROFILES } from "@/graphql/actor"; +import { htmlRemoveId } from "../../common"; + +config.global.plugins.push(Oruga); + +let router: Router; + +beforeEach(async () => { + router = createRouter({ + history: createWebHistory(), + routes: routes, + }); + + // await router.isReady(); +}); + +const profiles_mock = { + data: { + persons: { + __typename: "PaginatedPersonList", + elements: [ + { + __typename: "Person", + avatar: null, + domain: null, + id: "1", + name: "Mobilizon Anonymous Actor", + preferredUsername: "anonymous", + summary: "A fake person for anonymous participations", + type: "PERSON", + url: "https://mobilizion.test/@anonymous", + }, + { + __typename: "Person", + avatar: null, + domain: null, + id: "2", + name: "Mobilizon", + preferredUsername: "mobilizon", + summary: null, + type: "PERSON", + url: "https://mobilizion.test/@mobilizon", + }, + { + __typename: "Person", + avatar: null, + domain: null, + id: "109687", + name: "Example", + preferredUsername: "example", + summary: "Profile for example", + type: "PERSON", + url: "https://mobilizion.test/@example", + }, + ], + total: 3, + }, + }, +}; + +const generateWrapper = (mock_profiles = {}) => { + const global_data = getMockClient([[LIST_PROFILES, mock_profiles]]); + global_data.provide.dateFnsLocale = enUS; + global_data.plugins = [router]; + return mount(ProfilesView, { + global: { + ...global_data, + stubs: { + RouterLink: false, + }, + }, + }); +}; + +describe("ProfilesView", () => { + it("Show simple", async () => { + const wrapper = generateWrapper(profiles_mock); + await wrapper.vm.$nextTick(); + await flushPromises(); + expect(htmlRemoveId(wrapper.html())).toMatchSnapshot(); + expect(requestHandlers.handle_0).toHaveBeenCalledTimes(1); + expect(requestHandlers.handle_0).toHaveBeenCalledWith({ + domain: "", + limit: 10, + local: true, + name: "", + page: 1, + preferredUsername: "", + suspended: false, + }); + }); +}); diff --git a/tests/unit/specs/mocks/client.ts b/tests/unit/specs/mocks/client.ts index 3ef4ac150..d72ae2017 100644 --- a/tests/unit/specs/mocks/client.ts +++ b/tests/unit/specs/mocks/client.ts @@ -10,9 +10,9 @@ import { vi } from "vitest"; import { nullMock } from "../common"; let mockClient: MockApolloClient | null; -let requestHandlers: Record; +export let requestHandlers: Record; -export function getMockClient(queries: Array): any { +export function getMockClient(queries: Array): any { mockClient = createMockClient({ cache, resolvers: buildCurrentUserResolver(cache), @@ -20,8 +20,23 @@ export function getMockClient(queries: Array): any { requestHandlers = { nullHandle: vi.fn().mockResolvedValue(nullMock), }; - queries.forEach((query: any) => { - mockClient.setRequestHandler(query, requestHandlers.nullHandle); + queries.forEach((query: any, index: number) => { + let mock_val = null; + let query_gq = null; + if (Array.isArray(query)) { + query_gq = query[0]; + mock_val = query[1]; + } else { + query_gq = query; + mock_val = nullMock; + } + requestHandlers["handle_" + index.toString()] = vi + .fn() + .mockResolvedValue(mock_val); + mockClient.setRequestHandler( + query_gq, + requestHandlers["handle_" + index.toString()] + ); }); return { provide: { [DefaultApolloClient]: mockClient } }; }