open-nomad/ui/tests/acceptance/server-monitor-test.js
Jai Bhagat 9b756998d3 add name property back to agent schema in ember mirage
The name property had to be added back to the agent schema
in the Agent Factory because the /agent/monitor endpoint in
the config finds agents by their names and since member is not
a proper entity in our Mirage Config we can't just findBy name
of the member. So although we're following the correct schema
we're set-up to rely on this.
2021-07-11 16:09:43 -04:00

74 lines
2.7 KiB
JavaScript

import { currentURL } from '@ember/test-helpers';
import { run } from '@ember/runloop';
import { module, test } from 'qunit';
import { setupApplicationTest } from 'ember-qunit';
import { setupMirage } from 'ember-cli-mirage/test-support';
import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit';
import ServerMonitor from 'nomad-ui/tests/pages/servers/monitor';
import Layout from 'nomad-ui/tests/pages/layout';
let agent;
let managementToken;
let clientToken;
module('Acceptance | server monitor', function(hooks) {
setupApplicationTest(hooks);
setupMirage(hooks);
hooks.beforeEach(function() {
agent = server.create('agent');
managementToken = server.create('token');
clientToken = server.create('token');
window.localStorage.nomadTokenSecret = managementToken.secretId;
run.later(run, run.cancelTimers, 500);
});
test('it passes an accessibility audit', async function(assert) {
await ServerMonitor.visit({ name: agent.name });
await a11yAudit(assert);
});
test('/servers/:id/monitor should have a breadcrumb trail linking back to servers', async function(assert) {
await ServerMonitor.visit({ name: agent.name });
assert.equal(Layout.breadcrumbFor('servers.index').text, 'Servers');
assert.equal(Layout.breadcrumbFor('servers.server').text, agent.name);
await Layout.breadcrumbFor('servers.index').visit();
assert.equal(currentURL(), '/servers');
});
test('the monitor page immediately streams agent monitor output at the info level', async function(assert) {
await ServerMonitor.visit({ name: agent.name });
const logRequest = server.pretender.handledRequests.find(req =>
req.url.startsWith('/v1/agent/monitor')
);
assert.ok(ServerMonitor.logsArePresent);
assert.ok(logRequest);
assert.ok(logRequest.url.includes('log_level=info'));
});
test('switching the log level persists the new log level as a query param', async function(assert) {
await ServerMonitor.visit({ name: agent.name });
await ServerMonitor.selectLogLevel('Debug');
assert.equal(currentURL(), `/servers/${agent.name}/monitor?level=debug`);
});
test('when the current access token does not include the agent:read rule, a descriptive error message is shown', async function(assert) {
window.localStorage.nomadTokenSecret = clientToken.secretId;
await ServerMonitor.visit({ name: agent.name });
assert.notOk(ServerMonitor.logsArePresent);
assert.ok(ServerMonitor.error.isShown);
assert.equal(ServerMonitor.error.title, 'Not Authorized');
assert.ok(ServerMonitor.error.message.includes('agent:read'));
await ServerMonitor.error.seekHelp();
assert.equal(currentURL(), '/settings/tokens');
});
});