mirror of
https://github.com/hashicorp/vault.git
synced 2025-08-20 22:21:09 +02:00
* move date-from-now helper to addon * make overview cards consistent across engines * make kv-paths-card component * remove overview margin all together * small styling changes for paths card * small selector additions * add overview card test * add overview page and test * add default timestamp format * cleanup paths test * fix dateFromNow import * fix selectors, cleanup pki selectors * and more selector cleanup * make deactivated state single arg * fix template and remove @isDeleted and @isDestroyed * add test and hide badge unless deactivated * address failings from changing selectors * oops, not ready to show overview tab just yet! * add deletionTime to currentSecret metadata getter
99 lines
3.5 KiB
JavaScript
99 lines
3.5 KiB
JavaScript
/**
|
|
* Copyright (c) HashiCorp, Inc.
|
|
* SPDX-License-Identifier: BUSL-1.1
|
|
*/
|
|
|
|
/* eslint-disable ember/no-settled-after-test-helper */
|
|
import { click, fillIn, visit, settled } from '@ember/test-helpers';
|
|
import { FORM } from './kv-selectors';
|
|
import { encodePath } from 'vault/utils/path-encoding-helpers';
|
|
import { allowAllCapabilitiesStub } from 'vault/tests/helpers/stubs';
|
|
import { assert } from '@ember/debug';
|
|
import { kvMetadataPath } from 'vault/utils/kv-path';
|
|
|
|
// CUSTOM ACTIONS RELEVANT TO KV-V2
|
|
|
|
export const writeSecret = async function (backend, path, key, val, ns = null) {
|
|
const url = `vault/secrets/${backend}/kv/create`;
|
|
ns ? await visit(url + `?namespace=${ns}`) : await visit(url);
|
|
await settled();
|
|
await fillIn(FORM.inputByAttr('path'), path);
|
|
await fillIn(FORM.keyInput(), key);
|
|
await fillIn(FORM.maskedValueInput(), val);
|
|
await click(FORM.saveBtn);
|
|
await settled();
|
|
return;
|
|
};
|
|
|
|
export const writeVersionedSecret = async function (backend, path, key, val, version = 2, ns = null) {
|
|
await writeSecret(backend, path, 'key-1', 'val-1', ns);
|
|
await settled();
|
|
for (let currentVersion = 2; currentVersion <= version; currentVersion++) {
|
|
const url = `/vault/secrets/${backend}/kv/${encodeURIComponent(path)}/details/edit`;
|
|
ns ? await visit(url + `?namespace=${ns}`) : await visit(url);
|
|
await settled();
|
|
if (currentVersion === version) {
|
|
await fillIn(FORM.keyInput(), key);
|
|
await fillIn(FORM.maskedValueInput(), val);
|
|
} else {
|
|
await fillIn(FORM.keyInput(), `key-${currentVersion}`);
|
|
await fillIn(FORM.maskedValueInput(), `val-${currentVersion}`);
|
|
}
|
|
await click(FORM.saveBtn);
|
|
await settled();
|
|
}
|
|
return;
|
|
};
|
|
|
|
export const deleteVersionCmd = function (backend, secretPath, version = 1) {
|
|
return `write ${backend}/delete/${encodePath(secretPath)} versions=${version}`;
|
|
};
|
|
export const destroyVersionCmd = function (backend, secretPath, version = 1) {
|
|
return `write ${backend}/destroy/${encodePath(secretPath)} versions=${version}`;
|
|
};
|
|
export const deleteLatestCmd = function (backend, secretPath) {
|
|
return `delete ${backend}/data/${encodePath(secretPath)}`;
|
|
};
|
|
|
|
export const addSecretMetadataCmd = (backend, secret, options = { max_versions: 10 }) => {
|
|
const stringOptions = Object.keys(options).reduce((prev, curr) => {
|
|
return `${prev} ${curr}=${options[curr]}`;
|
|
}, '');
|
|
return `write ${backend}/metadata/${secret} ${stringOptions}`;
|
|
};
|
|
|
|
// Clears kv-related data and capabilities so that admin
|
|
// capabilities from setup don't rollover
|
|
export function clearRecords(store) {
|
|
store.unloadAll('kv/data');
|
|
store.unloadAll('kv/metatata');
|
|
store.unloadAll('capabilities');
|
|
}
|
|
|
|
// TEST SETUP HELPERS
|
|
|
|
// sets basic path, backend, and metadata
|
|
export const baseSetup = (context) => {
|
|
assert(
|
|
`'baseSetup()' requires mirage: import { setupMirage } from 'ember-cli-mirage/test-support'`,
|
|
context.server
|
|
);
|
|
context.store = context.owner.lookup('service:store');
|
|
context.server.post('/sys/capabilities-self', allowAllCapabilitiesStub());
|
|
context.backend = 'kv-engine';
|
|
context.path = 'my-secret';
|
|
context.metadata = metadataModel(context, { withCustom: false });
|
|
};
|
|
|
|
export const metadataModel = (context, { withCustom = false }) => {
|
|
const metadata = withCustom
|
|
? context.server.create('kv-metadatum', 'withCustomMetadata')
|
|
: context.server.create('kv-metadatum');
|
|
metadata.id = kvMetadataPath(context.backend, context.path);
|
|
context.store.pushPayload('kv/metadata', {
|
|
modelName: 'kv/metadata',
|
|
...metadata,
|
|
});
|
|
return context.store.peekRecord('kv/metadata', metadata.id);
|
|
};
|