/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
import { module, test } from 'qunit';
import sinon from 'sinon';
import { setupRenderingTest } from 'vault/tests/helpers';
import { click, render, settled, typeIn } from '@ember/test-helpers';
import { hbs } from 'ember-cli-htmlbars';
import { SHAMIR_FORM } from 'vault/tests/helpers/components/shamir';
module('Integration | Component | shamir/form', function (hooks) {
setupRenderingTest(hooks);
hooks.beforeEach(function () {
this.submitSpy = sinon.spy();
});
test('it does calls callback only if key value present', async function (assert) {
await render(hbs`
`);
assert.dom(SHAMIR_FORM.submitButton).hasText('Submit', 'Submit button has default text');
await click(SHAMIR_FORM.submitButton);
assert.dom(SHAMIR_FORM.progress).doesNotExist('Hides progress bar if none made');
assert.ok(this.submitSpy.notCalled, 'onSubmit was not called');
await typeIn(SHAMIR_FORM.input, 'this-is-the-key');
assert.dom(SHAMIR_FORM.input).hasValue('this-is-the-key', 'input value set');
assert.dom(SHAMIR_FORM.inputLabel).hasText('Shamir key portion', 'label has default text');
await click(SHAMIR_FORM.submitButton);
assert.ok(
this.submitSpy.calledOnceWith({ key: 'this-is-the-key' }),
'onSubmit called with correct params'
);
assert.dom(SHAMIR_FORM.input).hasValue('', 'key value reset after submit');
await render(hbs`
Hello
`);
assert.dom('[data-test-block-content]').hasText('Hello', 'renders block content');
assert.dom(SHAMIR_FORM.submitButton).hasText('Do the thing', 'uses passed button text');
assert.dom(SHAMIR_FORM.inputLabel).hasText('Unseal key', 'uses passed inputLabel');
assert.dom(SHAMIR_FORM.otpInfo).doesNotExist('no OTP info shown');
assert
.dom(SHAMIR_FORM.progress)
.hasText('0/3 keys provided', 'displays textual progress when alwaysShowProgress=true');
});
test('it shows OTP info if provided', async function (assert) {
await render(hbs`
Hello
`);
assert.dom(SHAMIR_FORM.otpInfo).exists('shows OTP info');
assert.dom(SHAMIR_FORM.otpCode).hasText('this-is-otp', 'shows OTP code');
assert.dom(SHAMIR_FORM.progress).hasText('2/4 keys provided', 'displays textual progress');
assert.dom('[data-test-block-content]').hasText('Hello', 'renders block content');
});
test('renders errors provided', async function (assert) {
this.set('errors', ['first error', 'this is fine']);
await render(hbs`
`);
assert.dom(SHAMIR_FORM.error).exists({ count: 2 }, 'renders errors');
this.set('errors', []);
await settled();
assert.dom(SHAMIR_FORM.error).doesNotExist('errors cleared');
});
});