UNPKG

e2ed

Version:

E2E testing framework over Playwright

162 lines (138 loc) 4.96 kB
/* eslint-disable max-lines */ import {test} from 'autotests'; import {getPageCookies} from 'autotests/context'; import {addUser} from 'autotests/entities'; import {AddUser} from 'autotests/routes/apiRoutes'; import {expect} from 'e2ed'; import {waitForResponse, waitForResponseToRoute} from 'e2ed/actions'; import {assertFunctionThrows} from 'e2ed/utils'; import type {ApiAddUserRequest, ApiAddUserResponse, UserWorker} from 'autotests/types'; const worker: UserWorker = {firstName: 'John', lastName: 'Doe'}; test( 'waitForResponse/waitForResponseToRoute gets correct response body and rejects on timeout', {meta: {testId: '3'}, testIdleTimeout: 3_000}, // eslint-disable-next-line max-lines-per-function async () => { let response = await waitForResponse<ApiAddUserRequest, ApiAddUserResponse>( ({responseBody}) => { getPageCookies(); return responseBody.firstName === worker.firstName; }, async () => { getPageCookies(); await addUser({user: worker}); }, ); await expect(response.responseBody, 'response has correct body').contains(worker); await assertFunctionThrows(async () => { await waitForResponse(() => false, {timeout: 100}); }, 'waitForResponse throws an error on timeout'); response = await waitForResponse<ApiAddUserRequest, ApiAddUserResponse>( ({request}) => request.url === 'https://dummyjson.com/users/add', async () => { await addUser({user: worker}); }, ); await expect(response.responseBody, 'second response has correct body').contains(worker); await assertFunctionThrows(async () => { await waitForResponse( () => { throw new Error('foo'); }, () => { void addUser({user: worker}); }, ).catch((error: Error) => { if (error.cause instanceof Error && error.cause.message === 'foo') { throw error; } }); }, 'waitForResponse throws an error from predicate'); await assertFunctionThrows(async () => { await waitForResponse( () => true, async () => { await Promise.resolve(); throw new Error('foo'); }, ).catch((error: unknown) => { if (error instanceof Error && error.message === 'foo') { throw error; } }); }, 'waitForResponse throws an error from trigger'); let {response: routeResponse, routeParams} = await waitForResponseToRoute(AddUser, async () => { await addUser({delay: 1_000, user: worker}); }); await expect( routeResponse.request.requestBody, 'request from waitForResponseToRoute has correct body', ).eql(worker); await expect(routeParams, 'routeParams from waitForResponseToRoute is correct').eql({ delay: 1_000, }); ({response: routeResponse, routeParams} = await waitForResponseToRoute( AddUser, async () => { await addUser({delay: 1_000, user: worker}); }, { predicate: ({delay}, {request, responseBody}) => delay === 1_000 && request.requestBody.firstName === worker.firstName && responseBody.lastName === worker.lastName, }, )); await expect( routeParams, 'routeParams from waitForRequestToRoute with predicate is correct', ).eql({delay: 1_000}); await assertFunctionThrows(async () => { await waitForResponseToRoute( AddUser, async () => { await addUser({user: worker}); }, {predicate: ({delay}) => delay === 1_000, timeout: 2_000}, ); }, 'waitForResponseToRoute throws an error on timeout'); void addUser({user: worker}); await assertFunctionThrows(async () => { await waitForResponseToRoute(AddUser, { predicate: () => { throw new Error('foo'); }, }).catch((error: Error) => { if (error.cause instanceof Error && error.cause.message === 'foo') { throw error; } }); }, 'waitForResponseToRoute throws an error from predicate'); await assertFunctionThrows(async () => { await waitForResponseToRoute(AddUser, () => { throw new Error('foo'); }).catch((error: unknown) => { if (error instanceof Error && error.message === 'foo') { throw error; } }); }, 'waitForResponseToRoute throws an error from trigger'); await assertFunctionThrows(async () => { await waitForResponseToRoute( AddUser, async () => { await addUser({user: worker}); }, { predicate: () => { throw new Error('foo'); }, }, ).catch((error: Error) => { if (error.cause instanceof Error && error.cause.message === 'foo') { throw error; } }); }, 'waitForResponseToRoute throws an error from predicate with trigger'); }, );