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');
+ });
+ });
+});
|