/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
import { module, test } from 'qunit';
import { setupRenderingTest } from 'vault/tests/helpers';
import { render } from '@ember/test-helpers';
import { hbs } from 'ember-cli-htmlbars';
import { setupMirage } from 'ember-cli-mirage/test-support';
import { ACTIVITY_RESPONSE_STUB } from 'vault/tests/helpers/clients/client-count-helpers';
import { filterActivityResponse } from 'vault/mirage/handlers/clients';
import { CHARTS, CLIENT_COUNT } from 'vault/tests/helpers/clients/client-count-selectors';
module('Integration | Component | clients/page/overview', function (hooks) {
setupRenderingTest(hooks);
setupMirage(hooks);
hooks.beforeEach(async function () {
this.server.get('sys/internal/counters/activity', (_, req) => {
const namespace = req.requestHeaders['X-Vault-Namespace'];
if (namespace === 'no-data') {
return {
request_id: 'some-activity-id',
data: {
by_namespace: [],
end_time: '2024-08-31T23:59:59Z',
months: [],
start_time: '2024-01-01T00:00:00Z',
total: {
distinct_entities: 0,
entity_clients: 0,
non_entity_tokens: 0,
non_entity_clients: 0,
clients: 0,
secret_syncs: 0,
},
},
};
}
return {
request_id: 'some-activity-id',
data: filterActivityResponse(ACTIVITY_RESPONSE_STUB, namespace),
};
});
this.store = this.owner.lookup('service:store');
this.mountPath = '';
this.namespace = '';
this.versionHistory = '';
});
test('it hides attribution data when mount filter applied', async function (assert) {
this.mountPath = '';
this.activity = await this.store.queryRecord('clients/activity', {
namespace: 'ns1',
});
await render(
hbs``
);
assert.dom(CHARTS.container('Vault client counts')).exists('shows running totals');
assert.dom(CLIENT_COUNT.attributionBlock('namespace')).exists();
assert.dom(CLIENT_COUNT.attributionBlock('mount')).exists();
this.set('mountPath', 'auth/authid/0');
assert.dom(CHARTS.container('Vault client counts')).exists('shows running totals');
assert.dom(CLIENT_COUNT.attributionBlock('namespace')).doesNotExist();
assert.dom(CLIENT_COUNT.attributionBlock('mount')).doesNotExist();
});
test('it hides attribution data when no data returned', async function (assert) {
this.mountPath = '';
this.activity = await this.store.queryRecord('clients/activity', {
namespace: 'no-data',
});
await render(hbs``);
assert.dom(CLIENT_COUNT.usageStats('Total usage')).exists();
assert.dom(CHARTS.container('Vault client counts')).doesNotExist('usage stats instead of running totals');
assert.dom(CLIENT_COUNT.attributionBlock('namespace')).doesNotExist();
assert.dom(CLIENT_COUNT.attributionBlock('mount')).doesNotExist();
});
test('it shows the correct mount attributions', async function (assert) {
this.nsService = this.owner.lookup('service:namespace');
const rootActivity = await this.store.queryRecord('clients/activity', {});
this.activity = rootActivity;
await render(hbs``);
// start at "root" namespace
let expectedMounts = rootActivity.byNamespace.find((ns) => ns.label === 'root').mounts;
assert
.dom(`${CLIENT_COUNT.attributionBlock('mount')} [data-test-group="y-labels"] text`)
.exists({ count: expectedMounts.length });
assert
.dom(`${CLIENT_COUNT.attributionBlock('mount')} [data-test-group="y-labels"]`)
.includesText(expectedMounts[0].label);
// now pretend we're querying within a child namespace
this.nsService.path = 'ns1';
this.activity = await this.store.queryRecord('clients/activity', {
namespace: 'ns1',
});
expectedMounts = rootActivity.byNamespace.find((ns) => ns.label === 'ns1').mounts;
assert
.dom(`${CLIENT_COUNT.attributionBlock('mount')} [data-test-group="y-labels"] text`)
.exists({ count: expectedMounts.length });
assert
.dom(`${CLIENT_COUNT.attributionBlock('mount')} [data-test-group="y-labels"]`)
.includesText(expectedMounts[0].label);
});
});