import { faker } from '@faker-js/faker'; import { expect, test } from '@playwright/test'; test.describe('Counter', () => { test.describe('Basic database operations', () => { test('shouldn\'t increment the counter with an invalid input', async ({ page }) => { const counter = await page.request.put('/api/counter', { data: { increment: 'incorrect', }, }); expect(counter.status()).toBe(422); }); test('shouldn\'t increment the counter with a negative number', async ({ page }) => { const counter = await page.request.put('/api/counter', { data: { increment: -1, }, }); expect(counter.status()).toBe(422); }); test('shouldn\'t increment the counter with a number greater than 3', async ({ page }) => { const counter = await page.request.put('/api/counter', { data: { increment: 5, }, }); expect(counter.status()).toBe(422); }); test('should increment the counter and update the counter correctly', async ({ page }) => { // `x-e2e-random-id` is used for end-to-end testing to make isolated requests // The default value is 0 when there is no `x-e2e-random-id` header const e2eRandomId = faker.number.int({ max: 1000000 }); let counter = await page.request.put('/api/counter', { data: { increment: 1, }, headers: { 'x-e2e-random-id': e2eRandomId.toString(), }, }); let counterJson = await counter.json(); expect(counter.status()).toBe(200); // Save the current count const count = counterJson.count; counter = await page.request.put('/api/counter', { data: { increment: 2, }, headers: { 'x-e2e-random-id': e2eRandomId.toString(), }, }); counterJson = await counter.json(); expect(counter.status()).toBe(200); expect(counterJson.count).toEqual(count + 2); counter = await page.request.put('/api/counter', { data: { increment: 1, }, headers: { 'x-e2e-random-id': e2eRandomId.toString(), }, }); counterJson = await counter.json(); expect(counter.status()).toBe(200); expect(counterJson.count).toEqual(count + 3); }); }); });