From 770a3e0c8e76bf5ecd93f35edf233e0b527baa74 Mon Sep 17 00:00:00 2001 From: Kianna <30884335+kiannaquach@users.noreply.github.com> Date: Mon, 26 Feb 2024 13:16:21 -0800 Subject: [PATCH] UI: Update custom messages to be enterprise only feature (#25633) * Update custom messages to be enterprise only feature * Fix tests! * Update changelog to be enterprise * Update tests to use mirage --- changelog/23945.txt | 3 - changelog/_23945.txt | 3 + ui/app/components/sidebar/nav/cluster.hbs | 2 +- ui/app/controllers/vault/cluster/auth.js | 4 +- ui/app/routes/vault/cluster/logout.js | 5 +- ui/app/templates/vault/cluster.hbs | 114 +++++++++--------- .../config-ui/messages/messages-test.js | 104 ++++++++++++++-- .../messages/messages-unauth-auth-test.js | 2 + .../helpers/config-ui/message-selectors.js | 1 + 9 files changed, 168 insertions(+), 70 deletions(-) delete mode 100644 changelog/23945.txt create mode 100644 changelog/_23945.txt diff --git a/changelog/23945.txt b/changelog/23945.txt deleted file mode 100644 index 6ebb782d66..0000000000 --- a/changelog/23945.txt +++ /dev/null @@ -1,3 +0,0 @@ -```release-note:feature -**Custom messages**: Introduces custom messages settings, allowing users to view, and operators to configure system-wide messages. -``` diff --git a/changelog/_23945.txt b/changelog/_23945.txt new file mode 100644 index 0000000000..030b677aec --- /dev/null +++ b/changelog/_23945.txt @@ -0,0 +1,3 @@ +```release-note:feature +**Custom messages (enterprise)**: Introduces custom messages settings, allowing users to view, and operators to configure system-wide messages. +``` diff --git a/ui/app/components/sidebar/nav/cluster.hbs b/ui/app/components/sidebar/nav/cluster.hbs index bdf32e2c93..1868e9b0b7 100644 --- a/ui/app/components/sidebar/nav/cluster.hbs +++ b/ui/app/components/sidebar/nav/cluster.hbs @@ -106,7 +106,7 @@ /> {{/if}} - {{#if (has-permission "settings")}} + {{#if (and this.version.isEnterprise (has-permission "settings"))}} Settings { - this.customMessages.fetchMessages(namespace); + if (this.version.isEnterprise) { + this.customMessages.fetchMessages(namespace); + } if (isRoot) { this.auth.set('isRootToken', true); diff --git a/ui/app/routes/vault/cluster/logout.js b/ui/app/routes/vault/cluster/logout.js index 5bcc2b8e35..03d386c361 100644 --- a/ui/app/routes/vault/cluster/logout.js +++ b/ui/app/routes/vault/cluster/logout.js @@ -35,7 +35,10 @@ export default Route.extend(ModelBoundaryRoute, { this.flashMessages.clearMessages(); this.permissions.reset(); this.version.version = null; - this.customMessages.clearCustomMessages(); + + if (this.version.isEnterprise) { + this.customMessages.clearCustomMessages(); + } queryParams.with = authType; if (ns) { diff --git a/ui/app/templates/vault/cluster.hbs b/ui/app/templates/vault/cluster.hbs index a2391b0ad9..37720a9d5e 100644 --- a/ui/app/templates/vault/cluster.hbs +++ b/ui/app/templates/vault/cluster.hbs @@ -3,64 +3,66 @@ SPDX-License-Identifier: BUSL-1.1 ~}} -{{#each this.customMessages.bannerMessages as |bannerMessage|}} - {{#if (get this.customMessages.bannerState bannerMessage.id)}} - - {{bannerMessage.title}} - {{#each (new-line-split bannerMessage.message) as |msg|}} - - {{msg}} - - {{/each}} - {{#unless (is-empty-value bannerMessage.link)}} - {{#each-in bannerMessage.link as |title href|}} - - {{/each-in}} - {{/unless}} - - {{/if}} -{{/each}} -{{#each this.customMessages.modalMessages as |modalMessage|}} - - - {{modalMessage.title}} - - - {{#each (new-line-split modalMessage.message) as |msg|}} - {{#if (eq msg "")}} -
- {{else}} -
+{{#if this.vaultVersion.isEnterprise}} + {{#each this.customMessages.bannerMessages as |bannerMessage|}} + {{#if (get this.customMessages.bannerState bannerMessage.id)}} + + {{bannerMessage.title}} + {{#each (new-line-split bannerMessage.message) as |msg|}} + {{msg}} -
- {{/if}} - {{/each}} - {{#unless (is-empty-value modalMessage.link)}} - {{#each-in modalMessage.link as |title href|}} - {{title}} - {{/each-in}} - {{/unless}} -
+ + {{/each}} + {{#unless (is-empty-value bannerMessage.link)}} + {{#each-in bannerMessage.link as |title href|}} + + {{/each-in}} + {{/unless}} + + {{/if}} + {{/each}} + {{#each this.customMessages.modalMessages as |modalMessage|}} + + + {{modalMessage.title}} + + + {{#each (new-line-split modalMessage.message) as |msg|}} + {{#if (eq msg "")}} +
+ {{else}} +
+ {{msg}} +
+ {{/if}} + {{/each}} + {{#unless (is-empty-value modalMessage.link)}} + {{#each-in modalMessage.link as |title href|}} + {{title}} + {{/each-in}} + {{/unless}} +
- - - -
-{{/each}} + + + +
+ {{/each}} +{{/if}}
{{#if this.activeCluster.version.isEnterprise}} { + await click(PAGE.navLink); + + if (authenticated) { + await click(PAGE.tab('After user logs in')); + await click(PAGE.button('create message')); + } else { + await click(PAGE.tab('On login page')); + await click(PAGE.button('create message')); + } + await visit(`vault/config-ui/messages?authenticated=${authenticated}`); await click(PAGE.button('create message')); await fillIn(PAGE.input('title'), 'Awesome custom message title'); @@ -44,15 +100,42 @@ module('Acceptance | config-ui', function (hooks) { await click(PAGE.button('create-message')); }; + this.server.get('sys/internal/ui/version', function () { + return { + data: { + version: '1.16.0+ent', + }, + }; + }); + this.server.get('/sys/health', function () { + return { + enterprise: true, + initialized: true, + sealed: false, + standby: false, + license: { + expiry: '2024-01-12T23:20:50.52Z', + state: 'stored', + }, + performance_standby: false, + replication_performance_mode: 'disabled', + replication_dr_mode: 'disabled', + server_time_utc: 1622562585, + version: '1.16.0+ent', + cluster_name: 'vault-cluster-e779cd7c', + cluster_id: '5f20f5ab-acea-0481-787e-71ec2ff5a60b', + last_wal: 121, + }; + }); await authPage.login(); }); + hooks.afterEach(async function () { await logout.visit(); }); - test('it should show an empty state when no messages are created', async function (assert) { assert.expect(4); - await visit('vault/config-ui/messages'); + await click(PAGE.navLink); assert.dom('[data-test-component="empty-state"]').exists(); assert.dom(PAGE.emptyStateTitle).hasText('No messages yet'); await click(PAGE.tab('On login page')); @@ -134,7 +217,8 @@ module('Acceptance | config-ui', function (hooks) { }); test('it should display preview a message when all required fields are filled out', async function (assert) { assert.expect(2); - await visit(`vault/config-ui/messages`); + await click(PAGE.navLink); + await click(PAGE.tab('After user logs in')); await click(PAGE.button('create message')); await fillIn(PAGE.input('title'), 'Awesome custom message title'); await click(PAGE.radio('banner')); @@ -153,7 +237,8 @@ module('Acceptance | config-ui', function (hooks) { }); test('it should not display preview a message when all required fields are not filled out', async function (assert) { assert.expect(2); - await visit(`vault/config-ui/messages`); + await click(PAGE.navLink); + await click(PAGE.tab('After user logs in')); await click(PAGE.button('create message')); await click(PAGE.radio('banner')); await fillIn( @@ -203,7 +288,8 @@ module('Acceptance | config-ui', function (hooks) { }); test('it should show info message on create and edit form', async function (assert) { assert.expect(1); - await visit('vault/config-ui/messages?authenticated=false'); + await click(PAGE.navLink); + await click(PAGE.tab('On login page')); await click(PAGE.button('create message')); assert .dom(PAGE.unauthCreateFormInfo) @@ -213,7 +299,8 @@ module('Acceptance | config-ui', function (hooks) { }); test('it should display preview a message when all required fields are filled out', async function (assert) { assert.expect(2); - await visit('vault/config-ui/messages?authenticated=false'); + await click(PAGE.navLink); + await click(PAGE.tab('On login page')); await click(PAGE.button('create message')); await fillIn(PAGE.input('title'), 'Awesome custom message title'); await click(PAGE.radio('banner')); @@ -232,7 +319,8 @@ module('Acceptance | config-ui', function (hooks) { }); test('it should not display preview a message when all required fields are not filled out', async function (assert) { assert.expect(2); - await visit('vault/config-ui/messages?authenticated=false'); + await click(PAGE.navLink); + await click(PAGE.tab('On login page')); await click(PAGE.button('create message')); await click(PAGE.radio('banner')); await fillIn( diff --git a/ui/tests/acceptance/config-ui/messages/messages-unauth-auth-test.js b/ui/tests/acceptance/config-ui/messages/messages-unauth-auth-test.js index e3d16330ad..9a962b8e85 100644 --- a/ui/tests/acceptance/config-ui/messages/messages-unauth-auth-test.js +++ b/ui/tests/acceptance/config-ui/messages/messages-unauth-auth-test.js @@ -8,6 +8,7 @@ import { setupApplicationTest } from 'ember-qunit'; import { click, visit, fillIn, currentRouteName } from '@ember/test-helpers'; import { PAGE } from 'vault/tests/helpers/config-ui/message-selectors'; import { setupMirage } from 'ember-cli-mirage/test-support'; + import authPage from 'vault/tests/pages/auth'; import { datetimeLocalStringFormat } from 'core/utils/date-formatters'; import { format, addDays, startOfDay } from 'date-fns'; @@ -50,6 +51,7 @@ const unauthenticatedMessageResponse = { mount_type: '', }; +// custom messages is an enterprise feature, but since we're using mirage enterprise is omitted from the module name. module('Acceptance | auth custom messages auth tests', function (hooks) { setupApplicationTest(hooks); setupMirage(hooks); diff --git a/ui/tests/helpers/config-ui/message-selectors.js b/ui/tests/helpers/config-ui/message-selectors.js index 4f681678c6..f33b433d3b 100644 --- a/ui/tests/helpers/config-ui/message-selectors.js +++ b/ui/tests/helpers/config-ui/message-selectors.js @@ -10,6 +10,7 @@ export const PAGE = { ...GENERAL, inlineErrorMessage: `[data-test-inline-error-message]`, unauthCreateFormInfo: '[data-test-unauth-info]', + navLink: '[data-test-sidebar-nav-link="Custom Messages"]', radio: (radioName) => `[data-test-radio="${radioName}"]`, field: (fieldName) => `[data-test-field="${fieldName}"]`, input: (input) => `[data-test-input="${input}"]`,