open-nomad/ui/tests/integration/app-breadcrumbs-test.js
Buck Doyle 1cca7abcab
Add Ember ESLint plugin (#8134)
This is extracted from #8094, where I have run into some snags. Since
these ESLint fixes aren’t actually connected to the Ember 3.16 update
but involve changes to many files, we might as well address them
separately. Where possible I fixed the problems but in cases where
a fix seemed too involved, I added per-line or -file exceptions.
2020-06-09 16:03:28 -05:00

89 lines
2.5 KiB
JavaScript

import Service from '@ember/service';
import RSVP from 'rsvp';
import { module, test } from 'qunit';
import { setupRenderingTest } from 'ember-qunit';
import { findAll, render, settled } from '@ember/test-helpers';
import hbs from 'htmlbars-inline-precompile';
import PromiseObject from 'nomad-ui/utils/classes/promise-object';
module('Integration | Component | app breadcrumbs', function(hooks) {
setupRenderingTest(hooks);
hooks.beforeEach(function() {
const mockBreadcrumbs = Service.extend({
init() {
this._super(...arguments);
this.breadcrumbs = [];
},
});
this.owner.register('service:breadcrumbs', mockBreadcrumbs);
this.breadcrumbs = this.owner.lookup('service:breadcrumbs');
});
const commonCrumbs = [{ label: 'One', args: ['one'] }, { label: 'Two', args: ['two'] }];
const template = hbs`
<AppBreadcrumbs />
`;
test('breadcrumbs comes from the breadcrumbs service', async function(assert) {
this.breadcrumbs.set('breadcrumbs', commonCrumbs);
await 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', async function(assert) {
this.breadcrumbs.set('breadcrumbs', commonCrumbs);
await 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', async 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'] },
]);
await render(template);
assert.equal(
findAll('[data-test-breadcrumb]')[1].textContent.trim(),
'…',
'Promise breadcrumb is in a loading state'
);
resolvePromise({ label: 'Two', args: ['two'] });
return settled().then(() => {
assert.equal(
findAll('[data-test-breadcrumb]')[1].textContent.trim(),
'Two',
'Promise breadcrumb has resolved and now renders Two'
);
});
});
});