vault/ui/tests/integration/components/replication-overview-mode-test.js
Chelsea Shaw e1c56a300f
UI: reorg replication (#28332)
* Add replication-overview-mode component + tests

* Move both primary view higher to template

* simplify replication-summary component

* remove replication-mode-summary

* Add jsdocs to replication-overview-mode

* fix overview-mode test

* fix page/mode-index test

* copyright

* address PR comments

* note to devs
2024-09-11 09:19:33 -05:00

125 lines
4.5 KiB
JavaScript

/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
import { module, test } from 'qunit';
import { setupRenderingTest } from 'vault/tests/helpers';
import { render, settled } from '@ember/test-helpers';
import { hbs } from 'ember-cli-htmlbars';
import { setupEngine } from 'ember-engines/test-support';
const OVERVIEW_MODE = {
title: '[data-test-overview-mode-title]',
body: '[data-test-overview-mode-body]',
detailsLink: '[data-test-replication-details-link]',
};
module('Integration | Component | replication-overview-mode', function (hooks) {
setupRenderingTest(hooks);
setupEngine(hooks, 'replication');
hooks.beforeEach(function () {
this.versionService = this.owner.lookup('service:version');
this.versionService.features = [];
this.mode = 'dr';
this.clusterName = 'foobar';
this.modeDetails = { mode: 'disabled' };
this.renderComponent = async () => {
return render(
hbs`
<ReplicationOverviewMode
@clusterName={{this.clusterName}}
@mode={{this.mode}}
@model={{this.modeDetails}}
/>`,
{ owner: this.engine }
);
};
});
test('without features', async function (assert) {
await this.renderComponent();
assert.dom(OVERVIEW_MODE.title).hasText('Disaster Recovery (DR)');
assert
.dom(OVERVIEW_MODE.body)
.includesText('Disaster Recovery is a feature of Vault Enterprise Premium. Upgrade');
assert.dom(OVERVIEW_MODE.detailsLink).doesNotExist('does not show link to replication (dr)');
this.set('mode', 'performance');
await settled();
assert.dom(OVERVIEW_MODE.title).hasText('Performance');
assert
.dom(OVERVIEW_MODE.body)
.includesText('Performance Replication is a feature of Vault Enterprise Premium. Upgrade');
assert.dom(OVERVIEW_MODE.detailsLink).doesNotExist('does not show link to replication (perf)');
});
module('with features', function (hooks) {
hooks.beforeEach(function () {
this.versionService.features = ['DR Replication', 'Performance Replication'];
});
test('it renders when replication disabled', async function (assert) {
await this.renderComponent();
assert.dom(OVERVIEW_MODE.title).hasText('Disaster Recovery (DR)');
assert
.dom(OVERVIEW_MODE.body)
.hasText(
'Disaster Recovery Replication is designed to protect against catastrophic failure of entire clusters. Secondaries do not forward service requests until they are elected and become a new primary.'
);
assert.dom(OVERVIEW_MODE.detailsLink).hasText('Enable');
this.set('mode', 'performance');
await settled();
assert.dom(OVERVIEW_MODE.title).hasText('Performance');
assert
.dom(OVERVIEW_MODE.body)
.hasText(
'Performance Replication scales workloads horizontally across clusters to make requests faster. Local secondaries handle read requests but forward writes to the primary to be handled.'
);
assert.dom(OVERVIEW_MODE.detailsLink).hasText('Enable');
});
test('it renders when replication enabled', async function (assert) {
this.mode = 'performance';
this.modeDetails = {
replicationEnabled: true,
mode: 'primary',
modeForUrl: 'primary',
clusterIdDisplay: 'foobar12',
};
await this.renderComponent();
assert.dom(OVERVIEW_MODE.title).hasText('Performance');
assert
.dom(OVERVIEW_MODE.body)
.includesText('ENABLED Primary foobar12', 'renders mode type and cluster ID if passed');
assert.dom(OVERVIEW_MODE.detailsLink).hasText('Details');
this.set('modeDetails', {
replicationEnabled: true,
mode: 'secondary',
modeForUrl: 'secondary',
clusterIdDisplay: 'foobar12',
secondaryId: 'some-secondary',
});
await settled();
assert.dom(OVERVIEW_MODE.title).hasText('Performance');
assert.dom(OVERVIEW_MODE.body).includesText('ENABLED Secondary some-secondary foobar12');
assert.dom(OVERVIEW_MODE.detailsLink).hasText('Details');
});
test('it renders when replication bootstrapping', async function (assert) {
this.modeDetails = {
replicationEnabled: true,
mode: 'bootstrapping',
modeForUrl: 'bootstrapping',
};
await this.renderComponent();
assert.dom(OVERVIEW_MODE.title).hasText('Disaster Recovery (DR)');
assert.dom(OVERVIEW_MODE.body).includesText('ENABLED Bootstrapping');
assert.dom(OVERVIEW_MODE.detailsLink).hasText('Details');
});
});
});