diff --git a/ui/core/mirage/models/host-catalog.js b/ui/core/mirage/models/host-catalog.js
index 08b1f5ad3..8c2757e71 100644
--- a/ui/core/mirage/models/host-catalog.js
+++ b/ui/core/mirage/models/host-catalog.js
@@ -1,7 +1,8 @@
-import { Model, belongsTo } from 'ember-cli-mirage';
+import { Model, belongsTo, hasMany } from 'ember-cli-mirage';
export default Model.extend({
- scope: belongsTo()
+ scope: belongsTo(),
+ hostSets: hasMany()
});
diff --git a/ui/core/public/logo-boundary.svg b/ui/core/public/logo-boundary.svg
index ea71154fb..21465bdef 100644
--- a/ui/core/public/logo-boundary.svg
+++ b/ui/core/public/logo-boundary.svg
@@ -2,56 +2,55 @@
height="30"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 310 67">
-
{
+ return new Response(
+ 400,
+ {},
+ {
+ status: 400,
+ code: 'invalid_argument',
+ message: 'The request was invalid.',
+ details: {
+ request_fields: [
+ {
+ name: 'name',
+ description: 'Name is required.',
+ },
+ ],
+ },
+ }
+ );
+ });
+ await visit(urls.newTarget);
+ await fillIn('[name="name"]', 'new target');
+ await click('form [type="submit"]');
+ await a11yAudit();
+ assert.ok(find('[role="alert"]'));
+ assert.ok(find('.rose-form-error-message'));
});
test('errors are displayed when save on target fails', async function (assert) {
- assert.expect(0);
+ assert.expect(1);
+ this.server.patch('/targets/:id', () => {
+ return new Response(
+ 490,
+ {},
+ {
+ status: 490,
+ code: 'error',
+ message: 'Oops.',
+ }
+ );
+ });
+ await visit(urls.target);
+ await fillIn('[name="name"]', 'save target');
+ await click('form [type="submit"]');
+ await a11yAudit();
+ assert.ok(find('[role="alert"]'));
});
test('errors are displayed when delete on a target fails', async function (assert) {
- assert.expect(0);
+ assert.expect(1);
+ this.server.del('/targets/:id', () => {
+ return new Response(
+ 490,
+ {},
+ {
+ status: 490,
+ code: 'error',
+ message: 'Oops.',
+ }
+ );
+ });
+ await visit(urls.target);
+ await click('.rose-layout-page-actions .rose-dropdown-button-danger');
+ await a11yAudit();
+ assert.ok(find('[role="alert"]'));
});
test('saving an existing target with invalid fields displays error messages', async function (assert) {
- assert.expect(0);
+ assert.expect(2);
+ this.server.patch('/targets/:id', () => {
+ return new Response(
+ 400,
+ {},
+ {
+ status: 400,
+ code: 'invalid_argument',
+ message: 'The request was invalid.',
+ details: {
+ request_fields: [
+ {
+ name: 'name',
+ description: 'Name is required.',
+ },
+ ],
+ },
+ }
+ );
+ });
+ await visit(urls.target);
+ await fillIn('[name="name"]', 'existing target');
+ await click('form [type="submit"]');
+ await a11yAudit();
+ assert.ok(find('[role="alert"]'));
+ assert.ok(find('.rose-form-error-message'));
});
- test('viewing target host sets', async function (assert) {
- assert.expect(0);
+ test('visiting target host sets', async function (assert) {
+ assert.expect(3);
+ const targetHostSetCount = instances.target.hostSets.length;
+ await visit(urls.targetHostSets);
+ await a11yAudit();
+ assert.equal(currentURL(), urls.targetHostSets);
+ assert.ok(targetHostSetCount);
+ assert.equal(findAll('tbody tr').length, targetHostSetCount);
});
test('can delete a host sets', async function (assert) {
- assert.expect(0);
+ assert.expect(2);
+ const targetHostSetCount = instances.target.hostSets.length;
+ await visit(urls.targetHostSets);
+ assert.equal(findAll('tbody tr').length, targetHostSetCount);
+ await click('tbody tr .rose-dropdown-button-danger');
+ assert.equal(findAll('tbody tr').length, targetHostSetCount - 1);
+ });
+
+ test('shows error message on host set remove', async function (assert) {
+ assert.expect(2);
+ this.server.post('/targets/:idMethod', () => {
+ return new Response(
+ 400,
+ {},
+ {
+ status: 400,
+ code: 'invalid_argument',
+ message: 'The request was invalid.',
+ details: {},
+ }
+ );
+ });
+ const targetHostSetCount = instances.target.hostSets.length;
+ await visit(urls.targetHostSets);
+ assert.equal(findAll('tbody tr').length, targetHostSetCount);
+ await click('tbody tr .rose-dropdown-button-danger');
+ assert.ok(find('[role="alert"]'));
});
test('select and save host sets to add', async function (assert) {
- assert.expect(0);
+ assert.expect(3);
+ instances.target.update({ hostSetIds: [] });
+ await visit(urls.targetHostSets);
+ assert.equal(findAll('tbody tr').length, 0);
+ await click('.rose-layout-page-actions a')
+ assert.equal(currentURL(), urls.targetAddHostSets);
+ await click('tbody label');
+ await click('form [type="submit"]');
+ await visit(urls.targetHostSets);
+ assert.equal(findAll('tbody tr').length, 1);
});
test('select and cancel host sets to add', async function (assert) {
- assert.expect(0);
+ assert.expect(4);
+ const targetHostSetCount = instances.target.hostSets.length;
+ await visit(urls.targetHostSets);
+ assert.equal(findAll('tbody tr').length, targetHostSetCount);
+ // first, remove a target host set (otherwise none would be available to add)
+ await click('tbody tr .rose-dropdown-button-danger');
+ assert.equal(findAll('tbody tr').length, targetHostSetCount - 1);
+ await click('.rose-layout-page-actions a')
+ assert.equal(currentURL(), urls.targetAddHostSets);
+ await click('tbody label');
+ await click('form [type="button"]');
+ await visit(urls.targetHostSets);
+ assert.equal(findAll('tbody tr').length, targetHostSetCount - 1);
+ });
+
+ test('shows error message on host set add', async function (assert) {
+ assert.expect(4);
+ this.server.post('/targets/:idMethod', () => {
+ return new Response(
+ 400,
+ {},
+ {
+ status: 400,
+ code: 'invalid_argument',
+ message: 'The request was invalid.',
+ details: {},
+ }
+ );
+ });
+ instances.target.update({ hostSetIds: [] });
+ await visit(urls.targetAddHostSets);
+ assert.equal(instances.target.hostSets.length, 0);
+ assert.equal(currentURL(), urls.targetAddHostSets);
+ await click('tbody label');
+ await click('form [type="submit"]');
+ assert.equal(currentURL(), urls.targetAddHostSets);
+ assert.equal(instances.target.hostSets.length, 0);
});
});