/** * Copyright (c) HashiCorp, Inc. * SPDX-License-Identifier: MPL-2.0 */ import { module, test } from 'qunit'; import Sinon from 'sinon'; import { setupRenderingTest } from 'ember-qunit'; import { render, click, fillIn } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; import waitForError from 'vault/tests/helpers/wait-for-error'; module('Integration | Component | wrap ttl', function (hooks) { setupRenderingTest(hooks); test('it requires `onChange`', async function (assert) { const promise = waitForError(); render(hbs``); const err = await promise; assert.ok(err.message.includes('`onChange` handler is a required attr in'), 'asserts without onChange'); }); test('it renders', async function (assert) { const changeSpy = Sinon.spy(); this.set('onChange', changeSpy); await render(hbs``); assert.ok(changeSpy.calledWithExactly('30m'), 'calls onChange with 30m default on render'); assert.dom('[data-test-ttl-form-label]').hasText('Wrap response'); }); test('it nulls out value when you uncheck wrapResponse', async function (assert) { const changeSpy = Sinon.spy(); this.set('onChange', changeSpy); await render(hbs``); await click('[data-test-ttl-form-label]'); assert.ok(changeSpy.calledWithExactly(null), 'calls onChange with null'); }); test('it sends value changes to onChange handler', async function (assert) { const changeSpy = Sinon.spy(); this.set('onChange', changeSpy); await render(hbs``); // for testing purposes we need to input unit first because it keeps seconds value await fillIn('[data-test-select="ttl-unit"]', 'h'); assert.ok(changeSpy.calledWithExactly('30h'), 'calls onChange correctly on time input'); await fillIn('[data-test-ttl-value]', '20'); assert.ok(changeSpy.calledWithExactly('20h'), 'calls onChange correctly on unit change'); }); });