From 02760e5068b7a8bcea3641f92f0f22cbe2d75157 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sat, 14 Jun 2025 09:44:29 +0200 Subject: [PATCH] Extract API mocks to their own file --- tests/guests.spec.ts | 104 ++--------------------------------------- tests/mocks/groups.tsx | 40 ++++++++++++++++ tests/mocks/guests.tsx | 61 ++++++++++++++++++++++++ 3 files changed, 104 insertions(+), 101 deletions(-) create mode 100644 tests/mocks/groups.tsx create mode 100644 tests/mocks/guests.tsx diff --git a/tests/guests.spec.ts b/tests/guests.spec.ts index 6d27594..45f9ea5 100644 --- a/tests/guests.spec.ts +++ b/tests/guests.spec.ts @@ -1,104 +1,6 @@ -import { test, expect, Page } from '@playwright/test' -import { mock } from 'node:test'; - -const mockGuestsAPI = ({ page }: { page: Page }) => { - page.route('*/**/api/default/guests', async route => { - if (route.request().method() === 'GET') { - const json = [ - { - "id": "f4a09c28-40ea-4553-90a5-96935a59cac6", - "status": "tentative", - "name": "Kristofer Rohan DVM", - "group": { - "id": "ee44ffb9-1147-4842-a378-9eaeb0f0871a", - "name": "Pam's family", - } - }, - { - "id": "bd585c40-0937-4cde-960a-bb23acfd6f18", - "status": "invited", - "name": "Olevia Quigley Jr.", - "group": { - "id": "c8bda6ca-d8af-4bb8-b2bf-e6ec1c21b1e6", - "name": "Pam's work", - } - }, - ]; - - await route.fulfill({ json }) - } else if (route.request().method() === 'POST') { - const json = { - "id": "ff58aa2d-643d-4c29-be9c-50e10ae6853c", - "name": "John Snow", - "status": "invited", - "group": { - "id": "c8bda6ca-d8af-4bb8-b2bf-e6ec1c21b1e6", - "name": "Pam's work", - } - }; - - await route.fulfill({ json }); - } - }) - - page.route("*/**/api/default/guests/*", async route => { - if (route.request().method() === 'PUT') { - const json = { - "id": "ff58aa2d-643d-4c29-be9c-50e10ae6853c", - "name": "John Fire", - "status": "declined", - "group": { - "id": "ee44ffb9-1147-4842-a378-9eaeb0f0871a", - "name": "Pam's family", - } - } - await route.fulfill({ json }); - - } else if (route.request().method() === 'DELETE') { - const json = {} - await route.fulfill({ json }); - } - }); -} - -const mockGroupsAPI = ({ page }: { page: Page }) => { - page.route('*/**/api/default/groups', async route => { - const json = [ - { - "id": "ee44ffb9-1147-4842-a378-9eaeb0f0871a", - "name": "Pam's family", - "icon": "pi pi-users", - "parent_id": null, - "color": "#ff0000", - "attendance": { - "total": 3, - "considered": 2, - "invited": 1, - "confirmed": 0, - "declined": 0, - "tentative": 0 - } - }, - { - "id": "c8bda6ca-d8af-4bb8-b2bf-e6ec1c21b1e6", - "name": "Pam's work", - "icon": "pi pi-desktop", - "parent_id": null, - "color": "#00ff00", - "attendance": { - "total": 2, - "considered": 0, - "invited": 0, - "confirmed": 0, - "declined": 0, - "tentative": 2 - } - }, - ]; - - await route.fulfill({ json }) - }) -} +import { expect, test } from '@playwright/test'; +import mockGroupsAPI from './mocks/groups'; +import mockGuestsAPI from './mocks/guests'; test('should allow CRUD on guests', async ({ page }) => { await mockGuestsAPI({ page }); diff --git a/tests/mocks/groups.tsx b/tests/mocks/groups.tsx new file mode 100644 index 0000000..bc17bc1 --- /dev/null +++ b/tests/mocks/groups.tsx @@ -0,0 +1,40 @@ +import { Page } from "@playwright/test"; + +export default async function mockGroupsAPI({ page }: { page: Page }): Promise { + page.route('*/**/api/default/groups', async route => { + const json = [ + { + "id": "ee44ffb9-1147-4842-a378-9eaeb0f0871a", + "name": "Pam's family", + "icon": "pi pi-users", + "parent_id": null, + "color": "#ff0000", + "attendance": { + "total": 3, + "considered": 2, + "invited": 1, + "confirmed": 0, + "declined": 0, + "tentative": 0 + } + }, + { + "id": "c8bda6ca-d8af-4bb8-b2bf-e6ec1c21b1e6", + "name": "Pam's work", + "icon": "pi pi-desktop", + "parent_id": null, + "color": "#00ff00", + "attendance": { + "total": 2, + "considered": 0, + "invited": 0, + "confirmed": 0, + "declined": 0, + "tentative": 2 + } + }, + ]; + + await route.fulfill({ json }) + }) +} \ No newline at end of file diff --git a/tests/mocks/guests.tsx b/tests/mocks/guests.tsx new file mode 100644 index 0000000..f9d7ef7 --- /dev/null +++ b/tests/mocks/guests.tsx @@ -0,0 +1,61 @@ +import { Page } from "@playwright/test"; + +export default async function mockGuestsAPI({ page }: { page: Page }): Promise { + page.route('*/**/api/default/guests', async route => { + if (route.request().method() === 'GET') { + const json = [ + { + "id": "f4a09c28-40ea-4553-90a5-96935a59cac6", + "status": "tentative", + "name": "Kristofer Rohan DVM", + "group": { + "id": "ee44ffb9-1147-4842-a378-9eaeb0f0871a", + "name": "Pam's family", + } + }, + { + "id": "bd585c40-0937-4cde-960a-bb23acfd6f18", + "status": "invited", + "name": "Olevia Quigley Jr.", + "group": { + "id": "c8bda6ca-d8af-4bb8-b2bf-e6ec1c21b1e6", + "name": "Pam's work", + } + }, + ]; + + await route.fulfill({ json }) + } else if (route.request().method() === 'POST') { + const json = { + "id": "ff58aa2d-643d-4c29-be9c-50e10ae6853c", + "name": "John Snow", + "status": "invited", + "group": { + "id": "c8bda6ca-d8af-4bb8-b2bf-e6ec1c21b1e6", + "name": "Pam's work", + } + }; + + await route.fulfill({ json }); + } + }) + + page.route("*/**/api/default/guests/*", async route => { + if (route.request().method() === 'PUT') { + const json = { + "id": "ff58aa2d-643d-4c29-be9c-50e10ae6853c", + "name": "John Fire", + "status": "declined", + "group": { + "id": "ee44ffb9-1147-4842-a378-9eaeb0f0871a", + "name": "Pam's family", + } + } + await route.fulfill({ json }); + + } else if (route.request().method() === 'DELETE') { + const json = {} + await route.fulfill({ json }); + } + }); +} \ No newline at end of file