Files
piratepoet/mailpoet/tests/javascript-newsletter-editor/newsletter-editor/components/content.spec.js
Jan Jakes d664f60e4b Rename all non-snake-case JS/TS imports
[MAILPOET-4938]
2023-10-02 13:05:20 +02:00

140 lines
3.7 KiB
JavaScript

import { App } from 'newsletter-editor/app';
import { ContentComponent } from 'newsletter-editor/components/content';
const expect = global.expect;
const sinon = global.sinon;
const Backbone = global.Backbone;
const _ = global._;
describe('Content', function () {
describe('newsletter model', function () {
var model;
beforeEach(function () {
model = new ContentComponent.NewsletterModel({
body: {
globalStyles: {
style1: 'style1Value',
style2: 'style2Value',
},
content: {
data1: 'data1Value',
data2: 'data2Value',
},
},
subject: 'my test subject',
});
});
it('triggers autosave on change', function () {
var mock = sinon
.mock({ trigger: function () {} })
.expects('trigger')
.once()
.withArgs('autoSave');
global.stubChannel(App, {
trigger: mock,
});
model.set('subject', 'another test subject');
mock.verify();
});
it('does not include styles and content properties in its JSON', function () {
var json = model.toJSON();
expect(json).to.deep.equal({ subject: 'my test subject' });
});
describe('toJSON()', function () {
it('will only contain properties modifiable by the editor', function () {
var json;
model = new ContentComponent.NewsletterModel({
id: 19,
subject: 'some subject',
preheader: 'some preheader',
segments: [1, 2, 3],
modified_at: '2000-01-01 12:01:02',
someField: 'someValue',
});
json = model.toJSON();
expect(json.id).to.equal(19);
expect(json.subject).to.equal('some subject');
expect(json.preheader).to.equal('some preheader');
expect(json).to.not.include.keys(
'segments',
'modified_at',
'someField',
);
});
});
});
describe('block types', function () {
it('registers a block type view and model', function () {
var blockModel = new Backbone.SuperModel();
var blockView = new Backbone.View();
ContentComponent.registerBlockType('testType', {
blockModel: blockModel,
blockView: blockView,
});
expect(ContentComponent.getBlockTypeModel('testType')).to.deep.equal(
blockModel,
);
expect(ContentComponent.getBlockTypeView('testType')).to.deep.equal(
blockView,
);
});
});
describe('transformation to json', function () {
it('includes content, globalStyles and initial newsletter fields', function () {
var json;
var dataField = {
containerModelField: 'containerModelValue',
};
var stylesField = {
globalStylesField: 'globalStylesValue',
};
var newsletterFields = {
subject: 'test newsletter subject',
};
var blockDefaults = {
button: {},
};
App._contentContainer = {
toJSON: function () {
return dataField;
},
};
App.getGlobalStyles = function () {
return {
toJSON: function () {
return stylesField;
},
};
};
App.getNewsletter = function () {
return {
toJSON: function () {
return newsletterFields;
},
};
};
App.getConfig().set('blockDefaults', blockDefaults);
json = ContentComponent.toJSON();
expect(json).to.deep.equal(
_.extend(
{
body: {
content: dataField,
globalStyles: stylesField,
blockDefaults: blockDefaults,
},
},
newsletterFields,
),
);
});
});
});