Merge pull request #2683 from lennerd/issue-2680

Return new tags when posts are created via API
This commit is contained in:
Hannah Wolfe 2014-05-03 19:54:24 +01:00
commit bfd7610e36
3 changed files with 48 additions and 11 deletions

View File

@ -129,11 +129,17 @@ posts = {
// #### Add // #### Add
// **takes:** a json object representing a post, // **takes:** a json object representing a post,
add: function add(postData) { add: function add(postData) {
var self = this; var self = this,
include;
// **returns:** a promise for the resulting post in a json object // **returns:** a promise for the resulting post in a json object
return canThis(this.user).create.post().then(function () { return canThis(this.user).create.post().then(function () {
return checkPostData(postData).then(function (checkedPostData) { return checkPostData(postData).then(function (checkedPostData) {
return dataProvider.Post.add(checkedPostData.posts[0], {user: self.user}); if (postData.include) {
include = prepareInclude(postData.include);
}
return dataProvider.Post.add(checkedPostData.posts[0], {user: self.user, include: include});
}).then(function (result) { }).then(function (result) {
var omitted = result.toJSON(); var omitted = result.toJSON();
if (!_.isNumber(omitted.author)) { if (!_.isNumber(omitted.author)) {

View File

@ -318,11 +318,12 @@ describe('Post API', function () {
describe('Add', function () { describe('Add', function () {
it('can create a new draft, publish post, update post', function (done) { it('can create a new draft, publish post, update post', function (done) {
var newTitle = 'My Post', var newTitle = 'My Post',
changedTitle = 'My Post changed', newTagName = 'My Tag',
publishedState = 'published', publishedState = 'published',
newPost = {posts: [{status: 'draft', title: newTitle, markdown: 'my post'}]}; newTag = {id: null, name: newTagName},
newPost = {posts: [{status: 'draft', title: newTitle, markdown: 'my post', tags: [newTag]}]};
request.post(testUtils.API.getApiQuery('posts/')) request.post(testUtils.API.getApiQuery('posts/?include=tags'))
.set('X-CSRF-Token', csrfToken) .set('X-CSRF-Token', csrfToken)
.send(newPost) .send(newPost)
.expect(200) .expect(200)
@ -334,11 +335,17 @@ describe('Post API', function () {
res.should.be.json; res.should.be.json;
var draftPost = res.body; var draftPost = res.body;
draftPost.posts.should.exist; draftPost.posts.should.exist;
draftPost.posts.length.should.be.above(0);
draftPost.posts[0].title.should.eql(newTitle); draftPost.posts[0].title.should.eql(newTitle);
draftPost.posts[0].status = publishedState; draftPost.posts[0].status = publishedState;
testUtils.API.checkResponse(draftPost.posts[0], 'post'); testUtils.API.checkResponse(draftPost.posts[0], 'post');
request.put(testUtils.API.getApiQuery('posts/' + draftPost.posts[0].id + '/')) draftPost.posts[0].tags.should.exist;
draftPost.posts[0].tags.length.should.be.above(0);
draftPost.posts[0].tags[0].name.should.eql(newTagName);
testUtils.API.checkResponse(draftPost.posts[0].tags[0], 'tag');
request.put(testUtils.API.getApiQuery('posts/' + draftPost.posts[0].id + '/?include=tags'))
.set('X-CSRF-Token', csrfToken) .set('X-CSRF-Token', csrfToken)
.send(draftPost) .send(draftPost)
.expect(200) .expect(200)
@ -351,13 +358,20 @@ describe('Post API', function () {
_.has(res.headers, 'x-cache-invalidate').should.equal(true); _.has(res.headers, 'x-cache-invalidate').should.equal(true);
res.headers['x-cache-invalidate'].should.eql('/, /page/*, /rss/, /rss/*, /tag/*, /' + publishedPost.posts[0].slug + '/'); res.headers['x-cache-invalidate'].should.eql('/, /page/*, /rss/, /rss/*, /tag/*, /' + publishedPost.posts[0].slug + '/');
res.should.be.json; res.should.be.json;
publishedPost.should.exist; publishedPost.should.exist;
publishedPost.posts.should.exist; publishedPost.posts.should.exist;
publishedPost.posts.length.should.be.above(0);
publishedPost.posts[0].title.should.eql(newTitle); publishedPost.posts[0].title.should.eql(newTitle);
publishedPost.posts[0].status.should.eql(publishedState); publishedPost.posts[0].status.should.eql(publishedState);
testUtils.API.checkResponse(publishedPost.posts[0], 'post'); testUtils.API.checkResponse(publishedPost.posts[0], 'post');
request.put(testUtils.API.getApiQuery('posts/' + publishedPost.posts[0].id + '/')) publishedPost.posts[0].tags.should.exist;
publishedPost.posts[0].tags.length.should.be.above(0);
publishedPost.posts[0].tags[0].name.should.eql(newTagName);
testUtils.API.checkResponse(publishedPost.posts[0].tags[0], 'tag');
request.put(testUtils.API.getApiQuery('posts/' + publishedPost.posts[0].id + '/?include=tags'))
.set('X-CSRF-Token', csrfToken) .set('X-CSRF-Token', csrfToken)
.send(publishedPost) .send(publishedPost)
.expect(200) .expect(200)
@ -369,10 +383,18 @@ describe('Post API', function () {
var updatedPost = res.body; var updatedPost = res.body;
_.has(res.headers, 'x-cache-invalidate').should.equal(false); _.has(res.headers, 'x-cache-invalidate').should.equal(false);
res.should.be.json; res.should.be.json;
updatedPost.should.exist; updatedPost.should.exist;
updatedPost.posts.should.exist; updatedPost.posts.should.exist;
updatedPost.posts.length.should.be.above(0);
updatedPost.posts[0].title.should.eql(newTitle); updatedPost.posts[0].title.should.eql(newTitle);
testUtils.API.checkResponse(updatedPost.posts[0], 'post'); testUtils.API.checkResponse(updatedPost.posts[0], 'post');
updatedPost.posts[0].tags.should.exist;
updatedPost.posts[0].tags.length.should.be.above(0);
updatedPost.posts[0].tags[0].name.should.eql(newTagName);
testUtils.API.checkResponse(updatedPost.posts[0].tags[0], 'tag');
done(); done();
}); });
}); });

View File

@ -30,10 +30,10 @@ describe('Post API', function () {
}, done); }, done);
}); });
it('browse', function (done) { it('can browse', function (done) {
PostAPI.browse().then(function (results) { PostAPI.browse().then(function (results) {
should.exist(results); should.exist(results);
testUtils.API.checkResponse(results, 'posts'); testUtils.API.checkResponse(results, 'posts');
should.exist(results.posts); should.exist(results.posts);
results.posts.length.should.be.above(0); results.posts.length.should.be.above(0);
testUtils.API.checkResponse(results.posts[0], 'post'); testUtils.API.checkResponse(results.posts[0], 'post');
@ -41,7 +41,7 @@ describe('Post API', function () {
}).then(null, done); }).then(null, done);
}); });
it('read', function (done) { it('can read', function (done) {
var firstPost; var firstPost;
PostAPI.browse().then(function (results) { PostAPI.browse().then(function (results) {
@ -49,10 +49,19 @@ describe('Post API', function () {
should.exist(results.posts); should.exist(results.posts);
results.posts.length.should.be.above(0); results.posts.length.should.be.above(0);
firstPost = results.posts[0]; firstPost = results.posts[0];
return PostAPI.read({slug: firstPost.slug}); return PostAPI.read({slug: firstPost.slug, include: 'tags'});
}).then(function (found) { }).then(function (found) {
var post;
should.exist(found); should.exist(found);
testUtils.API.checkResponse(found.posts[0], 'post'); testUtils.API.checkResponse(found.posts[0], 'post');
post = found.posts[0];
should.exist(post.tags);
post.tags.length.should.be.above(0);
testUtils.API.checkResponse(post.tags[0], 'tag');
done(); done();
}).then(null, done); }).then(null, done);
}); });