Skip to content

Commit

Permalink
Integration tests for the breadcrumbs component
Browse files Browse the repository at this point in the history
  • Loading branch information
DingoEatingFuzz committed Jul 6, 2018
1 parent 9367fff commit 4eaf2e4
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 1 deletion.
2 changes: 1 addition & 1 deletion ui/app/templates/components/app-breadcrumbs.hbs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{{#each breadcrumbs as |breadcrumb index|}}
<li class="{{if (eq (inc index) breadcrumbs.length) "is-active"}}">
{{#if breadcrumb.isPending}}
<a href="#" aria-label="loading">&hellip;</a>
<a href="#" aria-label="loading" data-test-breadcrumb="loading">&hellip;</a>
{{else}}
{{#link-to
params=breadcrumb.args
Expand Down
85 changes: 85 additions & 0 deletions ui/tests/integration/app-breadcrumbs-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
import Service from '@ember/service';
import { getOwner } from '@ember/application';
import RSVP from 'rsvp';
import { test, moduleForComponent } from 'ember-qunit';
import { findAll } from 'ember-native-dom-helpers';
import wait from 'ember-test-helpers/wait';
import hbs from 'htmlbars-inline-precompile';
import PromiseObject from 'nomad-ui/utils/classes/promise-object';

moduleForComponent('app-breadcrumbs', 'Integration | Component | app breadcrumbs', {
integration: true,
beforeEach() {
const mockBreadcrumbs = Service.extend({
breadcrumbs: [],
});

this.register('service:breadcrumbs', mockBreadcrumbs);
this.breadcrumbs = getOwner(this).lookup('service:breadcrumbs');
},
});

const commonCrumbs = [{ label: 'One', args: ['one'] }, { label: 'Two', args: ['two'] }];

const template = hbs`
{{app-breadcrumbs}}
`;

test('breadcrumbs comes from the breadcrumbs service', function(assert) {
this.breadcrumbs.set('breadcrumbs', commonCrumbs);

this.render(template);

assert.equal(
findAll('[data-test-breadcrumb]').length,
commonCrumbs.length,
'The number of crumbs matches the crumbs from the service'
);
});

test('every breadcrumb is rendered correctly', function(assert) {
this.breadcrumbs.set('breadcrumbs', commonCrumbs);

this.render(template);

const renderedCrumbs = findAll('[data-test-breadcrumb]');

renderedCrumbs.forEach((crumb, index) => {
assert.equal(
crumb.textContent.trim(),
commonCrumbs[index].label,
`Crumb ${index} is ${commonCrumbs[index].label}`
);
});
});

test('when breadcrumbs are pending promises, an ellipsis is rendered', function(assert) {
let resolvePromise;
const promise = new RSVP.Promise(resolve => {
resolvePromise = resolve;
});

this.breadcrumbs.set('breadcrumbs', [
{ label: 'One', args: ['one'] },
PromiseObject.create({ promise }),
{ label: 'Three', args: ['three'] },
]);

this.render(template);

assert.equal(
findAll('[data-test-breadcrumb]')[1].textContent.trim(),
'…',
'Promise breadcrumb is in a loading state'
);

resolvePromise({ label: 'Two', args: ['two'] });

return wait().then(() => {
assert.equal(
findAll('[data-test-breadcrumb]')[1].textContent.trim(),
'Two',
'Promise breadcrumb has resolved and now renders Two'
);
});
});

0 comments on commit 4eaf2e4

Please sign in to comment.