e2ed
Version:
E2E testing framework over Playwright
75 lines (61 loc) • 2.32 kB
text/typescript
import {test} from 'autotests';
import {addProduct} from 'autotests/entities';
import {CreateProduct as CreateProductRoute} from 'autotests/routes/apiRoutes';
import {expect} from 'e2ed';
import {mockApiRoute, unmockApiRoute} from 'e2ed/actions';
import type {DeviceId, Product, ProductId} from 'autotests/types';
import type {Url} from 'e2ed/types';
test(
'mockApiRoute correctly intercepts requests, and unmockApiRoute cancels the interception',
{meta: {testId: '6'}, testIdleTimeout: 4_000},
async () => {
await mockApiRoute(CreateProductRoute, (routeParams, {method, query, requestBody, url}) => {
const responseBody = {
id: routeParams.id,
method,
output: String(requestBody.input),
payload: {id: String(routeParams.id) as DeviceId, ...requestBody},
query,
url,
};
return {responseBody};
});
const productId = 135865;
const product: Product = {
id: productId as ProductId,
input: 17,
model: 'samsung',
size: '13',
version: '12',
};
const mockedProduct = await addProduct(product);
const fetchUrl =
`https://dummyjson.com/products/add?id=${productId}&size=${product.size}` as Url;
const productRouteParams = CreateProductRoute.getParamsFromUrlOrThrow(fetchUrl);
const productRouteFromUrl = new CreateProductRoute(productRouteParams);
await expect(productRouteFromUrl.routeParams.id, 'route has correct params').eql(
productId as ProductId,
);
await expect(mockedProduct, 'mocked API returns correct result').eql({
id: productRouteFromUrl.routeParams.id,
method: productRouteFromUrl.getMethod(),
output: String(product.input),
payload: {
cookies: [],
id: String(productRouteFromUrl.routeParams.id) as DeviceId,
input: product.input,
model: product.model,
title: product.model,
version: product.version,
},
query: {id: String(productId), size: product.size},
url: fetchUrl,
});
await unmockApiRoute(CreateProductRoute);
const newMockedProduct = await addProduct(product);
await expect(
'title' in newMockedProduct && newMockedProduct.title === product.model,
'API mock on CreateProductRoute was umocked',
).ok();
},
);