From 5dd9d44172690bab5a6282886bd7648eb4ca4133 Mon Sep 17 00:00:00 2001 From: Jaime Leonardo Suncin Cruz Date: Sun, 27 Mar 2022 12:53:22 -0600 Subject: [PATCH] test(e2e): fix mock of get list of todos --- e2e/todo/create.spec.ts | 24 +++++++++++------------- e2e/todo/filter.spec.ts | 4 +++- e2e/todo/list.spec.ts | 10 +++------- e2e/todo/update.spec.ts | 12 ++++++------ 4 files changed, 23 insertions(+), 27 deletions(-) diff --git a/e2e/todo/create.spec.ts b/e2e/todo/create.spec.ts index 4241fc5f..14f9c6dc 100644 --- a/e2e/todo/create.spec.ts +++ b/e2e/todo/create.spec.ts @@ -1,25 +1,21 @@ import { faker } from '@faker-js/faker'; import { expect, test } from '@playwright/test'; -import type { Todo } from '../../src/features/todo/todoSlice'; - -const todos: Todo[] = Array.from({ length: 9 }, () => ({ - id: faker.datatype.uuid(), - task: faker.lorem.sentence(), - completed: faker.datatype.boolean(), -})); +import db from '../../db.json'; test.describe('create a todo', () => { test.beforeEach(async ({ page }) => { - await page.goto('/'); + await page.route('**/api/todos?**', (route) => { + const url = new URL(route.request().url()); + const page = +url.searchParams.get('_page'); + const limit = 10; - await page.route('**/api/todos?**', (route) => - route.fulfill({ + return route.fulfill({ status: 200, contentType: 'application/json', - body: JSON.stringify(todos), - }), - ); + body: JSON.stringify(db.todos.slice(limit * (page - 1), limit * page)), + }); + }); await page.route('**/api/todos', (route) => route.fulfill({ @@ -28,6 +24,8 @@ test.describe('create a todo', () => { body: route.request().postData(), }), ); + + await page.goto('/'); }); test('submit the form', async ({ page }) => { diff --git a/e2e/todo/filter.spec.ts b/e2e/todo/filter.spec.ts index 38b91028..6d8e2c6b 100644 --- a/e2e/todo/filter.spec.ts +++ b/e2e/todo/filter.spec.ts @@ -11,13 +11,14 @@ const completedCount = todos.length - activeCount; test.describe('Filter todos by', () => { test.beforeEach(async ({ page }) => { - await page.route('**/api/todos**', (route) => + await page.route('**/api/todos?**', (route) => route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify(todos), }), ); + await page.route('**/api/todos/**', (route) => route.fulfill({ status: 200, @@ -25,6 +26,7 @@ test.describe('Filter todos by', () => { body: '{}', }), ); + await page.goto('/', { waitUntil: 'networkidle' }); }); diff --git a/e2e/todo/list.spec.ts b/e2e/todo/list.spec.ts index 291c218b..2996693c 100644 --- a/e2e/todo/list.spec.ts +++ b/e2e/todo/list.spec.ts @@ -1,18 +1,14 @@ import { faker } from '@faker-js/faker'; import { expect, test } from '@playwright/test'; -import type { Todo } from '../../src/features/todo/todoSlice'; +import db from '../../db.json'; test.describe('list and paginate', () => { let countTotal: number; test.beforeEach(async ({ page }) => { - await page.route('**/api/todos**', async (route) => { - const todos: Todo[] = Array.from({ length: 10 }, (_, index) => ({ - id: faker.datatype.uuid(), - task: `${String(index + 1).padStart(2, '0')} ${faker.lorem.sentence()}`, - completed: faker.datatype.boolean(), - })); + await page.route('**/api/todos?**', async (route) => { + const todos = faker.random.arrayElements(db.todos, 10); countTotal = faker.datatype.number({ min: 42, max: 104 }); return route.fulfill({ diff --git a/e2e/todo/update.spec.ts b/e2e/todo/update.spec.ts index 15b27f7d..a24cc21a 100644 --- a/e2e/todo/update.spec.ts +++ b/e2e/todo/update.spec.ts @@ -1,12 +1,12 @@ import { faker } from '@faker-js/faker'; import { expect, test } from '@playwright/test'; -import type { Todo } from '../../src/features/todo/todoSlice'; -let list: Todo[] = Array.from({ length: 7 }, () => ({ - id: faker.datatype.uuid(), - task: faker.lorem.sentence(), - completed: false, -})); +import db from '../../db.json'; + +let list = faker.random.arrayElements( + db.todos.filter(({ completed }) => !completed), + 7, +); let todo = faker.random.arrayElement(list); test.describe('update a todo', () => {