UNPKG

playwright-fluent

Version:
87 lines (86 loc) 3.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getMissingMocks = void 0; const with_mocks_1 = require("./with-mocks"); const validate_mock_1 = require("./validate-mock"); const utils_1 = require("../../../utils"); async function getMissingMocks(mocks, requests, sharedContext = {}) { const result = []; if (requests.length === 0) { throw new Error('No requests provided. Maybe you forgot to record requests.'); } mocks.forEach(validate_mock_1.validateMock); for (let index = 0; index < requests.length; index++) { const request = requests[index]; const method = request.method(); const url = request.url(); const queryString = (0, utils_1.extractQueryStringObjectFromUrl)(url); const postData = (0, with_mocks_1.getPostDataOf)(request); const requestResponse = await request.response(); const requestInfos = { request, queryString, postData, sharedContext }; if (!requestResponse) { continue; } const requestStatus = requestResponse.status(); if (requestStatus >= 300) { continue; } const mock = mocks .map(with_mocks_1.inferMockResponseTypeIfNeeded) .map(with_mocks_1.spreadMissingProperties) .filter((mock) => mock.urlMatcher(url)) .filter((mock) => mock.methodMatcher(method)) .filter((mock) => mock.queryStringMatcher(queryString)) .filter((mock) => mock.postDataMatcher(postData)) .filter((mock) => mock.contextMatcher(sharedContext)) .filter((mock) => mock.customMatcher(requestInfos)) .pop(); if (mock) { // TODO : get the response from the mock because it might change the shared context continue; } const mimeType = requestResponse.headers()['content-type']; const status = requestResponse.status(); try { const response = await requestResponse.json(); result.push({ url, method, mimeType, postData, queryString, status, response, }); continue; // eslint-disable-next-line no-empty } catch (error) { } try { const response = await requestResponse.text(); result.push({ url, method, mimeType, postData, queryString, status, response, }); continue; // eslint-disable-next-line no-empty } catch (error) { } result.push({ url, method, mimeType, postData, queryString, status, response: null, }); } return result; } exports.getMissingMocks = getMissingMocks;