diff --git a/ui/app/templates/components/placement-failure.hbs b/ui/app/templates/components/placement-failure.hbs
index 16aa49a63..63f49a826 100644
--- a/ui/app/templates/components/placement-failure.hbs
+++ b/ui/app/templates/components/placement-failure.hbs
@@ -14,25 +14,25 @@
{{/if}}
{{/each-in}}
{{#each-in failures.classFiltered as |class count|}}
-
Class {{class}} filtered {{count}} {{pluralize "node" count}}
+ Class {{class}} filtered {{count}} {{pluralize "node" count}}
{{/each-in}}
{{#each-in failures.constraintFiltered as |constraint count|}}
- Constraint {{constraint}} filtered {{count}} {{pluralize "node" count}}
+ Constraint {{constraint}} filtered {{count}} {{pluralize "node" count}}
{{/each-in}}
{{#if failures.nodesExhausted}}
- Resources exhausted on {{failures.nodesExhausted}} {{pluralize "node" failures.nodesExhausted}}
+ Resources exhausted on {{failures.nodesExhausted}} {{pluralize "node" failures.nodesExhausted}}
{{/if}}
{{#each-in failures.classExhausted as |class count|}}
- Class {{class}} exhausted on {{count}} {{pluralize "node" count}}
+ Class {{class}} exhausted on {{count}} {{pluralize "node" count}}
{{/each-in}}
{{#each-in failures.dimensionExhausted as |dimension count|}}
- Dimension {{dimension}} exhausted on {{count}} {{pluralize "node" count}}
+ Dimension {{dimension}} exhausted on {{count}} {{pluralize "node" count}}
{{/each-in}}
{{#each-in failures.quotaExhausted as |quota dimension|}}
- Quota limit hit {{dimension}}
+ Quota limit hit {{dimension}}
{{/each-in}}
{{#each-in failures.scores as |name score|}}
- Score {{name}} = {{score}}
+ Score {{name}} = {{score}}
{{/each-in}}
{{/with}}
diff --git a/ui/tests/integration/placement-failure-test.js b/ui/tests/integration/placement-failure-test.js
index c7612441f..338b04cb3 100644
--- a/ui/tests/integration/placement-failure-test.js
+++ b/ui/tests/integration/placement-failure-test.js
@@ -41,69 +41,101 @@ test('should render the placement failure (basic render)', function(assert) {
);
assert.equal(
findAll('[data-test-placement-failure-no-evaluated-nodes]').length,
- 0,
+ 1,
'No evaluated nodes message shown'
);
+ assert.equal(
+ findAll('[data-test-placement-failure-no-nodes-available]').length,
+ 1,
+ 'No nodes in datacenter message shown'
+ );
+ assert.equal(
+ findAll('[data-test-placement-failure-class-filtered]').length,
+ 1,
+ 'Class filtered message shown'
+ );
+ assert.equal(
+ findAll('[data-test-placement-failure-constraint-filtered]').length,
+ 1,
+ 'Constraint filtered message shown'
+ );
+ assert.equal(
+ findAll('[data-test-placement-failure-nodes-exhausted]').length,
+ 1,
+ 'Node exhausted message shown'
+ );
+ assert.equal(
+ findAll('[data-test-placement-failure-class-exhausted]').length,
+ 1,
+ 'Class exhausted message shown'
+ );
+ assert.equal(
+ findAll('[data-test-placement-failure-dimension-exhausted]').length,
+ 1,
+ 'Dimension exhausted message shown'
+ );
+ assert.equal(
+ findAll('[data-test-placement-failure-quota-exhausted]').length,
+ 1,
+ 'Quota exhausted message shown'
+ );
+ assert.equal(
+ findAll('[data-test-placement-failure-scores]').length,
+ 1,
+ 'Scores message shown'
+ );
});
test('should render correctly when a node is not evaluated', function(assert) {
this.set(
'taskGroup',
createFixture(
{
- nodesEvaluated: 0
+ nodesEvaluated: 1,
+ nodesExhausted: 0
}
)
);
this.render(commonTemplate);
assert.equal(
findAll('[data-test-placement-failure-no-evaluated-nodes]').length,
- 1,
+ 0,
'No evaluated nodes message shown'
);
+ assert.equal(
+ findAll('[data-test-placement-failure-nodes-exhausted]').length,
+ 0,
+ 'Nodes exhausted message NOT shown when there are no nodes exausted'
+ );
});
-function createFixture(obj = {}, name = "Placement Failure") {
+function createFixture(obj = {}, name = 'Placement Failure') {
return {
name: name,
placementFailures: Object.assign({
coalescedFailures: 10,
- nodesEvaluated: 1,
- nodesAvailable: [
- {
- datacenter: 0,
- },
- ],
- classFiltered: [
- {
- filtered: 1,
- },
- ],
- constraintFiltered: [
- {
- 'prop = val': 1,
- },
- ],
+ nodesEvaluated: 0,
+ nodesAvailable: {
+ datacenter: 0,
+ },
+ classFiltered: {
+ filtered: 1,
+ },
+ constraintFiltered: {
+ 'prop = val': 1,
+ },
nodesExhausted: 3,
- classExhausted: [
- {
- class: 3,
- },
- ],
- dimensionExhausted: [
- {
- iops: 3,
- },
- ],
- quotaExhausted: [
- {
- quota: 'dimension',
- },
- ],
- scores: [
- {
- name: 3,
- },
- ],
+ classExhausted: {
+ class: 3,
+ },
+ dimensionExhausted: {
+ iops: 3,
+ },
+ quotaExhausted: {
+ quota: 'dimension',
+ },
+ scores: {
+ name: 3,
+ },
},
obj
)