/** * Copyright (c) HashiCorp, Inc. * SPDX-License-Identifier: BUSL-1.1 */ import { module, test } from 'qunit'; import { setupRenderingTest } from 'vault/tests/helpers'; import { click, fillIn, render } from '@ember/test-helpers'; import { hbs } from 'ember-cli-htmlbars'; import Sinon from 'sinon'; import { setupEngine } from 'ember-engines/test-support'; import { setupMirage } from 'ember-cli-mirage/test-support'; const selectors = { form: '[data-test-sign-intermediate-form]', csrInput: '[data-test-input="csr"]', toggleGroup: (group) => `[data-test-toggle-group="${group}"]`, fieldByName: (name) => `[data-test-field="${name}"]`, saveButton: '[data-test-pki-sign-intermediate-save]', cancelButton: '[data-test-pki-sign-intermediate-cancel]', fieldError: '[data-test-inline-alert]', formError: '[data-test-form-error]', resultsContainer: '[data-test-sign-intermediate-result]', rowByName: (name) => `[data-test-row-label="${name}"]`, valueByName: (name) => `[data-test-value-div="${name}"]`, }; module('Integration | Component | pki-sign-intermediate-form', function (hooks) { setupRenderingTest(hooks); setupEngine(hooks, 'pki'); setupMirage(hooks); hooks.beforeEach(async function () { this.store = this.owner.lookup('service:store'); this.secretMountPath = this.owner.lookup('service:secret-mount-path'); this.secretMountPath.currentPath = 'pki-test'; this.model = this.store.createRecord('pki/sign-intermediate', { issuerRef: 'some-issuer' }); this.onCancel = Sinon.spy(); }); test('renders correctly on load', async function (assert) { assert.expect(10); await render(hbs``, { owner: this.engine, }); assert.dom(selectors.form).exists('Form is rendered'); assert.dom(selectors.resultsContainer).doesNotExist('Results display not rendered'); assert.dom('[data-test-field]').exists({ count: 9 }, '9 default fields shown'); [ 'Name constraints', 'Signing options', 'Subject Alternative Name (SAN) Options', 'Additional subject fields', ].forEach((group) => { assert.dom(selectors.toggleGroup(group)).exists(`${group} renders`); }); await click(selectors.toggleGroup('Signing options')); ['usePss', 'skid', 'signatureBits'].forEach((name) => { assert.dom(selectors.fieldByName(name)).exists(); }); }); test('it shows the returned values on successful save', async function (assert) { assert.expect(13); await render(hbs``, { owner: this.engine, }); this.server.post(`/pki-test/issuer/some-issuer/sign-intermediate`, function (schema, req) { const payload = JSON.parse(req.requestBody); assert.strictEqual(payload.csr, 'example-data', 'Request made to correct endpoint on save'); return { request_id: 'some-id', data: { serial_number: '31:52:b9:09:40', ca_chain: ['-----BEGIN CERTIFICATE-----'], issuing_ca: '-----BEGIN CERTIFICATE-----', certificate: '-----BEGIN CERTIFICATE-----', }, }; }); await click(selectors.saveButton); assert.dom(selectors.formError).hasText('There is an error with this form.', 'Shows validation errors'); assert.dom(selectors.csrInput).hasClass('has-error-border'); assert.dom(selectors.fieldError).hasText('CSR is required.'); await fillIn(selectors.csrInput, 'example-data'); await click(selectors.saveButton); [ { label: 'Serial number' }, { label: 'CA Chain', isCertificate: true }, { label: 'Certificate', isCertificate: true }, { label: 'Issuing CA', isCertificate: true }, ].forEach(({ label, isCertificate }) => { assert.dom(selectors.rowByName(label)).exists(); if (isCertificate) { assert.dom(selectors.valueByName(label)).includesText('PEM Format', `${label} is isCertificate`); } else { assert.dom(selectors.valueByName(label)).hasText('31:52:b9:09:40', `Renders ${label}`); assert.dom(`${selectors.valueByName(label)} a`).exists(`${label} is a link`); } }); }); });