playwright-fluent
Version:
Fluent API around playwright
87 lines (86 loc) • 3.02 kB
JavaScript
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;
;