422 lines
16 KiB
JavaScript
422 lines
16 KiB
JavaScript
define('test/newsletter_editor/blocks/button', [
|
|
'newsletter_editor/App',
|
|
'newsletter_editor/blocks/button'
|
|
], function(EditorApplication) {
|
|
|
|
describe("Button", function () {
|
|
describe("model", function () {
|
|
var model;
|
|
|
|
beforeEach(function () {
|
|
global.stubChannel(EditorApplication);
|
|
global.stubConfig(EditorApplication, {
|
|
blockDefaults: {},
|
|
});
|
|
model = new (EditorApplication.module('blocks.button').ButtonBlockModel)();
|
|
});
|
|
|
|
afterEach(function () {
|
|
delete EditorApplication.getChannel;
|
|
});
|
|
|
|
it("has a button type", function () {
|
|
expect(model.get('type')).to.equal('button');
|
|
});
|
|
|
|
it("has a label", function () {
|
|
expect(model.get('text')).to.be.a('string');
|
|
});
|
|
|
|
it("has a url", function () {
|
|
expect(model.get('url')).to.be.a('string');
|
|
});
|
|
|
|
it("has a block background color", function () {
|
|
expect(model.get('styles.block.backgroundColor')).to.match(/^(#[abcdef0-9]{6})|transparent$/);
|
|
});
|
|
|
|
it("has a block border color", function () {
|
|
expect(model.get('styles.block.borderColor')).to.match(/^(#[abcdef0-9]{6})|transparent$/);
|
|
});
|
|
|
|
it("has a block border width", function () {
|
|
expect(model.get('styles.block.borderWidth')).to.match(/^\d+px$/);
|
|
});
|
|
|
|
it("has block border radius", function () {
|
|
expect(model.get('styles.block.borderRadius')).to.match(/^\d+px$/);
|
|
});
|
|
|
|
it("has block border style", function () {
|
|
expect(model.get('styles.block.borderStyle')).to.equal('solid');
|
|
});
|
|
|
|
it("has a text color", function () {
|
|
expect(model.get('styles.block.fontColor')).to.match(/^(#[abcdef0-9]{6})|transparent$/);
|
|
});
|
|
|
|
it("has a text font family", function () {
|
|
expect(model.get('styles.block.fontFamily')).to.be.a('string');
|
|
});
|
|
|
|
it("has a text size", function () {
|
|
expect(model.get('styles.block.fontSize')).to.match(/^\d+px$/);
|
|
});
|
|
|
|
it("has width", function () {
|
|
expect(model.get('styles.block.width')).to.match(/^\d+px$/);
|
|
});
|
|
|
|
it("has line height", function () {
|
|
expect(model.get('styles.block.lineHeight')).to.match(/^\d+px$/);
|
|
});
|
|
|
|
it("changes attributes with set", function () {
|
|
var newText = 'Some new text';
|
|
model.set('text', newText);
|
|
expect(model.get('text')).to.equal(newText);
|
|
});
|
|
|
|
it("triggers autosave if any attribute changes", function () {
|
|
var mock = sinon.mock().exactly(11).withArgs('autoSave');
|
|
EditorApplication.getChannel = sinon.stub().returns({
|
|
trigger: mock,
|
|
});
|
|
model.set('text', 'some other text');
|
|
model.set('url', 'some url');
|
|
model.set('styles.block.backgroundColor', '#123456');
|
|
model.set('styles.block.borderColor', '#234567');
|
|
model.set('styles.block.borderWidth', '3px');
|
|
model.set('styles.block.borderRadius', '8px');
|
|
model.set('styles.block.width', '400px');
|
|
model.set('styles.block.lineHeight', '100px');
|
|
model.set('styles.block.fontColor', '#345678');
|
|
model.set('styles.block.fontFamily', 'Some other style');
|
|
model.set('styles.block.fontSize', '10px');
|
|
mock.verify();
|
|
});
|
|
|
|
it("uses defaults from config when they are set", function () {
|
|
global.stubConfig(EditorApplication, {
|
|
blockDefaults: {
|
|
button: {
|
|
text: 'Some new text',
|
|
url: 'http://somenewurl.com',
|
|
styles: {
|
|
block: {
|
|
backgroundColor: '#123456',
|
|
borderColor: '#234567',
|
|
borderWidth: '11px',
|
|
borderRadius: '13px',
|
|
borderStyle: 'solid',
|
|
width: '371px',
|
|
lineHeight: '107px',
|
|
fontColor: '#345678',
|
|
fontFamily: 'Tahoma',
|
|
fontSize: '30px',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|
|
var model = new (EditorApplication.module('blocks.button').ButtonBlockModel)();
|
|
|
|
expect(model.get('text')).to.equal('Some new text');
|
|
expect(model.get('url')).to.equal('http://somenewurl.com');
|
|
expect(model.get('styles.block.backgroundColor')).to.equal('#123456');
|
|
expect(model.get('styles.block.borderColor')).to.equal('#234567');
|
|
expect(model.get('styles.block.borderWidth')).to.equal('11px');
|
|
expect(model.get('styles.block.borderRadius')).to.equal('13px');
|
|
expect(model.get('styles.block.borderStyle')).to.equal('solid');
|
|
expect(model.get('styles.block.width')).to.equal('371px');
|
|
expect(model.get('styles.block.lineHeight')).to.equal('107px');
|
|
expect(model.get('styles.block.fontColor')).to.equal('#345678');
|
|
expect(model.get('styles.block.fontFamily')).to.equal('Tahoma');
|
|
expect(model.get('styles.block.fontSize')).to.equal('30px');
|
|
});
|
|
});
|
|
|
|
describe('block view', function () {
|
|
var model;
|
|
|
|
beforeEach(function () {
|
|
global.stubChannel(EditorApplication);
|
|
model = new (EditorApplication.module('blocks.button').ButtonBlockModel)();
|
|
});
|
|
|
|
it('renders', function () {
|
|
var view = new (EditorApplication.module('blocks.button').ButtonBlockView)({model: model});
|
|
expect(view.render).to.not.throw();
|
|
expect(view.$('.mailpoet_editor_button')).to.have.length(1);
|
|
});
|
|
|
|
it('rerenders when attributes change', function () {
|
|
var view = new (EditorApplication.module('blocks.button').ButtonBlockView)({model: model});
|
|
view.render();
|
|
|
|
model.set('text', 'Some new text');
|
|
|
|
expect(view.$('.mailpoet_editor_button').text()).to.equal('Some new text');
|
|
});
|
|
|
|
describe('once rendered', function () {
|
|
var model, view;
|
|
|
|
before(function () {
|
|
global.stubChannel(EditorApplication);
|
|
model = new (EditorApplication.module('blocks.button').ButtonBlockModel)({
|
|
text: 'Some button',
|
|
url: 'http://example.org',
|
|
styles: {
|
|
block: {
|
|
backgroundColor: '#123456',
|
|
borderColor: '#234567',
|
|
borderWidth: '7px',
|
|
borderRadius: '8px',
|
|
borderStyle: 'solid',
|
|
width: '123px',
|
|
lineHeight: '45px',
|
|
fontColor: '#345678',
|
|
fontFamily: 'Arial',
|
|
fontSize: '12px',
|
|
},
|
|
},
|
|
});
|
|
view = new (EditorApplication.module('blocks.button').ButtonBlockView)({model: model});
|
|
view.render();
|
|
});
|
|
|
|
it('has a specified text', function () {
|
|
expect(view.$('.mailpoet_editor_button').text()).to.equal(model.get('text'));
|
|
});
|
|
|
|
it('has a specified button url', function () {
|
|
expect(view.$('.mailpoet_editor_button').attr('href')).to.equal(model.get('url'));
|
|
});
|
|
|
|
it('has a specified background color', function () {
|
|
// jQuery colors appear in rgb format, not hex6
|
|
expect(view.$('.mailpoet_editor_button').css('background-color')).to.equal('rgb(18, 52, 86)');
|
|
});
|
|
|
|
it('has a specified border color', function () {
|
|
expect(view.$('.mailpoet_editor_button').css('border-color')).to.equal(model.get('styles.block.borderColor'));
|
|
});
|
|
|
|
it('has a specified border width', function () {
|
|
expect(view.$('.mailpoet_editor_button').css('border-width')).to.equal(model.get('styles.block.borderWidth'));
|
|
});
|
|
|
|
it('has a specified border radius', function () {
|
|
expect(view.$('.mailpoet_editor_button').css('border-radius')).to.equal(model.get('styles.block.borderRadius'));
|
|
});
|
|
|
|
it('has a specified border style', function () {
|
|
expect(view.$('.mailpoet_editor_button').css('border-style')).to.equal(model.get('styles.block.borderStyle'));
|
|
});
|
|
|
|
it('has a specified width', function () {
|
|
expect(view.$('.mailpoet_editor_button').css('width')).to.equal(model.get('styles.block.width'));
|
|
});
|
|
|
|
it('has a specified line height', function () {
|
|
expect(view.$('.mailpoet_editor_button').css('lineHeight')).to.equal(model.get('styles.block.lineHeight'));
|
|
});
|
|
|
|
it('has a specified font color', function () {
|
|
// jQuery colors appear in rgb format, not hex6
|
|
expect(view.$('.mailpoet_editor_button').css('color')).to.equal('rgb(52, 86, 120)');
|
|
});
|
|
|
|
it('has a specified font family', function () {
|
|
expect(view.$('.mailpoet_editor_button').css('font-family')).to.equal(model.get('styles.block.fontFamily'));
|
|
});
|
|
|
|
it('has a specified font size', function () {
|
|
expect(view.$('.mailpoet_editor_button').css('font-size')).to.equal(model.get('styles.block.fontSize'));
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('block settings view', function () {
|
|
var model;
|
|
|
|
beforeEach(function () {
|
|
global.stubChannel(EditorApplication);
|
|
global.stubAvailableStyles(EditorApplication, {
|
|
fonts: ['Arial', 'Tahoma'],
|
|
headingSizes: ['16px', '20px'],
|
|
});
|
|
|
|
model = new (EditorApplication.module('blocks.button').ButtonBlockModel)({
|
|
type: 'button',
|
|
text: 'Some random text',
|
|
});
|
|
});
|
|
|
|
it('renders', function () {
|
|
var view = new (EditorApplication.module('blocks.button').ButtonBlockSettingsView)({model: model});
|
|
expect(view.render).to.not.throw();
|
|
});
|
|
|
|
describe('once rendered', function () {
|
|
var model, view;
|
|
before(function() {
|
|
global.stubChannel(EditorApplication);
|
|
global.stubConfig(EditorApplication);
|
|
global.stubAvailableStyles(EditorApplication, {
|
|
fonts: ['Arial', 'Tahoma'],
|
|
headingSizes: ['16px', '20px'],
|
|
});
|
|
});
|
|
|
|
beforeEach(function() {
|
|
model = new (EditorApplication.module('blocks.button').ButtonBlockModel)({
|
|
type: 'button',
|
|
text: 'Some random text',
|
|
});
|
|
view = new (EditorApplication.module('blocks.button').ButtonBlockSettingsView)({model: model});
|
|
|
|
view.render();
|
|
});
|
|
|
|
it('updates the model when text is changed', function () {
|
|
var newValue = 'something else';
|
|
|
|
view.$('.mailpoet_field_button_text').val(newValue).keyup();
|
|
|
|
expect(model.get('text')).to.equal(newValue);
|
|
});
|
|
|
|
it('updates the model when link is changed', function () {
|
|
var newValue = 'http://google.com/?q=123456';
|
|
|
|
view.$('.mailpoet_field_button_url').val(newValue).keyup();
|
|
|
|
expect(model.get('url')).to.equal(newValue);
|
|
});
|
|
|
|
it('updates the model when font color changes', function () {
|
|
var newValue = '#cccccc';
|
|
|
|
view.$('.mailpoet_field_button_font_color').val(newValue).change();
|
|
|
|
expect(model.get('styles.block.fontColor')).to.equal(newValue);
|
|
});
|
|
|
|
it('updates the model when font family changes', function () {
|
|
var newValue = 'Tahoma';
|
|
|
|
view.$('.mailpoet_field_button_font_family').val(newValue).change();
|
|
|
|
expect(model.get('styles.block.fontFamily')).to.equal(newValue);
|
|
});
|
|
|
|
it('updates the model when font size changes', function () {
|
|
var newValue = '20px';
|
|
view.$('.mailpoet_field_button_font_size').val(newValue).change();
|
|
expect(model.get('styles.block.fontSize')).to.equal(newValue);
|
|
});
|
|
|
|
it('updates the model when background color changes', function () {
|
|
var newValue = '#cccccc';
|
|
|
|
view.$('.mailpoet_field_button_background_color').val(newValue).change();
|
|
|
|
expect(model.get('styles.block.backgroundColor')).to.equal(newValue);
|
|
});
|
|
|
|
it('updates the model when border color changes', function () {
|
|
var newValue = '#cccccc';
|
|
|
|
view.$('.mailpoet_field_button_border_color').val(newValue).change();
|
|
|
|
expect(model.get('styles.block.borderColor')).to.equal(newValue);
|
|
});
|
|
|
|
it('updates the model when border width changes', function () {
|
|
view.$('.mailpoet_field_button_border_width').val('3').change();
|
|
expect(model.get('styles.block.borderWidth')).to.equal('3px');
|
|
});
|
|
it('updates the range slider when border width input changes', function () {
|
|
view.$('.mailpoet_field_button_border_width_input').val('5').keyup();
|
|
expect(view.$('.mailpoet_field_button_border_width').val()).to.equal('5');
|
|
});
|
|
it('updates the input when border width range slider changes', function () {
|
|
view.$('.mailpoet_field_button_border_width').val('4').change();
|
|
expect(view.$('.mailpoet_field_button_border_width_input').val()).to.equal('4');
|
|
});
|
|
|
|
it('updates the model when border radius changes', function () {
|
|
view.$('.mailpoet_field_button_border_radius').val('7').change();
|
|
expect(model.get('styles.block.borderRadius')).to.equal('7px');
|
|
});
|
|
it('updates the range slider when border radius input changes', function () {
|
|
view.$('.mailpoet_field_button_border_radius_input').val('7').keyup();
|
|
expect(view.$('.mailpoet_field_button_border_radius').val()).to.equal('7');
|
|
});
|
|
it('updates the input when border radius range slider changes', function () {
|
|
view.$('.mailpoet_field_button_border_radius').val('7').change();
|
|
expect(view.$('.mailpoet_field_button_border_radius_input').val()).to.equal('7');
|
|
});
|
|
|
|
it('updates the model when width changes', function () {
|
|
view.$('.mailpoet_field_button_width').val('127').change();
|
|
expect(model.get('styles.block.width')).to.equal('127px');
|
|
});
|
|
it('updates the range slider when width input changes', function () {
|
|
view.$('.mailpoet_field_button_width_input').val('127').keyup();
|
|
expect(view.$('.mailpoet_field_button_width').val()).to.equal('127');
|
|
});
|
|
it('updates the input when width range slider changes', function () {
|
|
view.$('.mailpoet_field_button_width').val('127').change();
|
|
expect(view.$('.mailpoet_field_button_width_input').val()).to.equal('127');
|
|
});
|
|
|
|
it('updates the model when line height changes', function () {
|
|
view.$('.mailpoet_field_button_line_height').val('37').change();
|
|
expect(model.get('styles.block.lineHeight')).to.equal('37px');
|
|
});
|
|
it('updates the range slider when line height input changes', function () {
|
|
view.$('.mailpoet_field_button_line_height_input').val('37').keyup();
|
|
expect(view.$('.mailpoet_field_button_line_height').val()).to.equal('37');
|
|
});
|
|
it('updates the input when line height range slider changes', function () {
|
|
view.$('.mailpoet_field_button_line_height').val('37').change();
|
|
expect(view.$('.mailpoet_field_button_line_height_input').val()).to.equal('37');
|
|
});
|
|
|
|
it('does not display link option when `hideLink` option is active', function() {
|
|
view = new (EditorApplication.module('blocks.button').ButtonBlockSettingsView)({
|
|
model: model,
|
|
renderOptions: {
|
|
hideLink: true,
|
|
},
|
|
});
|
|
view.render();
|
|
expect(view.$('.mailpoet_field_button_url').length).to.equal(0);
|
|
});
|
|
|
|
it('does not display "Apply to all" option when `hideApplyToAll` option is active', function() {
|
|
view = new (EditorApplication.module('blocks.button').ButtonBlockSettingsView)({
|
|
model: model,
|
|
renderOptions: {
|
|
hideApplyToAll: true,
|
|
},
|
|
});
|
|
view.render();
|
|
expect(view.$('.mailpoet_field_button_replace_all_styles').length).to.equal(0);
|
|
});
|
|
|
|
it.skip('closes the sidepanel after "Done" is clicked', function () {
|
|
var mock = sinon.mock().once();
|
|
global.MailPoet.Modal.cancel = mock;
|
|
view.$('.mailpoet_done_editing').click();
|
|
mock.verify();
|
|
delete(global.MailPoet.Modal.cancel);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|