mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-01-05 01:40:21 +03:00
Added default_content_visibility flag for content gating (#11163)
no issue - Added 'labs' flag settings test - Added test for default_content_visibility flag - Default post's visibility takes into account values set in default_content_visibility setting
This commit is contained in:
parent
ff13821b27
commit
80f7e0b19e
@ -8,6 +8,7 @@ const common = require('../lib/common');
|
|||||||
const htmlToText = require('html-to-text');
|
const htmlToText = require('html-to-text');
|
||||||
const ghostBookshelf = require('./base');
|
const ghostBookshelf = require('./base');
|
||||||
const config = require('../config');
|
const config = require('../config');
|
||||||
|
const settingsCache = require('../services/settings/cache');
|
||||||
const converters = require('../lib/mobiledoc/converters');
|
const converters = require('../lib/mobiledoc/converters');
|
||||||
const relations = require('./relations');
|
const relations = require('./relations');
|
||||||
const MOBILEDOC_REVISIONS_COUNT = 10;
|
const MOBILEDOC_REVISIONS_COUNT = 10;
|
||||||
@ -40,12 +41,18 @@ Post = ghostBookshelf.Model.extend({
|
|||||||
* 2. model events e.g. "post.published" are using the inserted resource, not the fetched resource
|
* 2. model events e.g. "post.published" are using the inserted resource, not the fetched resource
|
||||||
*/
|
*/
|
||||||
defaults: function defaults() {
|
defaults: function defaults() {
|
||||||
|
let visibility = 'public';
|
||||||
|
|
||||||
|
if (settingsCache.get('labs') && (settingsCache.get('labs').members === true) && settingsCache.get('labs').default_content_visibility) {
|
||||||
|
visibility = settingsCache.get('labs').default_content_visibility;
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
uuid: uuid.v4(),
|
uuid: uuid.v4(),
|
||||||
status: 'draft',
|
status: 'draft',
|
||||||
featured: false,
|
featured: false,
|
||||||
page: false,
|
page: false,
|
||||||
visibility: 'public'
|
visibility: visibility
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -150,6 +150,10 @@ describe('Settings API', function () {
|
|||||||
{
|
{
|
||||||
key: 'twitter_description',
|
key: 'twitter_description',
|
||||||
value: 'twitter description'
|
value: 'twitter description'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'labs',
|
||||||
|
value: '{"subscribers":false,"members":true,"default_content_visibility":"paid"}'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
@ -214,6 +218,9 @@ describe('Settings API', function () {
|
|||||||
putBody.settings[12].key.should.eql('twitter_description');
|
putBody.settings[12].key.should.eql('twitter_description');
|
||||||
should.equal(putBody.settings[12].value, 'twitter description');
|
should.equal(putBody.settings[12].value, 'twitter description');
|
||||||
|
|
||||||
|
putBody.settings[13].key.should.eql('labs');
|
||||||
|
should.equal(putBody.settings[13].value, '{"subscribers":false,"members":true,"default_content_visibility":"paid"}');
|
||||||
|
|
||||||
localUtils.API.checkResponse(putBody, 'settings');
|
localUtils.API.checkResponse(putBody, 'settings');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
@ -8,6 +8,7 @@ var should = require('should'),
|
|||||||
urlService = require('../../../frontend/services/url'),
|
urlService = require('../../../frontend/services/url'),
|
||||||
ghostBookshelf = require('../../../server/models/base'),
|
ghostBookshelf = require('../../../server/models/base'),
|
||||||
models = require('../../../server/models'),
|
models = require('../../../server/models'),
|
||||||
|
settingsCache = require('../../../server/services/settings/cache'),
|
||||||
common = require('../../../server/lib/common'),
|
common = require('../../../server/lib/common'),
|
||||||
configUtils = require('../../utils/configUtils'),
|
configUtils = require('../../utils/configUtils'),
|
||||||
DataGenerator = testUtils.DataGenerator,
|
DataGenerator = testUtils.DataGenerator,
|
||||||
@ -747,6 +748,81 @@ describe('Post Model', function () {
|
|||||||
(!!createdPost.get('page')).should.equal(false);
|
(!!createdPost.get('page')).should.equal(false);
|
||||||
|
|
||||||
should.equal(createdPost.get('locale'), null);
|
should.equal(createdPost.get('locale'), null);
|
||||||
|
should.equal(createdPost.get('visibility'), 'public');
|
||||||
|
|
||||||
|
// testing for nulls
|
||||||
|
(createdPost.get('feature_image') === null).should.equal(true);
|
||||||
|
(createdPost.get('meta_title') === null).should.equal(true);
|
||||||
|
(createdPost.get('meta_description') === null).should.equal(true);
|
||||||
|
|
||||||
|
createdPost.get('created_at').should.be.above(new Date(0).getTime());
|
||||||
|
createdPost.get('created_by').should.equal(testUtils.DataGenerator.Content.users[0].id);
|
||||||
|
createdPost.get('author_id').should.equal(testUtils.DataGenerator.Content.users[0].id);
|
||||||
|
createdPost.has('author').should.equal(false);
|
||||||
|
createdPost.get('created_by').should.equal(createdPost.get('author_id'));
|
||||||
|
createdPost.get('updated_at').should.be.above(new Date(0).getTime());
|
||||||
|
createdPost.get('updated_by').should.equal(testUtils.DataGenerator.Content.users[0].id);
|
||||||
|
should.equal(createdPost.get('published_at'), null);
|
||||||
|
should.equal(createdPost.get('published_by'), null);
|
||||||
|
|
||||||
|
createdPostUpdatedDate = createdPost.get('updated_at');
|
||||||
|
|
||||||
|
Object.keys(eventsTriggered).length.should.eql(2);
|
||||||
|
should.exist(eventsTriggered['post.added']);
|
||||||
|
should.exist(eventsTriggered['user.attached']);
|
||||||
|
|
||||||
|
// Set the status to published to check that `published_at` is set.
|
||||||
|
return createdPost.save({status: 'published'}, context);
|
||||||
|
}).then(function (publishedPost) {
|
||||||
|
publishedPost.get('published_at').should.be.instanceOf(Date);
|
||||||
|
publishedPost.get('published_by').should.equal(testUtils.DataGenerator.Content.users[0].id);
|
||||||
|
publishedPost.get('updated_at').should.be.instanceOf(Date);
|
||||||
|
publishedPost.get('updated_by').should.equal(testUtils.DataGenerator.Content.users[0].id);
|
||||||
|
publishedPost.get('updated_at').should.not.equal(createdPostUpdatedDate);
|
||||||
|
|
||||||
|
Object.keys(eventsTriggered).length.should.eql(4);
|
||||||
|
should.exist(eventsTriggered['post.published']);
|
||||||
|
should.exist(eventsTriggered['post.edited']);
|
||||||
|
|
||||||
|
done();
|
||||||
|
}).catch(done);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can add, default visibility is taken from settings cache', function (done) {
|
||||||
|
var originalSettingsCacheGetFn = settingsCache.get;
|
||||||
|
sinon.stub(settingsCache, 'get').callsFake(function (key, options) {
|
||||||
|
if (key === 'labs') {
|
||||||
|
return {
|
||||||
|
members: true,
|
||||||
|
default_content_visibility: 'paid'
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return originalSettingsCacheGetFn(key, options);
|
||||||
|
});
|
||||||
|
|
||||||
|
var createdPostUpdatedDate,
|
||||||
|
newPost = testUtils.DataGenerator.forModel.posts[2],
|
||||||
|
newPostDB = testUtils.DataGenerator.Content.posts[2];
|
||||||
|
|
||||||
|
models.Post.add(newPost, _.merge({withRelated: ['author']}, context)).then(function (createdPost) {
|
||||||
|
return models.Post.findOne({id: createdPost.id, status: 'all'});
|
||||||
|
}).then(function (createdPost) {
|
||||||
|
should.exist(createdPost);
|
||||||
|
createdPost.has('uuid').should.equal(true);
|
||||||
|
createdPost.get('status').should.equal('draft');
|
||||||
|
createdPost.get('title').should.equal(newPost.title, 'title is correct');
|
||||||
|
createdPost.get('mobiledoc').should.equal(newPost.mobiledoc, 'mobiledoc is correct');
|
||||||
|
createdPost.has('html').should.equal(true);
|
||||||
|
createdPost.get('html').should.equal(newPostDB.html);
|
||||||
|
createdPost.has('plaintext').should.equal(true);
|
||||||
|
createdPost.get('plaintext').should.match(/^testing/);
|
||||||
|
createdPost.get('slug').should.equal(newPostDB.slug + '-2');
|
||||||
|
(!!createdPost.get('featured')).should.equal(false);
|
||||||
|
(!!createdPost.get('page')).should.equal(false);
|
||||||
|
|
||||||
|
should.equal(createdPost.get('locale'), null);
|
||||||
|
should.equal(createdPost.get('visibility'), 'paid');
|
||||||
|
|
||||||
// testing for nulls
|
// testing for nulls
|
||||||
(createdPost.get('feature_image') === null).should.equal(true);
|
(createdPost.get('feature_image') === null).should.equal(true);
|
||||||
|
Loading…
Reference in New Issue
Block a user