vault/ui/tests/integration/components/secret-engine/configuration-details-test.js
Jordan Reimer 8700becc45
[UI] Ember Data Migration - API Property Casing (#31325)
* updates api client vars to snake_case for custom messages

* updates api client vars to snake_case for tools

* updates api client vars to snake_case for sync

* updates api client vars to snake_case for secrets engine

* updates api client vars to snake_case for auth

* updates api client vars to snake_case for usage

* updates api client dep to point to gh repo

* fixes custom-messages service unit tests

* fixes configure-ssh test

* fixes configure-ssh test...again
2025-07-18 09:32:01 -06:00

102 lines
3.5 KiB
JavaScript

/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
import { module, test } from 'qunit';
import { setupRenderingTest } from 'vault/tests/helpers';
import { GENERAL } from 'vault/tests/helpers/general-selectors';
import { render } from '@ember/test-helpers';
import { hbs } from 'ember-cli-htmlbars';
import {
expectedConfigKeys,
expectedValueOfConfigKeys,
} from 'vault/tests/helpers/secret-engine/secret-engine-helpers';
import { ALL_ENGINES } from 'vault/utils/all-engines-metadata';
import engineDisplayData from 'vault/helpers/engines-display-data';
module('Integration | Component | SecretEngine::ConfigurationDetails', function (hooks) {
setupRenderingTest(hooks);
hooks.beforeEach(function () {
this.configs = {
aws: {
region: 'us-west-2',
access_key: '123-key',
iam_endpoint: 'iam-endpoint',
sts_endpoint: 'sts-endpoint',
max_retries: 1,
},
azure: {
client_secret: 'client-secret',
subscription_id: 'subscription-id',
tenant_id: 'tenant-id',
client_id: 'client-id',
root_password_ttl: '1800000s',
environment: 'AZUREPUBLICCLOUD',
},
gcp: {
credentials: '{"some-key":"some-value"}',
ttl: '100s',
max_ttl: '101s',
},
ssh: {
public_key: 'public-key',
generate_signing_key: true,
},
};
});
test('it shows prompt message if no config models are passed in', async function (assert) {
assert.expect(2);
await render(hbs`
<SecretEngine::ConfigurationDetails @typeDisplay="Display Name" />
`);
assert.dom(GENERAL.emptyStateTitle).hasText(`Display Name not configured`);
assert
.dom(GENERAL.emptyStateMessage)
.hasText(`Get started by configuring your Display Name secrets engine.`);
});
for (const type of ALL_ENGINES.filter((engine) => engine.isConfigurable ?? false).map(
(engine) => engine.type
)) {
test(`${type}: it shows config details if configModel(s) are passed in`, async function (assert) {
this.config = this.configs[type];
this.typeDisplay = engineDisplayData(type).displayName;
await render(
hbs`<SecretEngine::ConfigurationDetails @config={{this.config}} @typeDisplay={{this.typeDisplay}}/>`
);
for (const key of expectedConfigKeys(type)) {
if (
key === 'Secret key' ||
key === 'Client secret' ||
key === 'Private key' ||
key === 'Credentials'
) {
// these keys are not returned by the API and should not show on the details page
assert
.dom(GENERAL.infoRowLabel(key))
.doesNotExist(`${key} on the ${type} config details does NOT exists.`);
} else {
// check the label appears
assert.dom(GENERAL.infoRowLabel(key)).exists(`${key} on the ${type} config details exists.`);
const responseKeyAndValue = expectedValueOfConfigKeys(type, key);
// check the value appears
assert
.dom(GENERAL.infoRowValue(key))
.hasText(responseKeyAndValue, `${key} value for the ${type} config details exists.`);
// make sure the values that should be masked are masked, and others are not.
if (key === 'Public Key') {
assert.dom(GENERAL.infoRowValue(key)).hasClass('masked-input', `${key} is masked`);
} else {
assert.dom(GENERAL.infoRowValue(key)).doesNotHaveClass('masked-input', `${key} is not masked`);
}
}
}
});
}
});