mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-11-29 15:12:58 +03:00
73daa80b7f
no issue - upgrade to latest `ember-source` and related dependencies including `ember-cli` - upgrade to latest `ember-mocha` and modern ember testing setup - https://github.com/emberjs/rfcs/blob/master/text/0268-acceptance-testing-refactor.md - switch from using global acceptance test helpers and `native-dom-helpers` to using the new `ember-test-helpers` methods - use [`chai-dom`](https://github.com/nathanboktae/chai-dom) assertions where in some places (still a lot of places in the tests that could use these) - pin `ember-in-viewport` to 3.0.x to work around incompatibilities between different versions used in `ember-light-table`, `ember-infinity`, and `ember-sticky-element` - incompatibilities manifested as "Invalid value used as weak map key" errors thrown when using `ember-light-table` (subscribers screen) - pin `ember-power-datepicker` to unreleased version that contains a move from global acceptance test helpers to modern test helpers
183 lines
6.3 KiB
JavaScript
183 lines
6.3 KiB
JavaScript
import hbs from 'htmlbars-inline-precompile';
|
|
import sinon from 'sinon';
|
|
import {click, find, findAll, render} from '@ember/test-helpers';
|
|
import {describe, it} from 'mocha';
|
|
import {expect} from 'chai';
|
|
import {setupRenderingTest} from 'ember-mocha';
|
|
|
|
describe('Integration: Component: gh-theme-table', function () {
|
|
setupRenderingTest();
|
|
|
|
it('renders', async function () {
|
|
this.set('themes', [
|
|
{name: 'Daring', package: {name: 'Daring', version: '0.1.4'}, active: true},
|
|
{name: 'casper', package: {name: 'Casper', version: '1.3.1'}},
|
|
{name: 'oscar-ghost-1.1.0', package: {name: 'Lanyon', version: '1.1.0'}},
|
|
{name: 'foo'}
|
|
]);
|
|
this.set('actionHandler', sinon.spy());
|
|
|
|
await render(hbs`{{gh-theme-table
|
|
themes=themes
|
|
activateTheme=(action actionHandler)
|
|
downloadTheme=(action actionHandler)
|
|
deleteTheme=(action actionHandler)
|
|
}}`);
|
|
|
|
expect(findAll('[data-test-themes-list]').length, 'themes list is present').to.equal(1);
|
|
expect(findAll('[data-test-theme-id]').length, 'number of rows').to.equal(4);
|
|
|
|
let packageNames = findAll('[data-test-theme-title]').map(name => name.textContent.trim());
|
|
|
|
expect(
|
|
packageNames,
|
|
'themes are ordered by label, casper has "default"'
|
|
).to.deep.equal([
|
|
'Casper (default)',
|
|
'Daring',
|
|
'foo',
|
|
'Lanyon'
|
|
]);
|
|
|
|
expect(
|
|
find('[data-test-theme-active="true"]').querySelector('[data-test-theme-title]'),
|
|
'active theme is highlighted'
|
|
).to.have.trimmed.text('Daring');
|
|
|
|
expect(
|
|
findAll('[data-test-theme-activate-button]').length,
|
|
'non-active themes have an activate link'
|
|
).to.equal(3);
|
|
|
|
expect(
|
|
find('[data-test-theme-active="true"]').querySelector('[data-test-theme-activate-button]'),
|
|
'active theme doesn\'t have an activate link'
|
|
).to.not.exist;
|
|
|
|
expect(
|
|
findAll('[data-test-theme-download-button]').length,
|
|
'all themes have a download link'
|
|
).to.equal(4);
|
|
|
|
expect(
|
|
find('[data-test-theme-id="foo"]').querySelector('[data-test-theme-delete-button]'),
|
|
'non-active, non-casper theme has delete link'
|
|
).to.exist;
|
|
|
|
expect(
|
|
find('[data-test-theme-id="casper"]').querySelector('[data-test-theme-delete-button]'),
|
|
'casper doesn\'t have delete link'
|
|
).to.not.exist;
|
|
|
|
expect(
|
|
find('[data-test-theme-active="true"]').querySelector('[data-test-theme-delete-button]'),
|
|
'active theme doesn\'t have delete link'
|
|
).to.not.exist;
|
|
});
|
|
|
|
it('delete link triggers passed in action', async function () {
|
|
let deleteAction = sinon.spy();
|
|
let actionHandler = sinon.spy();
|
|
|
|
this.set('themes', [
|
|
{name: 'Foo', active: true},
|
|
{name: 'Bar'}
|
|
]);
|
|
this.set('deleteAction', deleteAction);
|
|
this.set('actionHandler', actionHandler);
|
|
|
|
await render(hbs`{{gh-theme-table
|
|
themes=themes
|
|
activateTheme=(action actionHandler)
|
|
downloadTheme=(action actionHandler)
|
|
deleteTheme=(action deleteAction)
|
|
}}`);
|
|
|
|
await click('[data-test-theme-id="Bar"] [data-test-theme-delete-button]');
|
|
|
|
expect(deleteAction.calledOnce).to.be.true;
|
|
expect(deleteAction.firstCall.args[0].name).to.equal('Bar');
|
|
});
|
|
|
|
it('download link triggers passed in action', async function () {
|
|
let downloadAction = sinon.spy();
|
|
let actionHandler = sinon.spy();
|
|
|
|
this.set('themes', [
|
|
{name: 'Foo', active: true},
|
|
{name: 'Bar'}
|
|
]);
|
|
this.set('downloadAction', downloadAction);
|
|
this.set('actionHandler', actionHandler);
|
|
|
|
await render(hbs`{{gh-theme-table
|
|
themes=themes
|
|
activateTheme=(action actionHandler)
|
|
downloadTheme=(action downloadAction)
|
|
deleteTheme=(action actionHandler)
|
|
}}`);
|
|
|
|
await click('[data-test-theme-id="Foo"] [data-test-theme-download-button]');
|
|
|
|
expect(downloadAction.calledOnce).to.be.true;
|
|
expect(downloadAction.firstCall.args[0].name).to.equal('Foo');
|
|
});
|
|
|
|
it('activate link triggers passed in action', async function () {
|
|
let activateAction = sinon.spy();
|
|
let actionHandler = sinon.spy();
|
|
|
|
this.set('themes', [
|
|
{name: 'Foo', active: true},
|
|
{name: 'Bar'}
|
|
]);
|
|
this.set('activateAction', activateAction);
|
|
this.set('actionHandler', actionHandler);
|
|
|
|
await render(hbs`{{gh-theme-table
|
|
themes=themes
|
|
activateTheme=(action activateAction)
|
|
downloadTheme=(action actionHandler)
|
|
deleteTheme=(action actionHandler)
|
|
}}`);
|
|
|
|
await click('[data-test-theme-id="Bar"] [data-test-theme-activate-button]');
|
|
|
|
expect(activateAction.calledOnce).to.be.true;
|
|
expect(activateAction.firstCall.args[0].name).to.equal('Bar');
|
|
});
|
|
|
|
it('displays folder names if there are duplicate package names', async function () {
|
|
this.set('themes', [
|
|
{name: 'daring', package: {name: 'Daring', version: '0.1.4'}, active: true},
|
|
{name: 'daring-0.1.5', package: {name: 'Daring', version: '0.1.4'}},
|
|
{name: 'casper', package: {name: 'Casper', version: '1.3.1'}},
|
|
{name: 'another', package: {name: 'Casper', version: '1.3.1'}},
|
|
{name: 'mine', package: {name: 'Casper', version: '1.3.1'}},
|
|
{name: 'foo'}
|
|
]);
|
|
this.set('actionHandler', sinon.spy());
|
|
|
|
await render(hbs`{{gh-theme-table
|
|
themes=themes
|
|
activateTheme=(action actionHandler)
|
|
downloadTheme=(action actionHandler)
|
|
deleteTheme=(action actionHandler)
|
|
}}`);
|
|
|
|
let packageNames = findAll('[data-test-theme-title]').map(name => name.textContent.trim());
|
|
|
|
expect(
|
|
packageNames,
|
|
'themes are ordered by label, folder names shown for duplicates'
|
|
).to.deep.equal([
|
|
'Casper (another)',
|
|
'Casper (default)',
|
|
'Casper (mine)',
|
|
'Daring (daring)',
|
|
'Daring (daring-0.1.5)',
|
|
'foo'
|
|
]);
|
|
});
|
|
});
|