diff --git a/ui/app/templates/components/placement-failure.hbs b/ui/app/templates/components/placement-failure.hbs
index 026700069..16aa49a63 100644
--- a/ui/app/templates/components/placement-failure.hbs
+++ b/ui/app/templates/components/placement-failure.hbs
@@ -2,37 +2,37 @@
{{#with taskGroup.placementFailures as |failures|}}
{{taskGroup.name}}
- {{inc failures.coalescedFailures}} unplaced
+ {{inc failures.coalescedFailures}} unplaced
{{#if (eq failures.nodesEvaluated 0)}}
- - No nodes were eligible for evaluation
+ - No nodes were eligible for evaluation
{{/if}}
{{#each-in failures.nodesAvailable as |datacenter available|}}
{{#if (eq available 0)}}
- - No nodes are available in datacenter {{datacenter}}
+ - No nodes are available in datacenter {{datacenter}}
{{/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 0d70f0853..c7612441f 100644
--- a/ui/tests/integration/placement-failure-test.js
+++ b/ui/tests/integration/placement-failure-test.js
@@ -1,9 +1,9 @@
-import { find } from 'ember-native-dom-helpers';
+import { find, findAll } from 'ember-native-dom-helpers';
import { test, moduleForComponent } from 'ember-qunit';
import hbs from 'htmlbars-inline-precompile';
import cleanWhitespace from '../utils/clean-whitespace';
-moduleForComponent('placement-failure', 'Integration | Component | placement failure', {
+moduleForComponent('placement-failure', 'Integration | Component | placement failures', {
integration: true,
});
@@ -15,61 +15,97 @@ const commonTemplate = hbs`
`;
-const name = 'My Name';
-const failures = 10;
-test('placement failures report', function(assert) {
- this.set('taskGroup', {
- name: name,
- placementFailures: createFailures(failures),
- });
+test('should render the placement failure (basic render)', function(assert) {
+ const name = 'Placement Failure';
+ const failures = 11;
+ this.set(
+ 'taskGroup',
+ createFixture(
+ {
+ coalescedFailures: failures - 1
+ },
+ name
+ )
+ );
this.render(commonTemplate);
assert.equal(
- cleanWhitespace(find('.title').textContent),
- `${name} ${failures + 1} unplaced`,
+ cleanWhitespace(find('[data-test-placement-failure-task-group]').firstChild.wholeText),
+ name,
+ 'Title is rendered with the name of the placement failure'
+ );
+ assert.equal(
+ parseInt(find('[data-test-placement-failure-coalesced-failures]').textContent),
+ failures,
'Title is rendered correctly with a count of unplaced'
);
+ assert.equal(
+ findAll('[data-test-placement-failure-no-evaluated-nodes]').length,
+ 0,
+ 'No evaluated nodes message shown'
+ );
+});
+test('should render correctly when a node is not evaluated', function(assert) {
+ this.set(
+ 'taskGroup',
+ createFixture(
+ {
+ nodesEvaluated: 0
+ }
+ )
+ );
+ this.render(commonTemplate);
+ assert.equal(
+ findAll('[data-test-placement-failure-no-evaluated-nodes]').length,
+ 1,
+ 'No evaluated nodes message shown'
+ );
});
-function createFailures(count) {
+function createFixture(obj = {}, name = "Placement Failure") {
return {
- coalescedFailures: count,
- 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,
- },
- ],
+ name: name,
+ placementFailures: Object.assign({
+ coalescedFailures: 10,
+ nodesEvaluated: 1,
+ nodesAvailable: [
+ {
+ datacenter: 0,
+ },
+ ],
+ classFiltered: [
+ {
+ filtered: 1,
+ },
+ ],
+ constraintFiltered: [
+ {
+ 'prop = val': 1,
+ },
+ ],
+ nodesExhausted: 3,
+ classExhausted: [
+ {
+ class: 3,
+ },
+ ],
+ dimensionExhausted: [
+ {
+ iops: 3,
+ },
+ ],
+ quotaExhausted: [
+ {
+ quota: 'dimension',
+ },
+ ],
+ scores: [
+ {
+ name: 3,
+ },
+ ],
+ },
+ obj
+ )
};
}