vault/ui/tests/helpers/stubs.js
Chelsea Shaw 5a0f0c955f
UI: Remove Pretender (#26943)
* Replace pretender with Mirage

* Remove dependency
2024-05-10 17:22:26 +00:00

83 lines
2.3 KiB
JavaScript

/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
import { Response } from 'miragejs';
export function capabilitiesStub(requestPath, capabilitiesArray) {
// sample of capabilitiesArray: ['read', 'update']
return {
request_id: '40f7e44d-af5c-9b60-bd20-df72eb17e294',
lease_id: '',
renewable: false,
lease_duration: 0,
data: {
[requestPath]: capabilitiesArray,
capabilities: capabilitiesArray,
},
wrap_info: null,
warnings: null,
auth: null,
};
}
export const noopStub = (response) => {
return function () {
return [response, { 'Content-Type': 'application/json' }, JSON.stringify({})];
};
};
/**
* allowAllCapabilitiesStub mocks the response from capabilities-self
* that allows the user to do any action (root user)
* Example usage assuming setupMirage(hooks) was called:
* this.server.post('/sys/capabilities-self', allowAllCapabilitiesStub(['read']));
*/
export function allowAllCapabilitiesStub(capabilitiesList = ['root']) {
return function (_, { requestBody }) {
const { paths } = JSON.parse(requestBody);
const specificCapabilities = paths.reduce((obj, path) => {
return {
...obj,
[path]: capabilitiesList,
};
}, {});
return {
...specificCapabilities,
capabilities: capabilitiesList,
request_id: 'mirage-795dc9e1-0321-9ac6-71fc',
lease_id: '',
renewable: false,
lease_duration: 0,
data: { ...specificCapabilities, capabilities: capabilitiesList },
wrap_info: null,
warnings: null,
auth: null,
};
};
}
/**
* returns a response with the given httpStatus and data based on status
* @param {number} httpStatus 403, 404, 204, or 200 (default)
* @param {object} payload what to return in the response if status is 200
* @returns {Response}
*/
export function overrideResponse(httpStatus = 200, payload = {}) {
if (httpStatus === 403) {
return new Response(
403,
{ 'Content-Type': 'application/json' },
JSON.stringify({ errors: ['permission denied'] })
);
}
if (httpStatus === 404) {
return new Response(404, { 'Content-Type': 'application/json' });
}
if (httpStatus === 204) {
return new Response(204, { 'Content-Type': 'application/json' });
}
return new Response(httpStatus, { 'Content-Type': 'application/json' }, payload);
}