diff --git a/ui/app/templates/allocations/allocation/index.hbs b/ui/app/templates/allocations/allocation/index.hbs index c157bda54..8356eefa7 100644 --- a/ui/app/templates/allocations/allocation/index.hbs +++ b/ui/app/templates/allocations/allocation/index.hbs @@ -65,15 +65,23 @@ diff --git a/ui/tests/acceptance/allocation-detail-test.js b/ui/tests/acceptance/allocation-detail-test.js index f2a0296c6..dfbdc747e 100644 --- a/ui/tests/acceptance/allocation-detail-test.js +++ b/ui/tests/acceptance/allocation-detail-test.js @@ -1,5 +1,5 @@ import $ from 'jquery'; -import { click, findAll, currentURL, find, visit } from 'ember-native-dom-helpers'; +import { click, findAll, currentURL, find, visit, waitFor } from 'ember-native-dom-helpers'; import { test } from 'qunit'; import moduleForAcceptance from 'nomad-ui/tests/helpers/module-for-acceptance'; import moment from 'moment'; @@ -139,3 +139,49 @@ test('when the allocation is not found, an error message is shown, but the URL p ); }); }); + +moduleForAcceptance('Acceptance | allocation detail (loading states)', { + beforeEach() { + server.create('agent'); + + node = server.create('node'); + job = server.create('job', { groupCount: 0 }); + allocation = server.create('allocation', 'withTaskWithPorts'); + }, +}); + +test('when the node the allocation is on has yet to load, address links are in a loading state', function(assert) { + server.get('/node/:id', { timing: true }); + + visit(`/allocations/${allocation.id}`); + + waitFor('[data-test-port]').then(() => { + assert.ok( + find('[data-test-port]') + .textContent.trim() + .endsWith('...'), + 'The address is in a loading state' + ); + assert.notOk( + find('[data-test-port]').querySelector('a'), + 'While in the loading state, there is no link to the address' + ); + + server.pretender.requestReferences.forEach(({ request }) => { + server.pretender.resolve(request); + }); + + andThen(() => { + const taskResources = allocation.taskResourcesIds + .map(id => server.db.taskResources.find(id)) + .sortBy('name')[0]; + const port = taskResources.resources.Networks[0].ReservedPorts[0]; + const addressText = find('[data-test-port]').textContent.trim(); + + assert.ok(addressText.includes(port.Label), `Found label ${port.Label}`); + assert.ok(addressText.includes(port.Value), `Found value ${port.Value}`); + assert.ok(addressText.includes(node.httpAddr.match(/(.+):.+$/)[1]), 'Found the node address'); + assert.ok(find('[data-test-port]').querySelector('a'), 'Link to address found'); + }); + }); +});