2015-09-16 20:02:06 +03:00
|
|
|
/* jshint expr:true */
|
2016-05-24 15:06:59 +03:00
|
|
|
import NavItem from 'ghost-admin/models/navigation-item';
|
2017-05-29 21:50:03 +03:00
|
|
|
import hbs from 'htmlbars-inline-precompile';
|
2017-01-31 22:27:11 +03:00
|
|
|
import wait from 'ember-test-helpers/wait';
|
2017-05-29 21:50:03 +03:00
|
|
|
import {describe, it} from 'mocha';
|
|
|
|
import {expect} from 'chai';
|
|
|
|
import {setupComponentTest} from 'ember-mocha';
|
2015-09-16 20:02:06 +03:00
|
|
|
|
2016-11-24 01:50:57 +03:00
|
|
|
describe('Integration: Component: gh-navitem', function () {
|
|
|
|
setupComponentTest('gh-navitem', {
|
2015-09-16 20:02:06 +03:00
|
|
|
integration: true
|
2016-11-24 01:50:57 +03:00
|
|
|
});
|
2015-09-16 20:02:06 +03:00
|
|
|
|
2016-11-24 01:50:57 +03:00
|
|
|
beforeEach(function () {
|
|
|
|
this.set('baseUrl', 'http://localhost:2368');
|
|
|
|
});
|
2015-09-16 20:02:06 +03:00
|
|
|
|
2016-11-24 01:50:57 +03:00
|
|
|
it('renders', function () {
|
|
|
|
this.set('navItem', NavItem.create({label: 'Test', url: '/url'}));
|
2015-09-16 20:02:06 +03:00
|
|
|
|
2016-11-24 01:50:57 +03:00
|
|
|
this.render(hbs`{{gh-navitem navItem=navItem baseUrl=baseUrl}}`);
|
|
|
|
let $item = this.$('.gh-blognav-item');
|
2015-09-16 20:02:06 +03:00
|
|
|
|
2016-11-24 01:50:57 +03:00
|
|
|
expect($item.find('.gh-blognav-grab').length).to.equal(1);
|
|
|
|
expect($item.find('.gh-blognav-label').length).to.equal(1);
|
|
|
|
expect($item.find('.gh-blognav-url').length).to.equal(1);
|
|
|
|
expect($item.find('.gh-blognav-delete').length).to.equal(1);
|
2015-09-16 20:02:06 +03:00
|
|
|
|
2016-11-24 01:50:57 +03:00
|
|
|
// doesn't show any errors
|
|
|
|
expect($item.hasClass('gh-blognav-item--error')).to.be.false;
|
|
|
|
expect($item.find('.error').length).to.equal(0);
|
|
|
|
expect($item.find('.response:visible').length).to.equal(0);
|
|
|
|
});
|
2015-09-16 20:02:06 +03:00
|
|
|
|
2016-11-24 01:50:57 +03:00
|
|
|
it('doesn\'t show drag handle for new items', function () {
|
|
|
|
this.set('navItem', NavItem.create({label: 'Test', url: '/url', isNew: true}));
|
2015-09-16 20:02:06 +03:00
|
|
|
|
2016-11-24 01:50:57 +03:00
|
|
|
this.render(hbs`{{gh-navitem navItem=navItem baseUrl=baseUrl}}`);
|
|
|
|
let $item = this.$('.gh-blognav-item');
|
2015-09-16 20:02:06 +03:00
|
|
|
|
2016-11-24 01:50:57 +03:00
|
|
|
expect($item.find('.gh-blognav-grab').length).to.equal(0);
|
|
|
|
});
|
2015-09-16 20:02:06 +03:00
|
|
|
|
2016-11-24 01:50:57 +03:00
|
|
|
it('shows add button for new items', function () {
|
|
|
|
this.set('navItem', NavItem.create({label: 'Test', url: '/url', isNew: true}));
|
2015-09-16 20:02:06 +03:00
|
|
|
|
2016-11-24 01:50:57 +03:00
|
|
|
this.render(hbs`{{gh-navitem navItem=navItem baseUrl=baseUrl}}`);
|
|
|
|
let $item = this.$('.gh-blognav-item');
|
2015-09-16 20:02:06 +03:00
|
|
|
|
2016-11-24 01:50:57 +03:00
|
|
|
expect($item.find('.gh-blognav-add').length).to.equal(1);
|
|
|
|
expect($item.find('.gh-blognav-delete').length).to.equal(0);
|
|
|
|
});
|
2015-09-16 20:02:06 +03:00
|
|
|
|
2016-11-24 01:50:57 +03:00
|
|
|
it('triggers delete action', function () {
|
|
|
|
this.set('navItem', NavItem.create({label: 'Test', url: '/url'}));
|
2015-09-16 20:02:06 +03:00
|
|
|
|
2016-11-24 01:50:57 +03:00
|
|
|
let deleteActionCallCount = 0;
|
|
|
|
this.on('deleteItem', (navItem) => {
|
|
|
|
expect(navItem).to.equal(this.get('navItem'));
|
|
|
|
deleteActionCallCount++;
|
2015-09-16 20:02:06 +03:00
|
|
|
});
|
|
|
|
|
2017-11-25 02:18:35 +03:00
|
|
|
this.render(hbs`{{gh-navitem navItem=navItem baseUrl=baseUrl deleteItem=(action "deleteItem")}}`);
|
2016-11-24 01:50:57 +03:00
|
|
|
this.$('.gh-blognav-delete').trigger('click');
|
2015-09-16 20:02:06 +03:00
|
|
|
|
2016-11-24 01:50:57 +03:00
|
|
|
expect(deleteActionCallCount).to.equal(1);
|
|
|
|
});
|
2015-09-16 20:02:06 +03:00
|
|
|
|
2016-11-24 01:50:57 +03:00
|
|
|
it('triggers add action', function () {
|
|
|
|
this.set('navItem', NavItem.create({label: 'Test', url: '/url', isNew: true}));
|
2015-09-16 20:02:06 +03:00
|
|
|
|
2016-11-24 01:50:57 +03:00
|
|
|
let addActionCallCount = 0;
|
|
|
|
this.on('add', () => {
|
|
|
|
addActionCallCount++;
|
2015-09-16 20:02:06 +03:00
|
|
|
});
|
|
|
|
|
2017-11-25 02:18:35 +03:00
|
|
|
this.render(hbs`{{gh-navitem navItem=navItem baseUrl=baseUrl addItem=(action "add")}}`);
|
2016-11-24 01:50:57 +03:00
|
|
|
this.$('.gh-blognav-add').trigger('click');
|
2015-09-16 20:02:06 +03:00
|
|
|
|
2016-11-24 01:50:57 +03:00
|
|
|
expect(addActionCallCount).to.equal(1);
|
|
|
|
});
|
2015-09-16 20:02:06 +03:00
|
|
|
|
2017-10-31 18:27:25 +03:00
|
|
|
it('triggers update url action', function () {
|
2016-11-24 01:50:57 +03:00
|
|
|
this.set('navItem', NavItem.create({label: 'Test', url: '/url'}));
|
2015-09-16 20:02:06 +03:00
|
|
|
|
2016-11-24 01:50:57 +03:00
|
|
|
let updateActionCallCount = 0;
|
|
|
|
this.on('update', () => {
|
|
|
|
updateActionCallCount++;
|
2015-09-16 20:02:06 +03:00
|
|
|
});
|
|
|
|
|
2017-11-25 02:18:35 +03:00
|
|
|
this.render(hbs`{{gh-navitem navItem=navItem baseUrl=baseUrl updateUrl=(action "update")}}`);
|
2016-11-24 01:50:57 +03:00
|
|
|
this.$('.gh-blognav-url input').trigger('blur');
|
2015-09-16 20:02:06 +03:00
|
|
|
|
2016-11-24 01:50:57 +03:00
|
|
|
expect(updateActionCallCount).to.equal(1);
|
|
|
|
});
|
2015-09-16 20:02:06 +03:00
|
|
|
|
2017-10-31 18:27:25 +03:00
|
|
|
it('triggers update label action', function () {
|
|
|
|
this.set('navItem', NavItem.create({label: 'Test', url: '/url'}));
|
|
|
|
|
|
|
|
let updateActionCallCount = 0;
|
|
|
|
this.on('update', () => {
|
|
|
|
updateActionCallCount++;
|
|
|
|
});
|
|
|
|
|
2017-11-25 02:18:35 +03:00
|
|
|
this.render(hbs`{{gh-navitem navItem=navItem baseUrl=baseUrl updateLabel=(action "update")}}`);
|
2017-10-31 18:27:25 +03:00
|
|
|
this.$('.gh-blognav-label input').trigger('blur');
|
|
|
|
|
|
|
|
expect(updateActionCallCount).to.equal(1);
|
|
|
|
});
|
|
|
|
|
2016-11-24 01:50:57 +03:00
|
|
|
it('displays inline errors', function () {
|
|
|
|
this.set('navItem', NavItem.create({label: '', url: ''}));
|
|
|
|
this.get('navItem').validate();
|
|
|
|
|
|
|
|
this.render(hbs`{{gh-navitem navItem=navItem baseUrl=baseUrl}}`);
|
|
|
|
let $item = this.$('.gh-blognav-item');
|
|
|
|
|
2017-01-31 22:27:11 +03:00
|
|
|
return wait().then(() => {
|
|
|
|
expect($item.hasClass('gh-blognav-item--error')).to.be.true;
|
|
|
|
expect($item.find('.gh-blognav-label').hasClass('error')).to.be.true;
|
|
|
|
expect($item.find('.gh-blognav-label .response').text().trim()).to.equal('You must specify a label');
|
|
|
|
expect($item.find('.gh-blognav-url').hasClass('error')).to.be.true;
|
|
|
|
expect($item.find('.gh-blognav-url .response').text().trim()).to.equal('You must specify a URL or relative path');
|
|
|
|
});
|
2016-11-24 01:50:57 +03:00
|
|
|
});
|
|
|
|
});
|