2023-03-14 13:18:55 +00:00
|
|
|
/**
|
|
|
|
* Copyright (c) HashiCorp, Inc.
|
|
|
|
* SPDX-License-Identifier: MPL-2.0
|
|
|
|
*/
|
|
|
|
|
2020-06-10 15:07:06 +00:00
|
|
|
const not = `(n't| not)?`;
|
2022-09-15 08:43:17 +00:00
|
|
|
export default function (scenario, assert, lastNthRequest) {
|
2019-02-21 13:05:05 +00:00
|
|
|
// lastNthRequest should return a
|
|
|
|
// {
|
|
|
|
// method: '',
|
|
|
|
// requestBody: '',
|
|
|
|
// requestHeaders: ''
|
|
|
|
// }
|
|
|
|
scenario
|
2022-09-15 08:43:17 +00:00
|
|
|
.then('the last $method requests included from yaml\n$yaml', function (method, data) {
|
2019-12-17 18:47:37 +00:00
|
|
|
const requests = lastNthRequest(null, method);
|
|
|
|
const a = new Set(data);
|
|
|
|
const b = new Set(
|
2022-09-15 08:43:17 +00:00
|
|
|
requests.map(function (item) {
|
2019-12-17 18:47:37 +00:00
|
|
|
return item.url;
|
|
|
|
})
|
|
|
|
);
|
|
|
|
const diff = new Set(
|
2022-09-15 08:43:17 +00:00
|
|
|
[...a].filter(function (item) {
|
2019-12-17 18:47:37 +00:00
|
|
|
return !b.has(item);
|
|
|
|
})
|
|
|
|
);
|
|
|
|
assert.equal(diff.size, 0, `Expected requests "${[...diff].join(', ')}"`);
|
|
|
|
})
|
2022-09-15 08:43:17 +00:00
|
|
|
.then(`a $method request was${not} made to "$endpoint"`, function (method, negative, url) {
|
2020-06-10 15:07:06 +00:00
|
|
|
const isNegative = typeof negative !== 'undefined';
|
2019-12-17 18:47:37 +00:00
|
|
|
const requests = lastNthRequest(null, method);
|
2022-09-15 08:43:17 +00:00
|
|
|
const request = requests.some(function (item) {
|
2019-12-17 18:47:37 +00:00
|
|
|
return method === item.method && url === item.url;
|
|
|
|
});
|
2020-06-10 15:07:06 +00:00
|
|
|
if (isNegative) {
|
|
|
|
assert.notOk(request, `Didn't expect a ${method} request url to ${url}`);
|
|
|
|
} else {
|
|
|
|
assert.ok(request, `Expected a ${method} request url to ${url}`);
|
|
|
|
}
|
2019-12-17 18:47:37 +00:00
|
|
|
})
|
2022-09-15 08:43:17 +00:00
|
|
|
.then('a $method request was made to "$endpoint" with no body', function (method, url) {
|
2020-01-24 12:26:28 +00:00
|
|
|
const requests = lastNthRequest(null, method);
|
2022-09-15 08:43:17 +00:00
|
|
|
const request = requests.find(function (item) {
|
2020-01-24 12:26:28 +00:00
|
|
|
return method === item.method && url === item.url;
|
|
|
|
});
|
|
|
|
assert.equal(
|
|
|
|
request.requestBody,
|
|
|
|
null,
|
|
|
|
`Expected the request body to be null, was ${request.requestBody}`
|
|
|
|
);
|
|
|
|
})
|
2022-09-15 08:43:17 +00:00
|
|
|
.then(
|
|
|
|
'a $method request was made to "$endpoint" with the body "$body"',
|
|
|
|
function (method, url, body) {
|
|
|
|
const requests = lastNthRequest(null, method);
|
|
|
|
const request = requests.find(function (item) {
|
|
|
|
return method === item.method && url === item.url;
|
|
|
|
});
|
|
|
|
assert.ok(request, `Expected a ${method} request url to ${url} with the body "${body}"`);
|
|
|
|
}
|
|
|
|
)
|
|
|
|
.then(
|
|
|
|
'a $method request was made to "$endpoint" from yaml\n$yaml',
|
|
|
|
function (method, url, yaml) {
|
|
|
|
const requests = lastNthRequest(null, method);
|
|
|
|
const request = requests.find(function (item) {
|
|
|
|
return method === item.method && url === item.url;
|
|
|
|
});
|
|
|
|
let data = yaml.body || {};
|
|
|
|
const body = JSON.parse(request.requestBody);
|
|
|
|
Object.keys(data).forEach(function (key, i, arr) {
|
|
|
|
assert.deepEqual(
|
|
|
|
body[key],
|
|
|
|
data[key],
|
|
|
|
`Expected the payload to contain ${key} equaling ${JSON.stringify(
|
|
|
|
data[key]
|
|
|
|
)}, ${key} was ${JSON.stringify(body[key])}`
|
|
|
|
);
|
|
|
|
});
|
|
|
|
data = yaml.headers || {};
|
|
|
|
const headers = request.requestHeaders;
|
|
|
|
Object.keys(data).forEach(function (key, i, arr) {
|
|
|
|
assert.deepEqual(
|
|
|
|
headers[key],
|
|
|
|
data[key],
|
|
|
|
`Expected the payload to contain ${key} equaling ${JSON.stringify(
|
|
|
|
data[key]
|
|
|
|
)}, ${key} was ${JSON.stringify(headers[key])}`
|
|
|
|
);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
)
|
|
|
|
.then(
|
|
|
|
'a $method request was made to "$endpoint" without properties from yaml\n$yaml',
|
|
|
|
function (method, url, properties) {
|
|
|
|
const requests = lastNthRequest(null, method);
|
|
|
|
const request = requests.find(function (item) {
|
|
|
|
return method === item.method && url === item.url;
|
|
|
|
});
|
|
|
|
const body = JSON.parse(request.requestBody);
|
|
|
|
properties.forEach(function (key, i, arr) {
|
|
|
|
assert.equal(
|
|
|
|
typeof body[key],
|
|
|
|
'undefined',
|
|
|
|
`Expected payload to not have a ${key} property`
|
|
|
|
);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
);
|
2019-02-21 13:05:05 +00:00
|
|
|
}
|