d56f0ccb72
* wait for all hash promises to be settled * skeleton tests with policies for write without read * adjust what gets returned from the model hook * refactor secret-edit model hook to use async/await * return a stub version if we can't read secret data * return a stub model for v1 kv * tweak tests to make re-runs friendlier * allow write without CAS if both v2 models cannot be read * show warnings on edit pages for different write without read scenarios * add no read empty states on secret show pages * review feedback * make message language consistent * use version models from metadata if we can read it * refresh route on delete / undelete / destroy * hide controls in the toolbar when you can't read the secret data * show deleted / destroyed messaging over cannot read messaging on the show page * fix test with model stub * refactor large model hook into several functions * comment clarifications
88 lines
2.3 KiB
JavaScript
88 lines
2.3 KiB
JavaScript
import { module, test } from 'qunit';
|
|
import { setupTest } from 'ember-qunit';
|
|
import apiStub from 'vault/tests/helpers/noop-all-api-requests';
|
|
|
|
module('Unit | Adapter | secret-v2-version', function(hooks) {
|
|
setupTest(hooks);
|
|
|
|
hooks.beforeEach(function() {
|
|
this.server = apiStub();
|
|
});
|
|
|
|
hooks.afterEach(function() {
|
|
this.server.shutdown();
|
|
});
|
|
|
|
let fakeStore = {
|
|
peekRecord() {
|
|
return {
|
|
rollbackAttributes() {},
|
|
reload() {},
|
|
};
|
|
},
|
|
};
|
|
[
|
|
[
|
|
'findRecord with version',
|
|
'findRecord',
|
|
[null, {}, JSON.stringify(['secret', 'foo', '2']), {}],
|
|
'GET',
|
|
'/v1/secret/data/foo?version=2',
|
|
],
|
|
[
|
|
'v2DeleteOperation with delete',
|
|
'v2DeleteOperation',
|
|
[fakeStore, JSON.stringify(['secret', 'foo', '2']), 'delete'],
|
|
'POST',
|
|
'/v1/secret/delete/foo',
|
|
{ versions: ['2'] },
|
|
],
|
|
[
|
|
'v2DeleteOperation with destroy',
|
|
'v2DeleteOperation',
|
|
[fakeStore, JSON.stringify(['secret', 'foo', '2']), 'destroy'],
|
|
'POST',
|
|
'/v1/secret/destroy/foo',
|
|
{ versions: ['2'] },
|
|
],
|
|
[
|
|
'v2DeleteOperation with destroy',
|
|
'v2DeleteOperation',
|
|
[fakeStore, JSON.stringify(['secret', 'foo', '2']), 'undelete'],
|
|
'POST',
|
|
'/v1/secret/undelete/foo',
|
|
{ versions: ['2'] },
|
|
],
|
|
[
|
|
'updateRecord makes calls to correct url',
|
|
'updateRecord',
|
|
[
|
|
{
|
|
serializerFor() {
|
|
return { serializeIntoHash() {} };
|
|
},
|
|
},
|
|
{},
|
|
{ id: JSON.stringify(['secret', 'foo', '2']) },
|
|
],
|
|
'PUT',
|
|
'/v1/secret/data/foo',
|
|
],
|
|
].forEach(([testName, adapterMethod, args, expectedHttpVerb, expectedURL, exptectedRequestBody]) => {
|
|
test(`${testName}`, function(assert) {
|
|
let adapter = this.owner.lookup('adapter:secret-v2-version');
|
|
adapter[adapterMethod](...args);
|
|
let { url, method, requestBody } = this.server.handledRequests[0];
|
|
assert.equal(url, expectedURL, `${adapterMethod} calls the correct url: ${expectedURL}`);
|
|
assert.equal(
|
|
method,
|
|
expectedHttpVerb,
|
|
`${adapterMethod} uses the correct http verb: ${expectedHttpVerb}`
|
|
);
|
|
if (exptectedRequestBody) {
|
|
assert.deepEqual(JSON.parse(requestBody), exptectedRequestBody);
|
|
}
|
|
});
|
|
});
|
|
});
|