Add tests for Wordpress component, fix ALC/Posts endpoint calls

This commit is contained in:
Tautvidas Sipavičius
2015-09-07 18:55:05 +03:00
parent 2aac4f2a70
commit a25a8f2560
4 changed files with 178 additions and 24 deletions

View File

@ -7,11 +7,11 @@
* block settings view.
*/
define([
'newsletter_editor/App',
'backbone',
'backbone.marionette',
'mailpoet',
], function(EditorApplication, Backbone, Marionette, MailPoet) {
'newsletter_editor/App',
'newsletter_editor/components/wordpress',
], function(Backbone, Marionette, EditorApplication, WordpressComponent) {
EditorApplication.module("blocks.automatedLatestContent", function(Module, App, Backbone, Marionette, $, _) {
"use strict";
@ -156,7 +156,7 @@ define([
var that = this;
// Dynamically update available post types
App.module('components.wordpress').getPostTypes().done(_.bind(this._updateContentTypes, this));
WordpressComponent.getPostTypes().done(_.bind(this._updateContentTypes, this));
this.$('.mailpoet_automated_latest_content_categories_and_tags').select2({
multiple: true,
@ -164,10 +164,10 @@ define([
query: function(options) {
var taxonomies = [];
// Delegate data loading to our own endpoints
EditorApplication.module('components.wordpress').getTaxonomies(that.model.get('contentType')).then(function(tax) {
WordpressComponent.getTaxonomies(that.model.get('contentType')).then(function(tax) {
taxonomies = tax;
// Fetch available terms based on the list of taxonomies already fetched
var promise = EditorApplication.module('components.wordpress').getTerms({
var promise = WordpressComponent.getTerms({
search: options.term,
taxonomies: _.keys(taxonomies)
}).then(function(terms) {

View File

@ -11,13 +11,13 @@
* block settings view.
*/
define([
'newsletter_editor/App',
'backbone',
'backbone.marionette',
'backbone.radio',
'mailpoet',
'ajax',
], function(EditorApplication, Backbone, Marionette, Radio, MailPoet) {
'newsletter_editor/App',
'newsletter_editor/components/wordpress',
], function(Backbone, Marionette, Radio, MailPoet, EditorApplication, WordpressComponent) {
EditorApplication.module("blocks.posts", function(Module, App, Backbone, Marionette, $, _) {
"use strict";
@ -257,7 +257,7 @@ define([
var that = this;
// Dynamically update available post types
App.module('components.wordpress').getPostTypes().done(_.bind(this._updateContentTypes, this));
WordpressComponent.getPostTypes().done(_.bind(this._updateContentTypes, this));
this.$('.mailpoet_posts_categories_and_tags').select2({
multiple: true,
@ -265,10 +265,10 @@ define([
query: function(options) {
var taxonomies = [];
// Delegate data loading to our own endpoints
EditorApplication.module('components.wordpress').getTaxonomies(that.model.get('contentType')).then(function(tax) {
WordpressComponent.getTaxonomies(that.model.get('contentType')).then(function(tax) {
taxonomies = tax;
// Fetch available terms based on the list of taxonomies already fetched
var promise = EditorApplication.module('components.wordpress').getTerms({
var promise = WordpressComponent.getTerms({
search: options.term,
taxonomies: _.keys(taxonomies)
}).then(function(terms) {

View File

@ -1,6 +1,7 @@
define([
'newsletter_editor/App',
'mailpoet'
'mailpoet',
'ajax'
], function(EditorApplication, MailPoet) {
var Module = {};

View File

@ -4,25 +4,178 @@ define([
], function(EditorApplication, Wordpress) {
describe('getPostTypes', function() {
var injector;
beforeEach(function() {
injector = require('amd-inject-loader!newsletter_editor/components/wordpress');
});
it('fetches post types from the server', function() {
var injector = require('amd-inject-loader!newsletter_editor/components/wordpress');
var module = injector({
"mailpoet": {
Ajax: {
post: function() {
var deferred = jQuery.Deferred();
deferred.resolve({
'post': 'val1',
'page': 'val2',
});
return deferred;
}
},
},
});
module.getPostTypes().done(function(types) {
expect(types).to.eql(['val1', 'val2']);
});
});
it('caches results', function() {
var deferred = jQuery.Deferred(),
mock = sinon.mock({ post: function() {} }).expects('post').once().returns(deferred),
module = injector({
"mailpoet": {
Ajax: {
post: mock,
},
},
});
deferred.resolve({
'post': 'val1',
'page': 'val2',
});
module.getPostTypes();
module.getPostTypes();
mock.verify();
});
});
describe('getTaxonomies', function() {
var injector;
beforeEach(function() {
injector = require('amd-inject-loader!newsletter_editor/components/wordpress');
});
it('sends post type to endpoint', function() {
var spy,
post = function(params) {
var deferred = jQuery.Deferred();
deferred.resolve({
'category': 'val1',
'post_tag': 'val2',
});
return deferred;
},
module;
spy = sinon.spy(post);
module = injector({
"mailpoet": {
Ajax: {
post: function() {
var deferred = jQuery.Deferred();
deferred.resolve({
'post': 'val1',
'page': 'val2',
});
return deferred;
}
post: spy,
},
},
});
module.getPostTypes().done(function(types) {
expect(types).to.include.members(['val1', 'val2']);
module.getTaxonomies('post');
expect(spy.args[0][0].data.postType).to.equal('post');
});
it('fetches post types from the server', function() {
var module = injector({
"mailpoet": {
Ajax: {
post: function() {
var deferred = jQuery.Deferred();
deferred.resolve({ 'category': 'val1' });
return deferred;
}
},
},
});
module.getTaxonomies('page').done(function(types) {
expect(types).to.eql({ 'category': 'val1' });
});
});
it('caches results', function() {
var deferred = jQuery.Deferred(),
mock = sinon.mock({ post: function() {} }).expects('post').once().returns(deferred),
module = injector({
"mailpoet": {
Ajax: {
post: mock,
},
},
});
deferred.resolve({ 'category': 'val1' });
module.getTaxonomies('page');
module.getTaxonomies('page');
mock.verify();
});
});
describe('getTerms', function() {
var injector;
beforeEach(function() {
injector = require('amd-inject-loader!newsletter_editor/components/wordpress');
});
it('sends terms to endpoint', function() {
var spy,
post = function(params) {
var deferred = jQuery.Deferred();
deferred.resolve({});
return deferred;
},
module;
spy = sinon.spy(post);
module = injector({
"mailpoet": {
Ajax: {
post: spy,
},
},
});
module.getTerms({
taxonomies: ['category', 'post_tag'],
});
expect(spy.args[0][0].data.taxonomies).to.eql(['category', 'post_tag']);
});
it('fetches terms from the server', function() {
var module = injector({
"mailpoet": {
Ajax: {
post: function() {
var deferred = jQuery.Deferred();
deferred.resolve({ 'term1': 'term1val1', 'term2': 'term2val2' });
return deferred;
}
},
},
});
module.getTerms({ taxonomies: ['category'] }).done(function(types) {
expect(types).to.eql({ 'term1': 'term1val1', 'term2': 'term2val2' });
});
});
it('caches results', function() {
var deferred = jQuery.Deferred(),
mock = sinon.mock({ post: function() {} }).expects('post').once().returns(deferred),
module = injector({
"mailpoet": {
Ajax: {
post: mock,
},
},
});
deferred.resolve({ 'term1': 'term1val1', 'term2': 'term2val2' });
module.getTerms({ taxonomies: ['category'] });
module.getTerms({ taxonomies: ['category'] });
mock.verify();
});
});
});