Visual diff tests: error states (#14707)
* 3 error states captured * Assertion expecters * Attempt to stabilize datacenters
This commit is contained in:
parent
d26d2874ae
commit
5a6084fff7
|
@ -1,6 +1,8 @@
|
||||||
import faker from 'nomad-ui/mirage/faker';
|
import faker from 'nomad-ui/mirage/faker';
|
||||||
import { provide } from './utils';
|
import { provide } from './utils';
|
||||||
|
|
||||||
|
faker.seed(1);
|
||||||
|
|
||||||
// Realistically, resource reservations have a low cardinality
|
// Realistically, resource reservations have a low cardinality
|
||||||
const CPU_RESERVATIONS = [250, 500, 1000, 2000, 2500, 4000];
|
const CPU_RESERVATIONS = [250, 500, 1000, 2000, 2500, 4000];
|
||||||
const MEMORY_RESERVATIONS = [256, 512, 1024, 2048, 4096, 8192];
|
const MEMORY_RESERVATIONS = [256, 512, 1024, 2048, 4096, 8192];
|
||||||
|
@ -17,7 +19,9 @@ export const DATACENTERS = provide(
|
||||||
);
|
);
|
||||||
|
|
||||||
export const HOSTS = provide(100, () => {
|
export const HOSTS = provide(100, () => {
|
||||||
const ip = faker.random.boolean() ? faker.internet.ip() : `[${faker.internet.ipv6()}]`;
|
const ip = faker.random.boolean()
|
||||||
|
? faker.internet.ip()
|
||||||
|
: `[${faker.internet.ipv6()}]`;
|
||||||
return `${ip}:${faker.random.number({ min: 4000, max: 4999 })}`;
|
return `${ip}:${faker.random.number({ min: 4000, max: 4999 })}`;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -29,7 +33,8 @@ export function generateResources(options = {}) {
|
||||||
CpuShares: options.CPU || faker.helpers.randomize(CPU_RESERVATIONS),
|
CpuShares: options.CPU || faker.helpers.randomize(CPU_RESERVATIONS),
|
||||||
},
|
},
|
||||||
Memory: {
|
Memory: {
|
||||||
MemoryMB: options.MemoryMB || faker.helpers.randomize(MEMORY_RESERVATIONS),
|
MemoryMB:
|
||||||
|
options.MemoryMB || faker.helpers.randomize(MEMORY_RESERVATIONS),
|
||||||
},
|
},
|
||||||
Disk: {
|
Disk: {
|
||||||
DiskMB: options.DiskMB || faker.helpers.randomize(DISK_RESERVATIONS),
|
DiskMB: options.DiskMB || faker.helpers.randomize(DISK_RESERVATIONS),
|
||||||
|
@ -39,8 +44,12 @@ export function generateResources(options = {}) {
|
||||||
};
|
};
|
||||||
|
|
||||||
if (faker.random.boolean()) {
|
if (faker.random.boolean()) {
|
||||||
const higherMemoryReservations = MEMORY_RESERVATIONS.filter(mb => mb > resources.Memory.MemoryMB);
|
const higherMemoryReservations = MEMORY_RESERVATIONS.filter(
|
||||||
resources.Memory.MemoryMaxMB = faker.helpers.randomize(higherMemoryReservations) || resources.Memory.MemoryMB + 1;
|
(mb) => mb > resources.Memory.MemoryMB
|
||||||
|
);
|
||||||
|
resources.Memory.MemoryMaxMB =
|
||||||
|
faker.helpers.randomize(higherMemoryReservations) ||
|
||||||
|
resources.Memory.MemoryMB + 1;
|
||||||
} else {
|
} else {
|
||||||
resources.Memory.MemoryMaxMB = 0;
|
resources.Memory.MemoryMaxMB = 0;
|
||||||
}
|
}
|
||||||
|
@ -96,6 +105,8 @@ export function generatePorts(options = {}) {
|
||||||
Label: faker.hacker.noun(),
|
Label: faker.hacker.noun(),
|
||||||
Value: faker.random.number({ min: 5000, max: 60000 }),
|
Value: faker.random.number({ min: 5000, max: 60000 }),
|
||||||
To: faker.random.number({ min: 5000, max: 60000 }),
|
To: faker.random.number({ min: 5000, max: 60000 }),
|
||||||
HostIP: faker.random.boolean() ? faker.internet.ip() : faker.internet.ipv6(),
|
HostIP: faker.random.boolean()
|
||||||
|
? faker.internet.ip()
|
||||||
|
: faker.internet.ipv6(),
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,12 +6,15 @@ import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit';
|
||||||
import ClientsList from 'nomad-ui/tests/pages/clients/list';
|
import ClientsList from 'nomad-ui/tests/pages/clients/list';
|
||||||
import JobsList from 'nomad-ui/tests/pages/jobs/list';
|
import JobsList from 'nomad-ui/tests/pages/jobs/list';
|
||||||
import Job from 'nomad-ui/tests/pages/jobs/detail';
|
import Job from 'nomad-ui/tests/pages/jobs/detail';
|
||||||
|
import percySnapshot from '@percy/ember';
|
||||||
|
import faker from 'nomad-ui/mirage/faker';
|
||||||
|
|
||||||
module('Acceptance | application errors ', function (hooks) {
|
module('Acceptance | application errors ', function (hooks) {
|
||||||
setupApplicationTest(hooks);
|
setupApplicationTest(hooks);
|
||||||
setupMirage(hooks);
|
setupMirage(hooks);
|
||||||
|
|
||||||
hooks.beforeEach(function () {
|
hooks.beforeEach(function () {
|
||||||
|
faker.seed(1);
|
||||||
server.create('agent');
|
server.create('agent');
|
||||||
server.create('node');
|
server.create('node');
|
||||||
server.create('job');
|
server.create('job');
|
||||||
|
@ -23,6 +26,7 @@ module('Acceptance | application errors ', function (hooks) {
|
||||||
server.pretender.get('/v1/nodes', () => [500, {}, null]);
|
server.pretender.get('/v1/nodes', () => [500, {}, null]);
|
||||||
await ClientsList.visit();
|
await ClientsList.visit();
|
||||||
await a11yAudit(assert);
|
await a11yAudit(assert);
|
||||||
|
await percySnapshot(assert);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('transitioning away from an error page resets the global error', async function (assert) {
|
test('transitioning away from an error page resets the global error', async function (assert) {
|
||||||
|
@ -39,6 +43,7 @@ module('Acceptance | application errors ', function (hooks) {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('the 403 error page links to the ACL tokens page', async function (assert) {
|
test('the 403 error page links to the ACL tokens page', async function (assert) {
|
||||||
|
assert.expect(3);
|
||||||
const job = server.db.jobs[0];
|
const job = server.db.jobs[0];
|
||||||
|
|
||||||
server.pretender.get(`/v1/job/${job.id}`, () => [403, {}, null]);
|
server.pretender.get(`/v1/job/${job.id}`, () => [403, {}, null]);
|
||||||
|
@ -47,6 +52,7 @@ module('Acceptance | application errors ', function (hooks) {
|
||||||
|
|
||||||
assert.ok(Job.error.isPresent, 'Error message is shown');
|
assert.ok(Job.error.isPresent, 'Error message is shown');
|
||||||
assert.equal(Job.error.title, 'Not Authorized', 'Error message is for 403');
|
assert.equal(Job.error.title, 'Not Authorized', 'Error message is for 403');
|
||||||
|
await percySnapshot(assert);
|
||||||
|
|
||||||
await Job.error.seekHelp();
|
await Job.error.seekHelp();
|
||||||
assert.equal(
|
assert.equal(
|
||||||
|
@ -57,6 +63,7 @@ module('Acceptance | application errors ', function (hooks) {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('the no leader error state gets its own error message', async function (assert) {
|
test('the no leader error state gets its own error message', async function (assert) {
|
||||||
|
assert.expect(2);
|
||||||
server.pretender.get('/v1/jobs', () => [500, {}, 'No cluster leader']);
|
server.pretender.get('/v1/jobs', () => [500, {}, 'No cluster leader']);
|
||||||
|
|
||||||
await JobsList.visit();
|
await JobsList.visit();
|
||||||
|
@ -67,6 +74,7 @@ module('Acceptance | application errors ', function (hooks) {
|
||||||
'No Cluster Leader',
|
'No Cluster Leader',
|
||||||
'The error is specifically for the lack of a cluster leader'
|
'The error is specifically for the lack of a cluster leader'
|
||||||
);
|
);
|
||||||
|
await percySnapshot(assert);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('error pages include links to the jobs and clients pages', async function (assert) {
|
test('error pages include links to the jobs and clients pages', async function (assert) {
|
||||||
|
|
Loading…
Reference in New Issue