Jordan Reimer e18b0485f5
[UI] Ember Data Migration - Config UI Engine (#30238)
* WIP updating config-ui engine to use api service and form class

* updates form-field component to support false values for radio types

* updates api-error-message util to log out error in dev env

* fixes issues in custom messages create and edit workflows

* fixes issues in api service

* updates capabilities handling

* updates to custom messages form

* removes store from custom messages tests

* removes store as dependency from config-ui engine

* removes commented out code in messages route

* updates orderedKeys to displayFields in messages page component

* removes unneccesary method var from message create-and-edit component

* removes comment about model in message details page
2025-04-28 16:09:11 -06:00

93 lines
3.2 KiB
JavaScript

/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
import { module, test } from 'qunit';
import { setupRenderingTest } from 'vault/tests/helpers';
import { setupMirage } from 'ember-cli-mirage/test-support';
import { setupEngine } from 'ember-engines/test-support';
import { render } from '@ember/test-helpers';
import { hbs } from 'ember-cli-htmlbars';
import { dateFormat } from 'core/helpers/date-format';
const allFields = [
{ label: 'Active', key: 'active' },
{ label: 'Type', key: 'type' },
{ label: 'Authenticated', key: 'authenticated' },
{ label: 'Title', key: 'title' },
{ label: 'Message', key: 'message' },
{ label: 'Start time', key: 'startTime' },
{ label: 'End time', key: 'endTime' },
{ label: 'Link', key: 'link' },
];
module('Integration | Component | messages/page/details', function (hooks) {
setupRenderingTest(hooks);
setupEngine(hooks, 'config-ui');
setupMirage(hooks);
hooks.beforeEach(function () {
this.context = { owner: this.engine };
this.server.post('/sys/capabilities-self', () => ({
data: {
capabilities: ['root'],
},
}));
this.message = {
id: '01234567-89ab-cdef-0123-456789abcdef',
active: true,
type: 'banner',
authenticated: true,
title: 'Message title 1',
message: 'Some long long long message',
link: { here: 'www.example.com' },
startTime: new Date('2021-08-01T00:00:00Z'),
endTime: undefined,
canEditCustomMessages: true,
};
this.capabilities = { canDelete: true, canUpdate: true };
});
test('it should show the message details', async function (assert) {
await render(
hbs`<Messages::Page::Details @message={{this.message}} @capabilities={{this.capabilities}} />`,
this.context
);
assert.dom('[data-test-page-title]').hasText('Message title 1');
assert
.dom('[data-test-component="info-table-row"]')
.exists({ count: allFields.length }, 'Correct number of filtered fields render');
allFields.forEach((field) => {
assert
.dom(`[data-test-row-label="${field.label}"]`)
.hasText(field.label, `${field.label} label renders`);
if (field.key === 'startTime' || field.key === 'endTime') {
const formattedDate = dateFormat([this.message[field.key], 'MMM d, yyyy hh:mm aaa'], {
withTimeZone: true,
});
assert
.dom(`[data-test-row-value="${field.label}"]`)
.hasText(formattedDate || 'Never', `${field.label} value renders`);
} else if (field.key === 'authenticated' || field.key === 'active') {
assert
.dom(`[data-test-value-div="${field.label}"]`)
.hasText(this.message[field.key] ? 'Yes' : 'No', `${field.label} value renders`);
} else if (field.key === 'link') {
assert.dom('[data-test-value-div="Link"]').exists();
assert.dom('[data-test-value-div="Link"] [data-test-link="message link"]').hasText('here');
} else {
assert
.dom(`[data-test-row-value="${field.label}"]`)
.hasText(this.message[field.key], `${field.label} value renders`);
}
});
assert.dom('[data-test-confirm-action="Delete message"]').exists();
assert.dom('[data-test-link="edit"]').exists();
});
});