open-vault/ui/tests/unit/adapters/secret-v2-version-test.js
Matthew Irish d56f0ccb72
UI - write without read for kv (#6570)
* 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
2019-04-16 15:27:23 -05:00

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);
}
});
});
});