Add in data-test attrs to hook into, decide on test case granularity

This commit is contained in:
John Cowen
2018-01-18 11:52:49 +00:00
parent 2d1fd1e02e
commit 0a9faaa805
2 changed files with 96 additions and 60 deletions

View File

@@ -2,37 +2,37 @@
{{#with taskGroup.placementFailures as |failures|}}
<h3 class="title is-5" data-test-placement-failure-task-group>
{{taskGroup.name}}
<span class="badge is-light">{{inc failures.coalescedFailures}} unplaced</span>
<span class="badge is-light" data-test-placement-failure-coalesced-failures>{{inc failures.coalescedFailures}} unplaced</span>
</h3>
<ul class="simple-list">
{{#if (eq failures.nodesEvaluated 0)}}
<li>No nodes were eligible for evaluation</li>
<li data-test-placement-failure-no-evaluated-nodes>No nodes were eligible for evaluation</li>
{{/if}}
{{#each-in failures.nodesAvailable as |datacenter available|}}
{{#if (eq available 0)}}
<li>No nodes are available in datacenter {{datacenter}}</li>
<li data-test-placement-failure-no-nodes-available="{{datacenter}}">No nodes are available in datacenter {{datacenter}}</li>
{{/if}}
{{/each-in}}
{{#each-in failures.classFiltered as |class count|}}
<li>Class {{class}} filtered {{count}} {{pluralize "node" count}}</li>
<li data-test-placement-failures-class-filtered="{{class}}">Class {{class}} filtered {{count}} {{pluralize "node" count}}</li>
{{/each-in}}
{{#each-in failures.constraintFiltered as |constraint count|}}
<li>Constraint <code>{{constraint}}</code> filtered {{count}} {{pluralize "node" count}}</li>
<li data-test-placement-failures-constraint-filtered="{{constraint}}">Constraint <code>{{constraint}}</code> filtered {{count}} {{pluralize "node" count}}</li>
{{/each-in}}
{{#if failures.nodesExhausted}}
<li>Resources exhausted on {{failures.nodesExhausted}} {{pluralize "node" failures.nodesExhausted}}</li>
<li data-test-placement-failures-nodes-exhausted>Resources exhausted on {{failures.nodesExhausted}} {{pluralize "node" failures.nodesExhausted}}</li>
{{/if}}
{{#each-in failures.classExhausted as |class count|}}
<li>Class {{class}} exhausted on {{count}} {{pluralize "node" count}}</li>
<li data-test-placement-failures-class-exhausted="{{class}}">Class {{class}} exhausted on {{count}} {{pluralize "node" count}}</li>
{{/each-in}}
{{#each-in failures.dimensionExhausted as |dimension count|}}
<li>Dimension {{dimension}} exhausted on {{count}} {{pluralize "node" count}}</li>
<li data-test-placement-failures-dimension-exhausted="{{dimension}}">Dimension {{dimension}} exhausted on {{count}} {{pluralize "node" count}}</li>
{{/each-in}}
{{#each-in failures.quotaExhausted as |quota dimension|}}
<li>Quota limit hit {{dimension}}</li>
<li data-test-placement-failures-quota-exhausted="{{quota}}">Quota limit hit {{dimension}}</li>
{{/each-in}}
{{#each-in failures.scores as |name score|}}
<li>Score {{name}} = {{score}}</li>
<li data-test-placement-failures-scores="{{name}}">Score {{name}} = {{score}}</li>
{{/each-in}}
</ul>
{{/with}}

View File

@@ -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`
</div>
`;
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
)
};
}