mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-04-01 02:41:39 -05:00
Merge pull request #3363 from ErisDS/test-build
Refactor fixture use in tests
This commit is contained in:
commit
3fa2981c0e
34 changed files with 1581 additions and 1861 deletions
|
@ -53,7 +53,9 @@ backupDatabase = function backupDatabase() {
|
|||
};
|
||||
|
||||
// Check for whether data is needed to be bootstrapped or not
|
||||
init = function () {
|
||||
init = function (tablesOnly) {
|
||||
tablesOnly = tablesOnly || false;
|
||||
|
||||
var self = this;
|
||||
// There are 4 possibilities:
|
||||
// 1. The database exists and is up-to-date
|
||||
|
@ -92,7 +94,7 @@ init = function () {
|
|||
// 4. The database has not yet been created
|
||||
// Bring everything up from initial version.
|
||||
logInfo('Database initialisation required for version ' + versioning.getDefaultDatabaseVersion());
|
||||
return self.migrateUpFreshDb();
|
||||
return self.migrateUpFreshDb(tablesOnly);
|
||||
}
|
||||
// 3. The database exists but the currentVersion setting does not or cannot be understood
|
||||
// In this case the setting was missing or there was some other problem
|
||||
|
@ -113,15 +115,21 @@ reset = function () {
|
|||
};
|
||||
|
||||
// Only do this if we have no database at all
|
||||
migrateUpFreshDb = function () {
|
||||
var tables = _.map(schemaTables, function (table) {
|
||||
migrateUpFreshDb = function (tablesOnly) {
|
||||
var tableSequence,
|
||||
tables = _.map(schemaTables, function (table) {
|
||||
return function () {
|
||||
logInfo('Creating table: ' + table);
|
||||
return utils.createTable(table);
|
||||
};
|
||||
});
|
||||
logInfo('Creating tables...');
|
||||
return sequence(tables).then(function () {
|
||||
tableSequence = sequence(tables);
|
||||
|
||||
if (tablesOnly) {
|
||||
return tableSequence;
|
||||
}
|
||||
return tableSequence.then(function () {
|
||||
// Load the fixtures
|
||||
return fixtures.populate();
|
||||
}).then(function () {
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/*global describe, it, before, after */
|
||||
/*jshint expr:true*/
|
||||
var supertest = require('supertest'),
|
||||
express = require('express'),
|
||||
should = require('should'),
|
||||
|
@ -11,48 +12,34 @@ var supertest = require('supertest'),
|
|||
|
||||
|
||||
describe('DB API', function () {
|
||||
var user = testUtils.DataGenerator.forModel.users[0],
|
||||
accesstoken = '';
|
||||
var accesstoken = '';
|
||||
|
||||
before(function (done) {
|
||||
var app = express();
|
||||
app.set('disableLoginLimiter', true);
|
||||
|
||||
// starting ghost automatically populates the db
|
||||
// TODO: prevent db init, and manage bringing up the DB with fixtures ourselves
|
||||
ghost({app: app}).then(function (_httpServer) {
|
||||
httpServer = _httpServer;
|
||||
// request = supertest(app);
|
||||
request = supertest.agent(app);
|
||||
|
||||
testUtils.clearData()
|
||||
.then(function () {
|
||||
return testUtils.initData();
|
||||
})
|
||||
.then(function () {
|
||||
return testUtils.insertDefaultFixtures();
|
||||
})
|
||||
.then(function () {
|
||||
request.post('/ghost/api/v0.1/authentication/token/')
|
||||
.send({ grant_type: "password", username: user.email, password: user.password, client_id: "ghost-admin"})
|
||||
.expect('Content-Type', /json/)
|
||||
.expect(200)
|
||||
.end(function (err, res) {
|
||||
if (err) {
|
||||
return done(err);
|
||||
}
|
||||
var jsonResponse = res.body;
|
||||
testUtils.API.checkResponse(jsonResponse, 'accesstoken');
|
||||
accesstoken = jsonResponse.access_token;
|
||||
return done();
|
||||
});
|
||||
}).catch(done);
|
||||
}).then(function () {
|
||||
return testUtils.doAuth(request);
|
||||
}).then(function (token) {
|
||||
accesstoken = token;
|
||||
done();
|
||||
}).catch(function (e) {
|
||||
console.log('Ghost Error: ', e);
|
||||
console.log(e.stack);
|
||||
});
|
||||
});
|
||||
|
||||
after(function () {
|
||||
httpServer.close();
|
||||
after(function (done) {
|
||||
testUtils.clearData().then(function () {
|
||||
httpServer.close();
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('attaches the Content-Disposition header on export', function (done) {
|
||||
|
|
|
@ -1,55 +1,38 @@
|
|||
var supertest = require('supertest'),
|
||||
/*global describe, it, before, after */
|
||||
/*jshint expr:true*/
|
||||
var testUtils = require('../../../utils'),
|
||||
supertest = require('supertest'),
|
||||
express = require('express'),
|
||||
should = require('should'),
|
||||
_ = require('lodash'),
|
||||
testUtils = require('../../../utils'),
|
||||
|
||||
ghost = require('../../../../../core'),
|
||||
|
||||
httpServer,
|
||||
request,
|
||||
agent;
|
||||
request;
|
||||
|
||||
describe('Notifications API', function () {
|
||||
var user = testUtils.DataGenerator.forModel.users[0],
|
||||
accesstoken = '';
|
||||
var accesstoken = '';
|
||||
|
||||
before(function (done) {
|
||||
var app = express();
|
||||
app.set('disableLoginLimiter', true);
|
||||
|
||||
// starting ghost automatically populates the db
|
||||
// TODO: prevent db init, and manage bringing up the DB with fixtures ourselves
|
||||
ghost({app: app}).then(function (_httpServer) {
|
||||
httpServer = _httpServer;
|
||||
|
||||
request = supertest.agent(app);
|
||||
|
||||
testUtils.clearData()
|
||||
.then(function () {
|
||||
return testUtils.initData();
|
||||
})
|
||||
.then(function () {
|
||||
return testUtils.insertDefaultFixtures();
|
||||
})
|
||||
.then(function () {
|
||||
request.post('/ghost/api/v0.1/authentication/token/')
|
||||
.send({ grant_type: "password", username: user.email, password: user.password, client_id: "ghost-admin"})
|
||||
.expect('Content-Type', /json/)
|
||||
.expect(200)
|
||||
.end(function (err, res) {
|
||||
if (err) {
|
||||
return done(err);
|
||||
}
|
||||
var jsonResponse = res.body;
|
||||
testUtils.API.checkResponse(jsonResponse, 'accesstoken');
|
||||
accesstoken = jsonResponse.access_token;
|
||||
return done();
|
||||
});
|
||||
}, done);
|
||||
}).otherwise(function (e) {
|
||||
}).then(function () {
|
||||
return testUtils.doAuth(request);
|
||||
}).then(function (token) {
|
||||
accesstoken = token;
|
||||
done();
|
||||
}).catch(function (e) {
|
||||
console.log('Ghost Error: ', e);
|
||||
console.log(e.stack);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
after(function () {
|
||||
httpServer.close();
|
||||
|
@ -105,7 +88,7 @@ describe('Notifications API', function () {
|
|||
if (err) {
|
||||
return done(err);
|
||||
}
|
||||
|
||||
|
||||
var location = res.headers['location'];
|
||||
|
||||
var jsonResponse = res.body;
|
||||
|
@ -116,7 +99,7 @@ describe('Notifications API', function () {
|
|||
jsonResponse.notifications[0].type.should.equal(newNotification.type);
|
||||
jsonResponse.notifications[0].message.should.equal(newNotification.message);
|
||||
jsonResponse.notifications[0].status.should.equal(newNotification.status);
|
||||
|
||||
|
||||
// begin delete test
|
||||
request.del(location)
|
||||
.set('Authorization', 'Bearer ' + accesstoken)
|
||||
|
|
|
@ -1,63 +1,48 @@
|
|||
/*global describe, it, before, after */
|
||||
var supertest = require('supertest'),
|
||||
express = require('express'),
|
||||
/*jshint expr:true*/
|
||||
var testUtils = require('../../../utils'),
|
||||
should = require('should'),
|
||||
supertest = require('supertest'),
|
||||
express = require('express'),
|
||||
_ = require('lodash'),
|
||||
testUtils = require('../../../utils'),
|
||||
|
||||
ghost = require('../../../../../core'),
|
||||
|
||||
httpServer,
|
||||
request,
|
||||
agent;
|
||||
request;
|
||||
|
||||
|
||||
describe('Post API', function () {
|
||||
var user = testUtils.DataGenerator.forModel.users[0],
|
||||
accesstoken = '';
|
||||
var accesstoken = '';
|
||||
|
||||
before(function (done) {
|
||||
var app = express();
|
||||
app.set('disableLoginLimiter', true);
|
||||
|
||||
// starting ghost automatically populates the db
|
||||
// TODO: prevent db init, and manage bringing up the DB with fixtures ourselves
|
||||
ghost({app: app}).then(function (_httpServer) {
|
||||
httpServer = _httpServer;
|
||||
|
||||
request = supertest.agent(app);
|
||||
|
||||
testUtils.clearData()
|
||||
.then(function () {
|
||||
return testUtils.initData();
|
||||
})
|
||||
.then(function () {
|
||||
return testUtils.insertDefaultFixtures();
|
||||
})
|
||||
.then(function () {
|
||||
request.post('/ghost/api/v0.1/authentication/token/')
|
||||
.send({ grant_type: "password", username: user.email, password: user.password, client_id: "ghost-admin"})
|
||||
.expect('Content-Type', /json/)
|
||||
.expect(200)
|
||||
.end(function (err, res) {
|
||||
if (err) {
|
||||
return done(err);
|
||||
}
|
||||
var jsonResponse = res.body;
|
||||
testUtils.API.checkResponse(jsonResponse, 'accesstoken');
|
||||
accesstoken = jsonResponse.access_token;
|
||||
return done();
|
||||
});
|
||||
}).catch(done);
|
||||
}).then(function () {
|
||||
return testUtils.doAuth(request, 'posts');
|
||||
}).then(function (token) {
|
||||
accesstoken = token;
|
||||
done();
|
||||
}).catch(function (e) {
|
||||
console.log('Ghost Error: ', e);
|
||||
console.log(e.stack);
|
||||
});
|
||||
});
|
||||
|
||||
after(function () {
|
||||
httpServer.close();
|
||||
after(function (done) {
|
||||
testUtils.clearData().then(function () {
|
||||
httpServer.close();
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
describe('Browse', function () {
|
||||
|
||||
it('retrieves all published posts only by default', function (done) {
|
||||
|
|
|
@ -1,59 +1,44 @@
|
|||
/*global describe, it, before, after */
|
||||
var supertest = require('supertest'),
|
||||
express = require('express'),
|
||||
/*jshint expr:true*/
|
||||
var testUtils = require('../../../utils'),
|
||||
should = require('should'),
|
||||
_ = require('lodash'),
|
||||
testUtils = require('../../../utils'),
|
||||
supertest = require('supertest'),
|
||||
express = require('express'),
|
||||
|
||||
ghost = require('../../../../../core'),
|
||||
|
||||
httpServer,
|
||||
request,
|
||||
agent;
|
||||
|
||||
request;
|
||||
|
||||
describe('Settings API', function () {
|
||||
var user = testUtils.DataGenerator.forModel.users[0],
|
||||
accesstoken = '';
|
||||
var accesstoken = '';
|
||||
|
||||
before(function (done) {
|
||||
var app = express();
|
||||
app.set('disableLoginLimiter', true);
|
||||
app.set('disableLoginLimiter', true);
|
||||
|
||||
// starting ghost automatically populates the db
|
||||
// TODO: prevent db init, and manage bringing up the DB with fixtures ourselves
|
||||
ghost({app: app}).then(function (_httpServer) {
|
||||
httpServer = _httpServer;
|
||||
request = supertest.agent(app);
|
||||
|
||||
testUtils.clearData()
|
||||
.then(function () {
|
||||
return testUtils.initData();
|
||||
})
|
||||
.then(function () {
|
||||
return testUtils.insertDefaultFixtures();
|
||||
})
|
||||
.then(function () {
|
||||
request.post('/ghost/api/v0.1/authentication/token/')
|
||||
.send({ grant_type: "password", username: user.email, password: user.password, client_id: "ghost-admin"})
|
||||
.expect('Content-Type', /json/)
|
||||
.expect(200)
|
||||
.end(function (err, res) {
|
||||
if (err) {
|
||||
return done(err);
|
||||
}
|
||||
var jsonResponse = res.body;
|
||||
testUtils.API.checkResponse(jsonResponse, 'accesstoken');
|
||||
accesstoken = jsonResponse.access_token;
|
||||
return done();
|
||||
});
|
||||
}).catch(done);
|
||||
}).then(function () {
|
||||
return testUtils.doAuth(request);
|
||||
}).then(function (token) {
|
||||
accesstoken = token;
|
||||
done();
|
||||
}).catch(function (e) {
|
||||
console.log('Ghost Error: ', e);
|
||||
console.log(e.stack);
|
||||
});
|
||||
});
|
||||
|
||||
after(function () {
|
||||
httpServer.close();
|
||||
after(function (done) {
|
||||
testUtils.clearData().then(function () {
|
||||
httpServer.close();
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
// TODO: currently includes values of type=core
|
||||
|
|
|
@ -1,59 +1,44 @@
|
|||
/*global describe, it, before, after */
|
||||
var supertest = require('supertest'),
|
||||
express = require('express'),
|
||||
/*jshint expr:true*/
|
||||
var testUtils = require('../../../utils'),
|
||||
should = require('should'),
|
||||
_ = require('lodash'),
|
||||
testUtils = require('../../../utils'),
|
||||
supertest = require('supertest'),
|
||||
express = require('express'),
|
||||
|
||||
ghost = require('../../../../../core'),
|
||||
|
||||
httpServer,
|
||||
request,
|
||||
agent;
|
||||
|
||||
request;
|
||||
|
||||
describe('Slug API', function () {
|
||||
var user = testUtils.DataGenerator.forModel.users[0],
|
||||
accesstoken = '';
|
||||
var accesstoken = '';
|
||||
|
||||
before(function (done) {
|
||||
var app = express();
|
||||
app.set('disableLoginLimiter', true);
|
||||
app.set('disableLoginLimiter', true);
|
||||
|
||||
ghost({ app: app }).then(function (_httpServer) {
|
||||
// starting ghost automatically populates the db
|
||||
// TODO: prevent db init, and manage bringing up the DB with fixtures ourselves
|
||||
ghost({app: app}).then(function (_httpServer) {
|
||||
httpServer = _httpServer;
|
||||
request = supertest.agent(app);
|
||||
|
||||
testUtils.clearData()
|
||||
.then(function () {
|
||||
return testUtils.initData();
|
||||
})
|
||||
.then(function () {
|
||||
return testUtils.insertDefaultFixtures();
|
||||
})
|
||||
.then(function () {
|
||||
request.post('/ghost/api/v0.1/authentication/token/')
|
||||
.send({ grant_type: "password", username: user.email, password: user.password, client_id: "ghost-admin"})
|
||||
.expect('Content-Type', /json/)
|
||||
.expect(200)
|
||||
.end(function (err, res) {
|
||||
if (err) {
|
||||
return done(err);
|
||||
}
|
||||
var jsonResponse = res.body;
|
||||
testUtils.API.checkResponse(jsonResponse, 'accesstoken');
|
||||
accesstoken = jsonResponse.access_token;
|
||||
return done();
|
||||
});
|
||||
}).catch(done);
|
||||
}).then(function () {
|
||||
return testUtils.doAuth(request);
|
||||
}).then(function (token) {
|
||||
accesstoken = token;
|
||||
done();
|
||||
}).catch(function (e) {
|
||||
console.log('Ghost Error: ', e);
|
||||
console.log(e.stack);
|
||||
});
|
||||
});
|
||||
|
||||
after(function () {
|
||||
httpServer.close();
|
||||
after(function (done) {
|
||||
testUtils.clearData().then(function () {
|
||||
httpServer.close();
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should be able to get a post slug', function (done) {
|
||||
|
@ -87,7 +72,7 @@ describe('Slug API', function () {
|
|||
if (err) {
|
||||
return done(err);
|
||||
}
|
||||
|
||||
|
||||
should.not.exist(res.headers['x-cache-invalidate']);
|
||||
var jsonResponse = res.body;
|
||||
jsonResponse.should.exist;
|
||||
|
@ -109,7 +94,7 @@ describe('Slug API', function () {
|
|||
if (err) {
|
||||
return done(err);
|
||||
}
|
||||
|
||||
|
||||
should.not.exist(res.headers['x-cache-invalidate']);
|
||||
var jsonResponse = res.body;
|
||||
jsonResponse.should.exist;
|
||||
|
@ -131,7 +116,7 @@ describe('Slug API', function () {
|
|||
if (err) {
|
||||
return done(err);
|
||||
}
|
||||
|
||||
|
||||
should.not.exist(res.headers['x-cache-invalidate']);
|
||||
var jsonResponse = res.body;
|
||||
jsonResponse.should.exist;
|
||||
|
|
|
@ -1,59 +1,44 @@
|
|||
/*global describe, it, before, after */
|
||||
var supertest = require('supertest'),
|
||||
express = require('express'),
|
||||
/*jshint expr:true*/
|
||||
var testUtils = require('../../../utils'),
|
||||
should = require('should'),
|
||||
_ = require('lodash'),
|
||||
testUtils = require('../../../utils'),
|
||||
supertest = require('supertest'),
|
||||
express = require('express'),
|
||||
|
||||
ghost = require('../../../../../core'),
|
||||
|
||||
httpServer,
|
||||
request,
|
||||
agent;
|
||||
|
||||
request;
|
||||
|
||||
describe('Tag API', function () {
|
||||
var user = testUtils.DataGenerator.forModel.users[0],
|
||||
accesstoken = '';
|
||||
var accesstoken = '';
|
||||
|
||||
before(function (done) {
|
||||
var app = express();
|
||||
app.set('disableLoginLimiter', true);
|
||||
app.set('disableLoginLimiter', true);
|
||||
|
||||
// starting ghost automatically populates the db
|
||||
// TODO: prevent db init, and manage bringing up the DB with fixtures ourselves
|
||||
ghost({app: app}).then(function (_httpServer) {
|
||||
httpServer = _httpServer;
|
||||
request = supertest.agent(app);
|
||||
|
||||
testUtils.clearData()
|
||||
.then(function () {
|
||||
return testUtils.initData();
|
||||
})
|
||||
.then(function () {
|
||||
return testUtils.insertDefaultFixtures();
|
||||
})
|
||||
.then(function () {
|
||||
request.post('/ghost/api/v0.1/authentication/token/')
|
||||
.send({ grant_type: "password", username: user.email, password: user.password, client_id: "ghost-admin"})
|
||||
.expect('Content-Type', /json/)
|
||||
.expect(200)
|
||||
.end(function (err, res) {
|
||||
if (err) {
|
||||
return done(err);
|
||||
}
|
||||
var jsonResponse = res.body;
|
||||
testUtils.API.checkResponse(jsonResponse, 'accesstoken');
|
||||
accesstoken = jsonResponse.access_token;
|
||||
return done();
|
||||
});
|
||||
}).catch(done);
|
||||
}).then(function () {
|
||||
return testUtils.doAuth(request, 'posts');
|
||||
}).then(function (token) {
|
||||
accesstoken = token;
|
||||
done();
|
||||
}).catch(function (e) {
|
||||
console.log('Ghost Error: ', e);
|
||||
console.log(e.stack);
|
||||
});
|
||||
});
|
||||
|
||||
after(function () {
|
||||
httpServer.close();
|
||||
after(function (done) {
|
||||
testUtils.clearData().then(function () {
|
||||
httpServer.close();
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('can retrieve all tags', function (done) {
|
||||
|
|
|
@ -1,57 +1,44 @@
|
|||
/*global describe, it, before, after */
|
||||
var supertest = require('supertest'),
|
||||
express = require('express'),
|
||||
/*jshint expr:true*/
|
||||
var testUtils = require('../../../utils'),
|
||||
should = require('should'),
|
||||
testUtils = require('../../../utils'),
|
||||
supertest = require('supertest'),
|
||||
express = require('express'),
|
||||
|
||||
ghost = require('../../../../../core'),
|
||||
|
||||
httpServer,
|
||||
request;
|
||||
|
||||
|
||||
describe('User API', function () {
|
||||
var user = testUtils.DataGenerator.forModel.users[0],
|
||||
accesstoken = '';
|
||||
var accesstoken = '';
|
||||
|
||||
before(function (done) {
|
||||
var app = express();
|
||||
app.set('disableLoginLimiter', true);
|
||||
app.set('disableLoginLimiter', true);
|
||||
|
||||
// starting ghost automatically populates the db
|
||||
// TODO: prevent db init, and manage bringing up the DB with fixtures ourselves
|
||||
ghost({app: app}).then(function (_httpServer) {
|
||||
httpServer = _httpServer;
|
||||
request = supertest.agent(app);
|
||||
|
||||
testUtils.clearData()
|
||||
.then(function () {
|
||||
return testUtils.initData();
|
||||
})
|
||||
.then(function () {
|
||||
return testUtils.insertDefaultFixtures();
|
||||
})
|
||||
.then(function () {
|
||||
request.post('/ghost/api/v0.1/authentication/token/')
|
||||
.send({ grant_type: 'password', username: user.email, password: user.password, client_id: 'ghost-admin'})
|
||||
.expect('Content-Type', /json/)
|
||||
.expect(200)
|
||||
.end(function (err, res) {
|
||||
if (err) {
|
||||
return done(err);
|
||||
}
|
||||
var jsonResponse = res.body;
|
||||
testUtils.API.checkResponse(jsonResponse, 'accesstoken');
|
||||
accesstoken = jsonResponse.access_token;
|
||||
return done();
|
||||
});
|
||||
}).catch(done);
|
||||
}).then(function () {
|
||||
return testUtils.doAuth(request);
|
||||
}).then(function (token) {
|
||||
accesstoken = token;
|
||||
done();
|
||||
}).catch(function (e) {
|
||||
console.log('Ghost Error: ', e);
|
||||
console.log(e.stack);
|
||||
});
|
||||
});
|
||||
|
||||
after(function () {
|
||||
httpServer.close();
|
||||
after(function (done) {
|
||||
testUtils.clearData().then(function () {
|
||||
httpServer.close();
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
describe('Browse', function () {
|
||||
|
|
|
@ -227,8 +227,8 @@ describe('Frontend Routing', function () {
|
|||
// insertPosts adds 5 published posts, 1 draft post, 1 published static page and one draft page
|
||||
// we then insert with max 11 which ensures we have 16 published posts
|
||||
before(function (done) {
|
||||
testUtils.insertPosts().then(function () {
|
||||
return testUtils.insertMorePosts(11);
|
||||
testUtils.fixtures.insertPosts().then(function () {
|
||||
return testUtils.fixtures.insertMorePosts(11);
|
||||
}).then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
|
@ -437,11 +437,11 @@ describe('Frontend Routing', function () {
|
|||
return testUtils.initData();
|
||||
}).then(function () {
|
||||
|
||||
return testUtils.insertPosts();
|
||||
return testUtils.fixtures.insertPosts();
|
||||
}).then(function () {
|
||||
return testUtils.insertMorePosts(22);
|
||||
return testUtils.fixtures.insertMorePosts(22);
|
||||
}).then(function () {
|
||||
return testUtils.insertMorePostsTags(22);
|
||||
return testUtils.fixtures.insertMorePostsTags(22);
|
||||
}).then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
|
|
|
@ -7,8 +7,6 @@ var testUtils = require('../../utils'),
|
|||
|
||||
// Stuff we are testing
|
||||
mail = rewire('../../../server/api/mail'),
|
||||
settings = require('../../../server/api/settings'),
|
||||
permissions = require('../../../server/permissions'),
|
||||
AuthAPI = require('../../../server/api/authentication');
|
||||
|
||||
describe('Authentication API', function () {
|
||||
|
@ -22,15 +20,8 @@ describe('Authentication API', function () {
|
|||
|
||||
describe('Not completed', function () {
|
||||
|
||||
beforeEach(function (done) {
|
||||
testUtils.initData().then(function () {
|
||||
return permissions.init().then(function () {
|
||||
return settings.updateSettingsCache();
|
||||
});
|
||||
}).then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
// TODO: stub settings
|
||||
beforeEach(testUtils.setup('owner:pre', 'settings', 'perms:setting', 'perms:init'));
|
||||
|
||||
it('should report that setup has not been completed', function (done) {
|
||||
AuthAPI.isSetup().then(function (result) {
|
||||
|
@ -77,17 +68,7 @@ describe('Authentication API', function () {
|
|||
|
||||
describe('Completed', function () {
|
||||
|
||||
beforeEach(function (done) {
|
||||
testUtils.initData().then(function () {
|
||||
return testUtils.insertDefaultFixtures().then(function () {
|
||||
return permissions.init().then(function () {
|
||||
return settings.updateSettingsCache();
|
||||
});
|
||||
});
|
||||
}).then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
beforeEach(testUtils.setup('owner'));
|
||||
|
||||
it('should report that setup has been completed', function (done) {
|
||||
AuthAPI.isSetup().then(function (result) {
|
||||
|
@ -120,58 +101,50 @@ describe('Authentication API', function () {
|
|||
});
|
||||
});
|
||||
|
||||
describe('Authentication', function () {
|
||||
|
||||
describe('Setup not completed', function () {
|
||||
|
||||
beforeEach(function (done) {
|
||||
return testUtils.initData().then(function () {
|
||||
return permissions.init().then(function () {
|
||||
return settings.updateSettingsCache();
|
||||
});
|
||||
}).then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('should not allow an invitation to be accepted', function (done) {
|
||||
AuthAPI.acceptInvitation().then(function () {
|
||||
done(new Error('Invitation was allowed to be accepted'));
|
||||
}).catch(function (err) {
|
||||
should.exist(err);
|
||||
|
||||
err.name.should.equal('NoPermissionError');
|
||||
err.code.should.equal(403);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should not generate a password reset token', function (done) {
|
||||
AuthAPI.generateResetToken().then(function () {
|
||||
done(new Error('Reset token was generated'));
|
||||
}).catch(function (err) {
|
||||
should.exist(err);
|
||||
|
||||
err.name.should.equal('NoPermissionError');
|
||||
err.code.should.equal(403);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should not allow a password reset', function (done) {
|
||||
AuthAPI.resetPassword().then(function () {
|
||||
done(new Error('Password was reset'));
|
||||
}).catch(function (err) {
|
||||
should.exist(err);
|
||||
|
||||
err.name.should.equal('NoPermissionError');
|
||||
err.code.should.equal(403);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
// describe('Authentication', function () {
|
||||
//
|
||||
// describe('Setup not completed', function () {
|
||||
//
|
||||
// beforeEach(testUtils.setup());
|
||||
//
|
||||
// it('should not allow an invitation to be accepted', function (done) {
|
||||
// AuthAPI.acceptInvitation().then(function () {
|
||||
// done(new Error('Invitation was allowed to be accepted'));
|
||||
// }).catch(function (err) {
|
||||
// should.exist(err);
|
||||
//
|
||||
// err.name.should.equal('NoPermissionError');
|
||||
// err.code.should.equal(403);
|
||||
//
|
||||
// done();
|
||||
// });
|
||||
// });
|
||||
//
|
||||
// it('should not generate a password reset token', function (done) {
|
||||
// AuthAPI.generateResetToken().then(function () {
|
||||
// done(new Error('Reset token was generated'));
|
||||
// }).catch(function (err) {
|
||||
// should.exist(err);
|
||||
//
|
||||
// err.name.should.equal('NoPermissionError');
|
||||
// err.code.should.equal(403);
|
||||
//
|
||||
// done();
|
||||
// });
|
||||
// });
|
||||
//
|
||||
// it('should not allow a password reset', function (done) {
|
||||
// AuthAPI.resetPassword().then(function () {
|
||||
// done(new Error('Password was reset'));
|
||||
// }).catch(function (err) {
|
||||
// should.exist(err);
|
||||
//
|
||||
// err.name.should.equal('NoPermissionError');
|
||||
// err.code.should.equal(403);
|
||||
//
|
||||
// done();
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
});
|
||||
|
|
|
@ -4,61 +4,64 @@ var testUtils = require('../../utils'),
|
|||
should = require('should'),
|
||||
|
||||
// Stuff we are testing
|
||||
permissions = require('../../../server/permissions'),
|
||||
dbAPI = require('../../../server/api/db'),
|
||||
TagsAPI = require('../../../server/api/tags'),
|
||||
PostAPI = require('../../../server/api/posts');
|
||||
TagModel = require('../../../server/models').Tag,
|
||||
PostModel = require('../../../server/models').Post;
|
||||
|
||||
|
||||
|
||||
describe('DB API', function () {
|
||||
// Keep the DB clean
|
||||
before(testUtils.teardown);
|
||||
afterEach(testUtils.teardown);
|
||||
|
||||
beforeEach(function (done) {
|
||||
testUtils.initData().then(function () {
|
||||
return testUtils.insertDefaultFixtures();
|
||||
}).then(function () {
|
||||
return testUtils.insertEditorUser();
|
||||
}).then(function () {
|
||||
return testUtils.insertAuthorUser();
|
||||
}).then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
beforeEach(testUtils.setup('users:roles', 'posts', 'perms:db', 'perms:init'));
|
||||
|
||||
should.exist(dbAPI);
|
||||
|
||||
it('delete all content', function (done) {
|
||||
var options = {context: {user: 1}};
|
||||
permissions.init().then(function () {
|
||||
return dbAPI.deleteAllContent(options);
|
||||
}).then(function (result) {
|
||||
it('delete all content (owner)', function (done) {
|
||||
return dbAPI.deleteAllContent(testUtils.context.owner).then(function (result) {
|
||||
should.exist(result.db);
|
||||
result.db.should.be.instanceof(Array);
|
||||
result.db.should.be.empty;
|
||||
}).then(function () {
|
||||
return TagsAPI.browse(options).then(function (results) {
|
||||
should.exist(results);
|
||||
should.exist(results.tags);
|
||||
results.tags.length.should.equal(0);
|
||||
return TagModel.findAll(testUtils.context.owner).then(function (results) {
|
||||
should.exist(results);
|
||||
results.length.should.equal(0);
|
||||
});
|
||||
}).then(function () {
|
||||
return PostAPI.browse(options).then(function (results) {
|
||||
return PostModel.findAll(testUtils.context.owner).then(function (results) {
|
||||
should.exist(results);
|
||||
results.posts.length.should.equal(0);
|
||||
results.length.should.equal(0);
|
||||
done();
|
||||
});
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('delete all content is denied', function (done) {
|
||||
permissions.init().then(function () {
|
||||
return dbAPI.deleteAllContent({context: {user: 2}});
|
||||
}).then(function (){
|
||||
it('delete all content (admin)', function (done) {
|
||||
return dbAPI.deleteAllContent(testUtils.context.admin).then(function (result) {
|
||||
should.exist(result.db);
|
||||
result.db.should.be.instanceof(Array);
|
||||
result.db.should.be.empty;
|
||||
}).then(function () {
|
||||
return TagModel.findAll(testUtils.context.admin).then(function (results) {
|
||||
should.exist(results);
|
||||
results.length.should.equal(0);
|
||||
});
|
||||
}).then(function () {
|
||||
return PostModel.findAll(testUtils.context.admin).then(function (results) {
|
||||
should.exist(results);
|
||||
results.length.should.equal(0);
|
||||
done();
|
||||
});
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('delete all content is denied (editor & author)', function (done) {
|
||||
return dbAPI.deleteAllContent(testUtils.context.editor).then(function (){
|
||||
done(new Error('Delete all content is not denied for editor.'));
|
||||
}, function (error) {
|
||||
error.type.should.eql('NoPermissionError');
|
||||
return dbAPI.deleteAllContent({context: {user: 3}});
|
||||
return dbAPI.deleteAllContent(testUtils.context.author);
|
||||
}).then(function (){
|
||||
done(new Error('Delete all content is not denied for author.'));
|
||||
}, function (error) {
|
||||
|
@ -72,14 +75,12 @@ describe('DB API', function () {
|
|||
}).catch(done);
|
||||
});
|
||||
|
||||
it('export content is denied', function (done) {
|
||||
permissions.init().then(function () {
|
||||
return dbAPI.exportContent({context: {user: 2}});
|
||||
}).then(function (){
|
||||
it('export content is denied (editor & author)', function (done) {
|
||||
return dbAPI.exportContent(testUtils.context.editor).then(function (){
|
||||
done(new Error('Export content is not denied for editor.'));
|
||||
}, function (error) {
|
||||
error.type.should.eql('NoPermissionError');
|
||||
return dbAPI.exportContent({context: {user: 3}});
|
||||
return dbAPI.exportContent(testUtils.context.author);
|
||||
}).then(function (){
|
||||
done(new Error('Export content is not denied for author.'));
|
||||
}, function (error) {
|
||||
|
@ -93,14 +94,12 @@ describe('DB API', function () {
|
|||
}).catch(done);
|
||||
});
|
||||
|
||||
it('import content is denied', function (done) {
|
||||
permissions.init().then(function () {
|
||||
return dbAPI.importContent({context: {user: 2}});
|
||||
}).then(function () {
|
||||
it('import content is denied (editor & author)', function (done) {
|
||||
return dbAPI.importContent(testUtils.context.editor).then(function () {
|
||||
done(new Error('Import content is not denied for editor.'));
|
||||
}, function (error) {
|
||||
error.type.should.eql('NoPermissionError');
|
||||
return dbAPI.importContent({context: {user: 3}});
|
||||
return dbAPI.importContent(testUtils.context.author);
|
||||
}).then(function () {
|
||||
done(new Error('Import content is not denied for author.'));
|
||||
}, function (error) {
|
||||
|
|
|
@ -4,7 +4,6 @@ var testUtils = require('../../utils'),
|
|||
should = require('should'),
|
||||
|
||||
// Stuff we are testing
|
||||
permissions = require('../../../server/permissions'),
|
||||
MailAPI = require('../../../server/api/mail'),
|
||||
mailData = {
|
||||
mail: [{
|
||||
|
@ -21,24 +20,12 @@ describe('Mail API', function () {
|
|||
// Keep the DB clean
|
||||
before(testUtils.teardown);
|
||||
afterEach(testUtils.teardown);
|
||||
|
||||
beforeEach(function (done) {
|
||||
testUtils.clearData()
|
||||
.then(function () {
|
||||
return testUtils.initData();
|
||||
}).then(function () {
|
||||
return testUtils.insertDefaultFixtures();
|
||||
}).then(function () {
|
||||
return permissions.init();
|
||||
}).then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
beforeEach(testUtils.setup('perms:mail', 'perms:init'));
|
||||
|
||||
should.exist(MailAPI);
|
||||
|
||||
it('return correct failure message', function (done) {
|
||||
MailAPI.send(mailData, {context: {internal: true}}).then(function (response) {
|
||||
it('return correct failure message (internal)', function (done) {
|
||||
MailAPI.send(mailData, testUtils.context.internal).then(function (response) {
|
||||
/*jshint unused:false */
|
||||
done();
|
||||
}).catch(function (error) {
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
/*jshint expr:true*/
|
||||
var testUtils = require('../../utils'),
|
||||
should = require('should'),
|
||||
_ = require('lodash'),
|
||||
|
||||
// Stuff we are testing
|
||||
permissions = require('../../../server/permissions'),
|
||||
NotificationsAPI = require('../../../server/api/notifications');
|
||||
|
||||
describe('Notifications API', function () {
|
||||
|
@ -12,17 +12,7 @@ describe('Notifications API', function () {
|
|||
// Keep the DB clean
|
||||
before(testUtils.teardown);
|
||||
afterEach(testUtils.teardown);
|
||||
|
||||
beforeEach(function (done) {
|
||||
testUtils.initData()
|
||||
.then(function () {
|
||||
return testUtils.insertDefaultFixtures();
|
||||
}).then(function () {
|
||||
return permissions.init();
|
||||
}).then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
beforeEach(testUtils.setup('users:roles', 'perms:notification', 'perms:init'));
|
||||
|
||||
should.exist(NotificationsAPI);
|
||||
|
||||
|
@ -32,7 +22,7 @@ describe('Notifications API', function () {
|
|||
message: 'Hello, this is dog'
|
||||
};
|
||||
|
||||
NotificationsAPI.add({ notifications: [msg] }, {context: {internal: true}}).then(function (result) {
|
||||
NotificationsAPI.add({ notifications: [msg] }, testUtils.context.internal).then(function (result) {
|
||||
var notification;
|
||||
|
||||
should.exist(result);
|
||||
|
@ -53,7 +43,7 @@ describe('Notifications API', function () {
|
|||
message: 'Hello, this is dog'
|
||||
};
|
||||
|
||||
NotificationsAPI.add({ notifications: [msg] }, {context: {user: 1}}).then(function (result) {
|
||||
NotificationsAPI.add({ notifications: [msg] }, testUtils.context.owner).then(function (result) {
|
||||
var notification;
|
||||
|
||||
should.exist(result);
|
||||
|
@ -75,7 +65,7 @@ describe('Notifications API', function () {
|
|||
id: 99
|
||||
};
|
||||
|
||||
NotificationsAPI.add({ notifications: [msg] }, {context: {internal: true}}).then(function (result) {
|
||||
NotificationsAPI.add({ notifications: [msg] }, testUtils.context.internal).then(function (result) {
|
||||
var notification;
|
||||
|
||||
should.exist(result);
|
||||
|
@ -96,8 +86,8 @@ describe('Notifications API', function () {
|
|||
type: 'error', // this can be 'error', 'success', 'warn' and 'info'
|
||||
message: 'This is an error' // A string. Should fit in one line.
|
||||
};
|
||||
NotificationsAPI.add({ notifications: [msg] }, {context: {internal: true}}).then(function () {
|
||||
NotificationsAPI.browse({context: {internal: true}}).then(function (results) {
|
||||
NotificationsAPI.add({ notifications: [msg] }, testUtils.context.internal).then(function () {
|
||||
NotificationsAPI.browse(testUtils.context.internal).then(function (results) {
|
||||
should.exist(results);
|
||||
should.exist(results.notifications);
|
||||
results.notifications.length.should.be.above(0);
|
||||
|
@ -108,20 +98,20 @@ describe('Notifications API', function () {
|
|||
});
|
||||
|
||||
it('can browse (owner)', function (done) {
|
||||
var msg = {
|
||||
type: 'error', // this can be 'error', 'success', 'warn' and 'info'
|
||||
message: 'This is an error' // A string. Should fit in one line.
|
||||
};
|
||||
NotificationsAPI.add({ notifications: [msg] }, {context: {internal: true}}).then(function () {
|
||||
NotificationsAPI.browse({context: {user: 1}}).then(function (results) {
|
||||
should.exist(results);
|
||||
should.exist(results.notifications);
|
||||
results.notifications.length.should.be.above(0);
|
||||
testUtils.API.checkResponse(results.notifications[0], 'notification');
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
var msg = {
|
||||
type: 'error', // this can be 'error', 'success', 'warn' and 'info'
|
||||
message: 'This is an error' // A string. Should fit in one line.
|
||||
};
|
||||
NotificationsAPI.add({ notifications: [msg] }, testUtils.context.owner).then(function () {
|
||||
NotificationsAPI.browse(testUtils.context.owner).then(function (results) {
|
||||
should.exist(results);
|
||||
should.exist(results.notifications);
|
||||
results.notifications.length.should.be.above(0);
|
||||
testUtils.API.checkResponse(results.notifications[0], 'notification');
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
@ -131,35 +121,39 @@ describe('Notifications API', function () {
|
|||
message: 'Goodbye, cruel world!'
|
||||
};
|
||||
|
||||
NotificationsAPI.add({ notifications: [msg] }, {context: {internal: true}}).then(function (result) {
|
||||
NotificationsAPI.add({ notifications: [msg] }, testUtils.context.internal).then(function (result) {
|
||||
var notification = result.notifications[0];
|
||||
|
||||
NotificationsAPI.destroy({ id: notification.id, context: {internal: true}}).then(function (result) {
|
||||
should.exist(result);
|
||||
should.exist(result.notifications);
|
||||
result.notifications[0].id.should.equal(notification.id);
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
});
|
||||
|
||||
it('can destroy (owner)', function (done) {
|
||||
var msg = {
|
||||
type: 'error',
|
||||
message: 'Goodbye, cruel world!'
|
||||
};
|
||||
|
||||
NotificationsAPI.add({ notifications: [msg] }, {context: {internal: true}}).then(function (result) {
|
||||
var notification = result.notifications[0];
|
||||
|
||||
NotificationsAPI.destroy({id: notification.id, context: {user: 1}}).then(function (result) {
|
||||
NotificationsAPI.destroy(
|
||||
_.extend(testUtils.context.internal, {id: notification.id})
|
||||
).then(function (result) {
|
||||
should.exist(result);
|
||||
should.exist(result.notifications);
|
||||
result.notifications[0].id.should.equal(notification.id);
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('can destroy (owner)', function (done) {
|
||||
var msg = {
|
||||
type: 'error',
|
||||
message: 'Goodbye, cruel world!'
|
||||
};
|
||||
|
||||
NotificationsAPI.add({ notifications: [msg] }, testUtils.context.internal).then(function (result) {
|
||||
var notification = result.notifications[0];
|
||||
|
||||
NotificationsAPI.destroy(
|
||||
_.extend(testUtils.context.owner, {id: notification.id})
|
||||
).then(function (result) {
|
||||
should.exist(result);
|
||||
should.exist(result.notifications);
|
||||
result.notifications[0].id.should.equal(notification.id);
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -11,16 +11,8 @@ describe('Post API', function () {
|
|||
// Keep the DB clean
|
||||
before(testUtils.teardown);
|
||||
afterEach(testUtils.teardown);
|
||||
beforeEach(testUtils.setup('users:roles', 'perms:post', 'posts', 'perms:init'));
|
||||
|
||||
beforeEach(function (done) {
|
||||
testUtils.initData()
|
||||
.then(function () {
|
||||
return testUtils.insertDefaultFixtures();
|
||||
})
|
||||
.then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
should.exist(PostAPI);
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@ var testUtils = require('../../utils'),
|
|||
_ = require('lodash'),
|
||||
|
||||
// Stuff we are testing
|
||||
permissions = require('../../../server/permissions'),
|
||||
SettingsAPI = require('../../../server/api/settings'),
|
||||
defaultContext = {user: 1},
|
||||
internalContext = {internal: true},
|
||||
|
@ -17,22 +16,7 @@ describe('Settings API', function () {
|
|||
// Keep the DB clean
|
||||
before(testUtils.teardown);
|
||||
afterEach(testUtils.teardown);
|
||||
|
||||
beforeEach(function (done) {
|
||||
testUtils.initData()
|
||||
.then(function () {
|
||||
return testUtils.insertDefaultFixtures();
|
||||
})
|
||||
.then(function () {
|
||||
return SettingsAPI.updateSettingsCache();
|
||||
})
|
||||
.then(function () {
|
||||
return permissions.init();
|
||||
})
|
||||
.then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
beforeEach(testUtils.setup('users:roles', 'perms:setting', 'settings', 'perms:init'));
|
||||
|
||||
should.exist(SettingsAPI);
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
var testUtils = require('../../utils'),
|
||||
should = require('should'),
|
||||
|
||||
permissions = require('../../../server/permissions'),
|
||||
SlugAPI = require('../../../server/api/slugs');
|
||||
|
||||
describe('Slug API', function () {
|
||||
|
@ -11,15 +10,7 @@ describe('Slug API', function () {
|
|||
before(testUtils.teardown);
|
||||
afterEach(testUtils.teardown);
|
||||
|
||||
beforeEach(function (done) {
|
||||
testUtils.initData().then(function () {
|
||||
return testUtils.insertDefaultFixtures();
|
||||
}).then(function () {
|
||||
return permissions.init();
|
||||
}).then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
beforeEach(testUtils.setup('users:roles', 'perms:slug', 'perms:init'));
|
||||
|
||||
should.exist(SlugAPI);
|
||||
|
||||
|
|
|
@ -4,35 +4,18 @@ var testUtils = require('../../utils'),
|
|||
should = require('should'),
|
||||
|
||||
// Stuff we are testing
|
||||
permissions = require('../../../server/permissions'),
|
||||
TagAPI = require('../../../server/api/tags');
|
||||
|
||||
describe('Tags API', function () {
|
||||
// Keep the DB clean
|
||||
before(testUtils.teardown);
|
||||
afterEach(testUtils.teardown);
|
||||
|
||||
beforeEach(function (done) {
|
||||
testUtils.initData()
|
||||
.then(function () {
|
||||
return testUtils.insertDefaultFixtures();
|
||||
}).then(function () {
|
||||
return testUtils.insertAdminUser();
|
||||
}).then(function () {
|
||||
return testUtils.insertEditorUser();
|
||||
}).then(function () {
|
||||
return testUtils.insertAuthorUser();
|
||||
}).then(function () {
|
||||
return permissions.init();
|
||||
}).then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
beforeEach(testUtils.setup('users:roles', 'tag', 'perms:tag', 'perms:init'));
|
||||
|
||||
should.exist(TagAPI);
|
||||
|
||||
it('can browse (internal)', function (done) {
|
||||
TagAPI.browse({context: {internal: true}}).then(function (results) {
|
||||
TagAPI.browse(testUtils.context.internal).then(function (results) {
|
||||
should.exist(results);
|
||||
should.exist(results.tags);
|
||||
results.tags.length.should.be.above(0);
|
||||
|
@ -56,7 +39,7 @@ describe('Tags API', function () {
|
|||
});
|
||||
|
||||
it('can browse (admin)', function (done) {
|
||||
TagAPI.browse({context: {user: 2}}).then(function (results) {
|
||||
TagAPI.browse(testUtils.context.admin).then(function (results) {
|
||||
should.exist(results);
|
||||
should.exist(results.tags);
|
||||
results.tags.length.should.be.above(0);
|
||||
|
@ -68,7 +51,7 @@ describe('Tags API', function () {
|
|||
});
|
||||
|
||||
it('can browse (editor)', function (done) {
|
||||
TagAPI.browse({context: {user: 3}}).then(function (results) {
|
||||
TagAPI.browse(testUtils.context.editor).then(function (results) {
|
||||
should.exist(results);
|
||||
should.exist(results.tags);
|
||||
results.tags.length.should.be.above(0);
|
||||
|
@ -80,7 +63,7 @@ describe('Tags API', function () {
|
|||
});
|
||||
|
||||
it('can browse (author)', function (done) {
|
||||
TagAPI.browse({context: {user: 4}}).then(function (results) {
|
||||
TagAPI.browse(testUtils.context.author).then(function (results) {
|
||||
should.exist(results);
|
||||
should.exist(results.tags);
|
||||
results.tags.length.should.be.above(0);
|
||||
|
|
|
@ -8,66 +8,58 @@ var _ = require('lodash'),
|
|||
when = require('when'),
|
||||
|
||||
// Stuff we are testing
|
||||
permissions = require('../../../server/permissions'),
|
||||
SettingsAPI = require('../../../server/api/settings'),
|
||||
ThemeAPI = rewire('../../../server/api/themes');
|
||||
ThemeAPI = rewire('../../../server/api/themes'),
|
||||
|
||||
sandbox = sinon.sandbox.create();
|
||||
|
||||
|
||||
describe('Themes API', function () {
|
||||
var configStub,
|
||||
config,
|
||||
sandbox,
|
||||
settingsReadStub;
|
||||
var config,
|
||||
configStub;
|
||||
|
||||
// Keep the DB clean
|
||||
before(testUtils.teardown);
|
||||
afterEach(function (done) {
|
||||
testUtils.clearData().then(function () {
|
||||
sandbox.restore();
|
||||
done();
|
||||
}).catch(done);
|
||||
afterEach(testUtils.teardown);
|
||||
afterEach(function () {
|
||||
sandbox.restore();
|
||||
});
|
||||
|
||||
beforeEach(function (done) {
|
||||
testUtils.initData().then(function () {
|
||||
return testUtils.insertDefaultFixtures();
|
||||
}).then(function () {
|
||||
return SettingsAPI.updateSettingsCache();
|
||||
}).then(function () {
|
||||
beforeEach(testUtils.setup('users:roles', 'perms:theme', 'perms:init'));
|
||||
|
||||
return permissions.init();
|
||||
}).then(function () {
|
||||
sandbox = sinon.sandbox.create();
|
||||
beforeEach(function () {
|
||||
// Override settings.read for activeTheme
|
||||
sandbox.stub(SettingsAPI, 'read', function () {
|
||||
return when({ settings: [{value: 'casper'}] });
|
||||
});
|
||||
|
||||
// Override settings.read for activeTheme
|
||||
settingsReadStub = sandbox.stub(SettingsAPI, 'read', function () {
|
||||
return when({ settings: [{value: 'casper'}] });
|
||||
});
|
||||
sandbox.stub(SettingsAPI, 'edit', function () {
|
||||
return when({ settings: [{value: 'rasper'}] });
|
||||
});
|
||||
|
||||
configStub = {
|
||||
'paths': {
|
||||
'subdir': '',
|
||||
'availableThemes': {
|
||||
'casper': {
|
||||
'package.json': { name: 'Casper', version: '0.9.3' }
|
||||
},
|
||||
'rasper': {
|
||||
'package.json': { name: 'Rasper', version: '0.9.6' }
|
||||
}
|
||||
configStub = {
|
||||
'paths': {
|
||||
'subdir': '',
|
||||
'availableThemes': {
|
||||
'casper': {
|
||||
'package.json': { name: 'Casper', version: '0.9.3' }
|
||||
},
|
||||
'rasper': {
|
||||
'package.json': { name: 'Rasper', version: '0.9.6' }
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
config = ThemeAPI.__get__('config');
|
||||
_.extend(config, configStub);
|
||||
config = ThemeAPI.__get__('config');
|
||||
_.extend(config, configStub);
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
should.exist(ThemeAPI);
|
||||
|
||||
it('can browse', function (done) {
|
||||
ThemeAPI.browse({context: {user: 1}}).then(function (result) {
|
||||
ThemeAPI.browse(testUtils.context.owner).then(function (result) {
|
||||
should.exist(result);
|
||||
result.themes.length.should.be.above(0);
|
||||
testUtils.API.checkResponse(result.themes[0], 'theme');
|
||||
|
@ -78,12 +70,12 @@ describe('Themes API', function () {
|
|||
});
|
||||
|
||||
it('can edit', function (done) {
|
||||
ThemeAPI.edit({themes: [{uuid: 'casper', active: true }]}, {context: {user: 1}}).then(function (result) {
|
||||
ThemeAPI.edit({themes: [{uuid: 'rasper', active: true }]}, testUtils.context.owner).then(function (result) {
|
||||
should.exist(result);
|
||||
should.exist(result.themes);
|
||||
result.themes.length.should.be.above(0);
|
||||
testUtils.API.checkResponse(result.themes[0], 'theme');
|
||||
result.themes[0].uuid.should.equal('casper');
|
||||
result.themes[0].uuid.should.equal('rasper');
|
||||
done();
|
||||
}).catch(function (error) {
|
||||
done(new Error(JSON.stringify(error)));
|
||||
|
|
|
@ -1,15 +1,18 @@
|
|||
/*globals describe, before, beforeEach, afterEach, it */
|
||||
var testUtils = require('../../utils'),
|
||||
should = require('should'),
|
||||
|
||||
permissions = require('../../../server/permissions'),
|
||||
UserModel = require('../../../server/models').User;
|
||||
/*jshint expr:true*/
|
||||
var testUtils = require('../../utils'),
|
||||
should = require('should'),
|
||||
_ = require('lodash'),
|
||||
|
||||
// Stuff we are testing
|
||||
UsersAPI = require('../../../server/api/users');
|
||||
AuthAPI = require('../../../server/api/authentication');
|
||||
UserModel = require('../../../server/models').User,
|
||||
UserAPI = require('../../../server/api/users');
|
||||
|
||||
describe('Users API', function () {
|
||||
// Keep the DB clean
|
||||
before(testUtils.teardown);
|
||||
afterEach(testUtils.teardown);
|
||||
beforeEach(testUtils.setup('users:roles', 'perms:user', 'perms:init'));
|
||||
|
||||
before(function (done) {
|
||||
testUtils.clearData().then(function () {
|
||||
|
@ -17,296 +20,219 @@ describe('Users API', function () {
|
|||
}).catch(done);
|
||||
});
|
||||
|
||||
afterEach(function (done) {
|
||||
testUtils.clearData().then(function () {
|
||||
it('dateTime fields are returned as Date objects', function (done) {
|
||||
var userData = testUtils.DataGenerator.forModel.users[0];
|
||||
|
||||
UserModel.check({ email: userData.email, password: userData.password }).then(function (user) {
|
||||
return UserAPI.read({ id: user.id });
|
||||
}).then(function (response) {
|
||||
response.users[0].created_at.should.be.an.instanceof(Date);
|
||||
response.users[0].updated_at.should.be.an.instanceof(Date);
|
||||
response.users[0].last_login.should.be.an.instanceof(Date);
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
describe('No User', function () {
|
||||
beforeEach(function (done) {
|
||||
testUtils.initData().then(function () {
|
||||
return permissions.init();
|
||||
}).then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
it('Can browse (admin)', function (done) {
|
||||
UserAPI.browse(testUtils.context.admin).then(function (response) {
|
||||
should.exist(response);
|
||||
testUtils.API.checkResponse(response, 'users');
|
||||
should.exist(response.users);
|
||||
response.users.should.have.length(4);
|
||||
testUtils.API.checkResponse(response.users[0], 'user', ['roles']);
|
||||
testUtils.API.checkResponse(response.users[1], 'user', ['roles']);
|
||||
testUtils.API.checkResponse(response.users[2], 'user', ['roles']);
|
||||
testUtils.API.checkResponse(response.users[3], 'user', ['roles']);
|
||||
|
||||
it('can add with internal user', function (done) {
|
||||
AuthAPI.setup({ setup: [{
|
||||
'name': 'Hello World',
|
||||
'email': 'hello@world.com',
|
||||
'password': 'password'
|
||||
}]}).then(function (results) {
|
||||
should.exist(results);
|
||||
should.not.exist(results.meta);
|
||||
should.exist(results.users);
|
||||
results.users.should.have.length(1);
|
||||
testUtils.API.checkResponse(results.users[0], 'user', ['roles']);
|
||||
results.users[0].name.should.equal('Hello World');
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('Can browse (editor)', function (done) {
|
||||
UserAPI.browse(testUtils.context.editor).then(function (response) {
|
||||
should.exist(response);
|
||||
testUtils.API.checkResponse(response, 'users');
|
||||
should.exist(response.users);
|
||||
response.users.should.have.length(4);
|
||||
testUtils.API.checkResponse(response.users[0], 'user', ['roles']);
|
||||
testUtils.API.checkResponse(response.users[1], 'user', ['roles']);
|
||||
testUtils.API.checkResponse(response.users[2], 'user', ['roles']);
|
||||
testUtils.API.checkResponse(response.users[3], 'user', ['roles']);
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('Can browse (author)', function (done) {
|
||||
UserAPI.browse(testUtils.context.author).then(function (response) {
|
||||
should.exist(response);
|
||||
testUtils.API.checkResponse(response, 'users');
|
||||
should.exist(response.users);
|
||||
response.users.should.have.length(4);
|
||||
testUtils.API.checkResponse(response.users[0], 'user', ['roles']);
|
||||
testUtils.API.checkResponse(response.users[1], 'user', ['roles']);
|
||||
testUtils.API.checkResponse(response.users[2], 'user', ['roles']);
|
||||
testUtils.API.checkResponse(response.users[3], 'user', ['roles']);
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('no-auth user cannot browse', function (done) {
|
||||
UserAPI.browse().then(function () {
|
||||
done(new Error('Browse user is not denied without authentication.'));
|
||||
}, function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('Can read (admin)', function (done) {
|
||||
UserAPI.read(_.extend(testUtils.context.admin, {id: 1})).then(function (response) {
|
||||
should.exist(response);
|
||||
should.not.exist(response.meta);
|
||||
should.exist(response.users);
|
||||
response.users[0].id.should.eql(1);
|
||||
testUtils.API.checkResponse(response.users[0], 'user', ['roles']);
|
||||
response.users[0].created_at.should.be.a.Date;
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('Can read (editor)', function (done) {
|
||||
UserAPI.read(_.extend(testUtils.context.editor, {id: 1})).then(function (response) {
|
||||
should.exist(response);
|
||||
should.not.exist(response.meta);
|
||||
should.exist(response.users);
|
||||
response.users[0].id.should.eql(1);
|
||||
testUtils.API.checkResponse(response.users[0], 'user', ['roles']);
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('Can read (author)', function (done) {
|
||||
UserAPI.read(_.extend(testUtils.context.author, {id: 1})).then(function (response) {
|
||||
should.exist(response);
|
||||
should.not.exist(response.meta);
|
||||
should.exist(response.users);
|
||||
response.users[0].id.should.eql(1);
|
||||
testUtils.API.checkResponse(response.users[0], 'user', ['roles']);
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('no-auth can read', function (done) {
|
||||
UserAPI.read({id: 1}).then(function (response) {
|
||||
should.exist(response);
|
||||
should.not.exist(response.meta);
|
||||
should.exist(response.users);
|
||||
response.users[0].id.should.eql(1);
|
||||
testUtils.API.checkResponse(response.users[0], 'user', ['roles']);
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('Can edit (admin)', function (done) {
|
||||
UserAPI.edit(
|
||||
{users: [{name: 'Joe Blogger'}]}, _.extend(testUtils.context.admin, {id: 1})
|
||||
).then(function (response) {
|
||||
should.exist(response);
|
||||
should.not.exist(response.meta);
|
||||
should.exist(response.users);
|
||||
response.users.should.have.length(1);
|
||||
testUtils.API.checkResponse(response.users[0], 'user', ['roles']);
|
||||
response.users[0].name.should.equal('Joe Blogger');
|
||||
response.users[0].updated_at.should.be.a.Date;
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('Can edit (editor)', function (done) {
|
||||
UserAPI.edit(
|
||||
{users: [{name: 'Joe Blogger'}]}, _.extend(testUtils.context.editor, {id: 1})
|
||||
).then(function (response) {
|
||||
should.exist(response);
|
||||
should.not.exist(response.meta);
|
||||
should.exist(response.users);
|
||||
response.users.should.have.length(1);
|
||||
testUtils.API.checkResponse(response.users[0], 'user', ['roles']);
|
||||
response.users[0].name.should.eql('Joe Blogger');
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('Can edit only self (author)', function (done) {
|
||||
// Test author cannot edit admin user
|
||||
UserAPI.edit(
|
||||
{users: [{name: 'Joe Blogger'}]}, _.extend(testUtils.context.author, {id: 1})
|
||||
).then(function () {
|
||||
done(new Error('Author should not be able to edit account which is not their own'));
|
||||
}).catch(function (error) {
|
||||
error.type.should.eql('NoPermissionError');
|
||||
}).finally(function () {
|
||||
// Next test that author CAN edit self
|
||||
return UserAPI.edit(
|
||||
{users: [{name: 'Timothy Bogendath'}]}, _.extend(testUtils.context.author, {id: 4})
|
||||
).then(function (response) {
|
||||
should.exist(response);
|
||||
should.not.exist(response.meta);
|
||||
should.exist(response.users);
|
||||
response.users.should.have.length(1);
|
||||
testUtils.API.checkResponse(response.users[0], 'user', ['roles']);
|
||||
response.users[0].name.should.eql('Timothy Bogendath');
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
});
|
||||
|
||||
describe('With Users', function () {
|
||||
beforeEach(function (done) {
|
||||
testUtils.initData().then(function () {
|
||||
return testUtils.insertDefaultFixtures();
|
||||
}).then(function () {
|
||||
return testUtils.insertAdminUser();
|
||||
}).then(function () {
|
||||
return testUtils.insertEditorUser();
|
||||
}).then(function () {
|
||||
return testUtils.insertAuthorUser();
|
||||
}).then(function () {
|
||||
return permissions.init();
|
||||
}).then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('dateTime fields are returned as Date objects', function (done) {
|
||||
var userData = testUtils.DataGenerator.forModel.users[0];
|
||||
|
||||
UserModel.check({ email: userData.email, password: userData.password }).then(function (user) {
|
||||
return UsersAPI.read({ id: user.id });
|
||||
}).then(function (results) {
|
||||
results.users[0].created_at.should.be.an.instanceof(Date);
|
||||
results.users[0].updated_at.should.be.an.instanceof(Date);
|
||||
results.users[0].last_login.should.be.an.instanceof(Date);
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('can browse (owner)', function (done) {
|
||||
UsersAPI.browse({context: {user: 1}}).then(function (results) {
|
||||
should.exist(results);
|
||||
testUtils.API.checkResponse(results, 'users');
|
||||
should.exist(results.users);
|
||||
results.users.should.have.length(4);
|
||||
testUtils.API.checkResponse(results.users[0], 'user', ['roles']);
|
||||
testUtils.API.checkResponse(results.users[1], 'user', ['roles']);
|
||||
testUtils.API.checkResponse(results.users[2], 'user', ['roles']);
|
||||
testUtils.API.checkResponse(results.users[3], 'user', ['roles']);
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('can browse (admin)', function (done) {
|
||||
UsersAPI.browse({context: {user: 2}}).then(function (results) {
|
||||
should.exist(results);
|
||||
testUtils.API.checkResponse(results, 'users');
|
||||
should.exist(results.users);
|
||||
results.users.should.have.length(4);
|
||||
testUtils.API.checkResponse(results.users[0], 'user', ['roles']);
|
||||
testUtils.API.checkResponse(results.users[1], 'user', ['roles']);
|
||||
testUtils.API.checkResponse(results.users[2], 'user', ['roles']);
|
||||
testUtils.API.checkResponse(results.users[3], 'user', ['roles']);
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('can browse (editor)', function (done) {
|
||||
UsersAPI.browse({context: {user: 3}}).then(function (results) {
|
||||
should.exist(results);
|
||||
testUtils.API.checkResponse(results, 'users');
|
||||
should.exist(results.users);
|
||||
results.users.should.have.length(4);
|
||||
testUtils.API.checkResponse(results.users[0], 'user', ['roles']);
|
||||
testUtils.API.checkResponse(results.users[1], 'user', ['roles']);
|
||||
testUtils.API.checkResponse(results.users[2], 'user', ['roles']);
|
||||
testUtils.API.checkResponse(results.users[3], 'user', ['roles']);
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('can browse (author)', function (done) {
|
||||
UsersAPI.browse({context: {user: 4}}).then(function (results) {
|
||||
should.exist(results);
|
||||
testUtils.API.checkResponse(results, 'users');
|
||||
should.exist(results.users);
|
||||
results.users.should.have.length(4);
|
||||
testUtils.API.checkResponse(results.users[0], 'user', ['roles']);
|
||||
testUtils.API.checkResponse(results.users[1], 'user', ['roles']);
|
||||
testUtils.API.checkResponse(results.users[2], 'user', ['roles']);
|
||||
testUtils.API.checkResponse(results.users[3], 'user', ['roles']);
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('no-auth user cannot browse', function (done) {
|
||||
UsersAPI.browse().then(function () {
|
||||
done(new Error('Browse user is not denied without authentication.'));
|
||||
}, function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('can read (owner)', function (done) {
|
||||
UsersAPI.read({id: 1, context: {user: 1}}).then(function (results) {
|
||||
should.exist(results);
|
||||
should.not.exist(results.meta);
|
||||
should.exist(results.users);
|
||||
results.users[0].id.should.eql(1);
|
||||
testUtils.API.checkResponse(results.users[0], 'user', ['roles']);
|
||||
|
||||
results.users[0].created_at.should.be.a.Date;
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('can read (admin)', function (done) {
|
||||
UsersAPI.read({id: 1, context: {user: 2}}).then(function (results) {
|
||||
should.exist(results);
|
||||
should.not.exist(results.meta);
|
||||
should.exist(results.users);
|
||||
results.users[0].id.should.eql(1);
|
||||
testUtils.API.checkResponse(results.users[0], 'user', ['roles']);
|
||||
|
||||
results.users[0].created_at.should.be.a.Date;
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('can read (editor)', function (done) {
|
||||
UsersAPI.read({id: 1, context: {user: 3}}).then(function (results) {
|
||||
should.exist(results);
|
||||
should.not.exist(results.meta);
|
||||
should.exist(results.users);
|
||||
results.users[0].id.should.eql(1);
|
||||
testUtils.API.checkResponse(results.users[0], 'user', ['roles']);
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('can read (author)', function (done) {
|
||||
UsersAPI.read({id: 1, context: {user: 4}}).then(function (results) {
|
||||
should.exist(results);
|
||||
should.not.exist(results.meta);
|
||||
should.exist(results.users);
|
||||
results.users[0].id.should.eql(1);
|
||||
testUtils.API.checkResponse(results.users[0], 'user', ['roles']);
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('no-auth can read', function (done) {
|
||||
UsersAPI.read({id: 1}).then(function (results) {
|
||||
should.exist(results);
|
||||
should.not.exist(results.meta);
|
||||
should.exist(results.users);
|
||||
results.users[0].id.should.eql(1);
|
||||
testUtils.API.checkResponse(results.users[0], 'user', ['roles']);
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('can edit (owner)', function (done) {
|
||||
UsersAPI.edit({users: [{name: 'Joe Blogger'}]}, {id: 1, context: {user: 1}}).then(function (response) {
|
||||
should.exist(response);
|
||||
should.not.exist(response.meta);
|
||||
should.exist(response.users);
|
||||
response.users.should.have.length(1);
|
||||
testUtils.API.checkResponse(response.users[0], 'user', ['roles']);
|
||||
response.users[0].name.should.equal('Joe Blogger');
|
||||
response.users[0].updated_at.should.be.a.Date;
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('can edit (admin)', function (done) {
|
||||
UsersAPI.edit({users: [{name: 'Joe Blogger'}]}, {id: 1, context: {user: 2}}).then(function (response) {
|
||||
should.exist(response);
|
||||
should.not.exist(response.meta);
|
||||
should.exist(response.users);
|
||||
response.users.should.have.length(1);
|
||||
testUtils.API.checkResponse(response.users[0], 'user', ['roles']);
|
||||
response.users[0].name.should.equal('Joe Blogger');
|
||||
response.users[0].updated_at.should.be.a.Date;
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('can edit (editor)', function (done) {
|
||||
UsersAPI.edit({users: [{name: 'Joe Blogger'}]}, {id: 1, context: {user: 2}}).then(function (response) {
|
||||
should.exist(response);
|
||||
should.not.exist(response.meta);
|
||||
should.exist(response.users);
|
||||
response.users.should.have.length(1);
|
||||
testUtils.API.checkResponse(response.users[0], 'user', ['roles']);
|
||||
response.users[0].name.should.equal('Joe Blogger');
|
||||
response.users[0].updated_at.should.be.a.Date;
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('author can edit only self', function (done) {
|
||||
// Test author cannot edit admin user
|
||||
UsersAPI.edit({users: [{name: 'Joe Blogger'}]}, {id: 1, context: {user: 4}}).then(function () {
|
||||
done(new Error('Author should not be able to edit account which is not their own'));
|
||||
}).catch(function (error) {
|
||||
error.type.should.eql('NoPermissionError');
|
||||
}).finally(function () {
|
||||
// Next test that author CAN edit self
|
||||
return UsersAPI.edit({users: [{name: 'Timothy Bogendath'}]}, {id: 4, context: {user: 4}})
|
||||
.then(function (response) {
|
||||
should.exist(response);
|
||||
should.not.exist(response.meta);
|
||||
should.exist(response.users);
|
||||
response.users.should.have.length(1);
|
||||
testUtils.API.checkResponse(response.users[0], 'user', ['roles']);
|
||||
response.users[0].name.should.eql('Timothy Bogendath');
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
});
|
||||
|
||||
it('admin can\'t transfer ownership', function (done) {
|
||||
// transfer ownership to user id: 2
|
||||
UsersAPI.edit({users: [{name: 'Joe Blogger', roles:[4]}]}, {id: 3, context: {user: 2}}).then(function (response) {
|
||||
done(new Error('Admin is not dienied transferring ownership.'));
|
||||
}, function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('editor can\'t transfer ownership', function (done) {
|
||||
// transfer ownership to user id: 2
|
||||
UsersAPI.edit({users: [{name: 'Joe Blogger', roles:[4]}]}, {id: 2, context: {user: 3}}).then(function (response) {
|
||||
done(new Error('Admin is not dienied transferring ownership.'));
|
||||
}, function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('author can\'t transfer ownership', function (done) {
|
||||
// transfer ownership to user id: 2
|
||||
UsersAPI.edit({users: [{name: 'Joe Blogger', roles:[4]}]}, {id: 2, context: {user: 4}}).then(function (response) {
|
||||
done(new Error('Admin is not dienied transferring ownership.'));
|
||||
}, function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('owner can transfer ownership', function (done) {
|
||||
// transfer ownership to user id: 2
|
||||
UsersAPI.edit({users: [{name: 'Joe Blogger', roles:[4]}]}, {id: 2, context: {user: 1}}).then(function (response) {
|
||||
should.exist(response);
|
||||
should.not.exist(response.meta);
|
||||
should.exist(response.users);
|
||||
response.users.should.have.length(1);
|
||||
testUtils.API.checkResponse(response.users[0], 'user', ['roles']);
|
||||
response.users[0].name.should.equal('Joe Blogger');
|
||||
response.users[0].id.should.equal(2);
|
||||
response.users[0].roles[0].should.equal(4);
|
||||
response.users[0].updated_at.should.be.a.Date;
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
it('can\'t transfer ownership (admin)', function (done) {
|
||||
// transfer ownership to user id: 2
|
||||
UserAPI.edit(
|
||||
{users: [{name: 'Joe Blogger', roles:[4]}]}, _.extend(testUtils.context.admin, {id: 2})
|
||||
).then(function () {
|
||||
done(new Error('Admin is not dienied transferring ownership.'));
|
||||
}, function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
});
|
||||
|
||||
it('can\'t transfer ownership (editor)', function (done) {
|
||||
// transfer ownership to user id: 2
|
||||
UserAPI.edit(
|
||||
{users: [{name: 'Joe Blogger', roles:[4]}]}, _.extend(testUtils.context.editor, {id: 2})
|
||||
).then(function () {
|
||||
done(new Error('Admin is not dienied transferring ownership.'));
|
||||
}, function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('can\'t transfer ownership (author)', function (done) {
|
||||
// transfer ownership to user id: 2
|
||||
UserAPI.edit(
|
||||
{users: [{name: 'Joe Blogger', roles:[4]}]}, _.extend(testUtils.context.author, {id: 2})
|
||||
).then(function () {
|
||||
done(new Error('Admin is not dienied transferring ownership.'));
|
||||
}, function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('can transfer ownership (owner)', function (done) {
|
||||
// transfer ownership to user id: 2
|
||||
UserAPI.edit(
|
||||
{users: [{name: 'Joe Blogger', roles:[4]}]}, _.extend(testUtils.context.owner, {id: 2})
|
||||
).then(function (response) {
|
||||
should.exist(response);
|
||||
should.not.exist(response.meta);
|
||||
should.exist(response.users);
|
||||
response.users.should.have.length(1);
|
||||
testUtils.API.checkResponse(response.users[0], 'user', ['roles']);
|
||||
response.users[0].name.should.equal('Joe Blogger');
|
||||
response.users[0].id.should.equal(2);
|
||||
response.users[0].roles[0].should.equal(4);
|
||||
response.users[0].updated_at.should.be.a.Date;
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
});
|
|
@ -1,40 +1,26 @@
|
|||
/*globals describe, before, beforeEach, afterEach, it*/
|
||||
/*jshint expr:true*/
|
||||
var testUtils = require('../utils'),
|
||||
var testUtils = require('../utils/index'),
|
||||
should = require('should'),
|
||||
sinon = require('sinon'),
|
||||
when = require('when'),
|
||||
_ = require('lodash'),
|
||||
|
||||
// Stuff we are testing
|
||||
versioning = require('../../server/data/versioning'),
|
||||
exporter = require('../../server/data/export');
|
||||
versioning = require('../../server/data/versioning/index'),
|
||||
exporter = require('../../server/data/export/index'),
|
||||
sandbox = sinon.sandbox.create();
|
||||
|
||||
describe('Exporter', function () {
|
||||
|
||||
should.exist(exporter);
|
||||
|
||||
var sandbox;
|
||||
|
||||
before(function (done) {
|
||||
testUtils.clearData().then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
beforeEach(function (done) {
|
||||
sandbox = sinon.sandbox.create();
|
||||
testUtils.initData().then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
afterEach(function (done) {
|
||||
before(testUtils.teardown);
|
||||
afterEach(testUtils.teardown);
|
||||
afterEach(function () {
|
||||
sandbox.restore();
|
||||
testUtils.clearData().then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
beforeEach(testUtils.setup('default'));
|
||||
|
||||
should.exist(exporter);
|
||||
|
||||
it('exports data', function (done) {
|
||||
// Stub migrations to return 000 as the current database version
|
|
@ -1,122 +1,115 @@
|
|||
/*globals describe, beforeEach, afterEach, it*/
|
||||
/*globals describe, before, beforeEach, afterEach, it*/
|
||||
/*jshint expr:true*/
|
||||
var testUtils = require('../utils'),
|
||||
should = require('should'),
|
||||
sinon = require('sinon'),
|
||||
when = require('when'),
|
||||
assert = require('assert'),
|
||||
_ = require('lodash'),
|
||||
rewire = require('rewire'),
|
||||
var testUtils = require('../utils/index'),
|
||||
should = require('should'),
|
||||
sinon = require('sinon'),
|
||||
when = require('when'),
|
||||
assert = require('assert'),
|
||||
_ = require('lodash'),
|
||||
rewire = require('rewire'),
|
||||
|
||||
// Stuff we are testing
|
||||
config = rewire('../../server/config'),
|
||||
configUpdate = config.__get__('updateConfig'),
|
||||
defaultConfig = rewire('../../../config.example')[process.env.NODE_ENV],
|
||||
migration = rewire('../../server/data/migration'),
|
||||
versioning = require('../../server/data/versioning'),
|
||||
exporter = require('../../server/data/export'),
|
||||
importer = require('../../server/data/import'),
|
||||
Importer000 = require('../../server/data/import/000'),
|
||||
Importer001 = require('../../server/data/import/001'),
|
||||
Importer002 = require('../../server/data/import/002'),
|
||||
Importer003 = require('../../server/data/import/003');
|
||||
config = rewire('../../server/config'),
|
||||
configUpdate = config.__get__('updateConfig'),
|
||||
defaultConfig = rewire('../../../config.example')[process.env.NODE_ENV],
|
||||
migration = rewire('../../server/data/migration'),
|
||||
versioning = require('../../server/data/versioning'),
|
||||
exporter = require('../../server/data/export'),
|
||||
importer = require('../../server/data/import'),
|
||||
Importer000 = require('../../server/data/import/000'),
|
||||
Importer001 = require('../../server/data/import/001'),
|
||||
Importer002 = require('../../server/data/import/002'),
|
||||
Importer003 = require('../../server/data/import/003'),
|
||||
|
||||
knex,
|
||||
sandbox = sinon.sandbox.create();
|
||||
|
||||
describe('Import', function () {
|
||||
|
||||
should.exist(exporter);
|
||||
should.exist(importer);
|
||||
|
||||
var sandbox, knex;
|
||||
|
||||
beforeEach(function (done) {
|
||||
var newConfig = _.extend(config, defaultConfig);
|
||||
migration.__get__('config', newConfig);
|
||||
configUpdate(newConfig);
|
||||
knex = config.database.knex;
|
||||
|
||||
sandbox = sinon.sandbox.create();
|
||||
// clear database... we need to initialise it manually for each test
|
||||
testUtils.clearData().then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
before(testUtils.teardown);
|
||||
afterEach(testUtils.teardown);
|
||||
afterEach(function () {
|
||||
sandbox.restore();
|
||||
});
|
||||
|
||||
it('resolves 000', function (done) {
|
||||
var importStub = sandbox.stub(Importer000, 'importData', function () {
|
||||
return when.resolve();
|
||||
}),
|
||||
fakeData = { test: true };
|
||||
should.exist(exporter);
|
||||
should.exist(importer);
|
||||
|
||||
importer('000', fakeData).then(function () {
|
||||
importStub.calledWith(fakeData).should.equal(true);
|
||||
describe('Resolves', function () {
|
||||
|
||||
importStub.restore();
|
||||
beforeEach(testUtils.setup());
|
||||
beforeEach(function () {
|
||||
var newConfig = _.extend(config, defaultConfig);
|
||||
migration.__get__('config', newConfig);
|
||||
configUpdate(newConfig);
|
||||
knex = config.database.knex;
|
||||
});
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
it('resolves 000', function (done) {
|
||||
var importStub = sandbox.stub(Importer000, 'importData', function () {
|
||||
return when.resolve();
|
||||
}),
|
||||
fakeData = { test: true };
|
||||
|
||||
it('resolves 001', function (done) {
|
||||
var importStub = sandbox.stub(Importer001, 'importData', function () {
|
||||
return when.resolve();
|
||||
}),
|
||||
fakeData = { test: true };
|
||||
importer('000', fakeData).then(function () {
|
||||
importStub.calledWith(fakeData).should.equal(true);
|
||||
|
||||
importer('001', fakeData).then(function () {
|
||||
importStub.calledWith(fakeData).should.equal(true);
|
||||
importStub.restore();
|
||||
|
||||
importStub.restore();
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('resolves 002', function (done) {
|
||||
var importStub = sandbox.stub(Importer002, 'importData', function () {
|
||||
return when.resolve();
|
||||
}),
|
||||
fakeData = { test: true };
|
||||
|
||||
importer('002', fakeData).then(function () {
|
||||
importStub.calledWith(fakeData).should.equal(true);
|
||||
|
||||
importStub.restore();
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('resolves 003', function (done) {
|
||||
var importStub = sandbox.stub(Importer003, 'importData', function () {
|
||||
return when.resolve();
|
||||
}),
|
||||
fakeData = { test: true };
|
||||
|
||||
importer('003', fakeData).then(function () {
|
||||
importStub.calledWith(fakeData).should.equal(true);
|
||||
|
||||
importStub.restore();
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
describe('000', function () {
|
||||
should.exist(Importer000);
|
||||
|
||||
beforeEach(function (done) {
|
||||
// migrate to current version
|
||||
migration.migrateUpFreshDb().then(function () {
|
||||
return testUtils.insertDefaultUser();
|
||||
}).then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('resolves 001', function (done) {
|
||||
var importStub = sandbox.stub(Importer001, 'importData', function () {
|
||||
return when.resolve();
|
||||
}),
|
||||
fakeData = { test: true };
|
||||
|
||||
importer('001', fakeData).then(function () {
|
||||
importStub.calledWith(fakeData).should.equal(true);
|
||||
|
||||
importStub.restore();
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('resolves 002', function (done) {
|
||||
var importStub = sandbox.stub(Importer002, 'importData', function () {
|
||||
return when.resolve();
|
||||
}),
|
||||
fakeData = { test: true };
|
||||
|
||||
importer('002', fakeData).then(function () {
|
||||
importStub.calledWith(fakeData).should.equal(true);
|
||||
|
||||
importStub.restore();
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('resolves 003', function (done) {
|
||||
var importStub = sandbox.stub(Importer003, 'importData', function () {
|
||||
return when.resolve();
|
||||
}),
|
||||
fakeData = { test: true };
|
||||
|
||||
importer('003', fakeData).then(function () {
|
||||
importStub.calledWith(fakeData).should.equal(true);
|
||||
|
||||
importStub.restore();
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
});
|
||||
|
||||
describe('000', function () {
|
||||
|
||||
beforeEach(testUtils.setup('owner', 'settings'));
|
||||
|
||||
should.exist(Importer000);
|
||||
|
||||
it('imports data from 000', function (done) {
|
||||
var exportData,
|
||||
|
@ -124,7 +117,7 @@ describe('Import', function () {
|
|||
return when.resolve('000');
|
||||
});
|
||||
|
||||
testUtils.loadExportFixture('export-000').then(function (exported) {
|
||||
testUtils.fixtures.loadExportFixture('export-000').then(function (exported) {
|
||||
exportData = exported;
|
||||
|
||||
return importer('000', exportData);
|
||||
|
@ -146,10 +139,10 @@ describe('Import', function () {
|
|||
settings = importedData[2],
|
||||
tags = importedData[3];
|
||||
|
||||
// we always have 1 user, the default user we added
|
||||
// we always have 1 user, the owner user we added
|
||||
users.length.should.equal(1, 'There should only be one user');
|
||||
// import no longer requires all data to be dropped, and adds posts
|
||||
posts.length.should.equal(exportData.data.posts.length + 1, 'Wrong number of posts');
|
||||
posts.length.should.equal(exportData.data.posts.length, 'Wrong number of posts');
|
||||
|
||||
// test settings
|
||||
settings.length.should.be.above(0, 'Wrong number of settings');
|
||||
|
@ -166,22 +159,16 @@ describe('Import', function () {
|
|||
});
|
||||
|
||||
describe('001', function () {
|
||||
should.exist(Importer001);
|
||||
|
||||
beforeEach(function (done) {
|
||||
// migrate to current version
|
||||
migration.migrateUpFreshDb().then(function () {
|
||||
return testUtils.insertDefaultUser();
|
||||
}).then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
beforeEach(testUtils.setup('owner', 'settings'));
|
||||
|
||||
should.exist(Importer001);
|
||||
|
||||
it('safely imports data from 001', function (done) {
|
||||
var exportData,
|
||||
timestamp = 1349928000000;
|
||||
|
||||
testUtils.loadExportFixture('export-001').then(function (exported) {
|
||||
testUtils.fixtures.loadExportFixture('export-001').then(function (exported) {
|
||||
exportData = exported;
|
||||
|
||||
// Modify timestamp data for testing
|
||||
|
@ -221,7 +208,7 @@ describe('Import', function () {
|
|||
users[0].bio.should.equal(exportData.data.users[0].bio);
|
||||
|
||||
// import no longer requires all data to be dropped, and adds posts
|
||||
posts.length.should.equal(exportData.data.posts.length + 1, 'Wrong number of posts');
|
||||
posts.length.should.equal(exportData.data.posts.length, 'Wrong number of posts');
|
||||
|
||||
// test settings
|
||||
settings.length.should.be.above(0, 'Wrong number of settings');
|
||||
|
@ -241,10 +228,10 @@ describe('Import', function () {
|
|||
// When in sqlite we are returned a unix timestamp number,
|
||||
// in MySQL we're returned a date object.
|
||||
// We pass the returned post always through the date object
|
||||
// to ensure the return is consistant for all DBs.
|
||||
assert.equal(new Date(posts[1].created_at).getTime(), timestamp);
|
||||
assert.equal(new Date(posts[1].updated_at).getTime(), timestamp);
|
||||
assert.equal(new Date(posts[1].published_at).getTime(), timestamp);
|
||||
// to ensure the return is consistent for all DBs.
|
||||
assert.equal(new Date(posts[0].created_at).getTime(), timestamp);
|
||||
assert.equal(new Date(posts[0].updated_at).getTime(), timestamp);
|
||||
assert.equal(new Date(posts[0].published_at).getTime(), timestamp);
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
|
@ -253,8 +240,7 @@ describe('Import', function () {
|
|||
it('doesn\'t import invalid post data from 001', function (done) {
|
||||
var exportData;
|
||||
|
||||
|
||||
testUtils.loadExportFixture('export-001').then(function (exported) {
|
||||
testUtils.fixtures.loadExportFixture('export-001').then(function (exported) {
|
||||
exportData = exported;
|
||||
|
||||
//change title to 151 characters
|
||||
|
@ -285,15 +271,16 @@ describe('Import', function () {
|
|||
|
||||
// we always have 1 user, the default user we added
|
||||
users.length.should.equal(1, 'There should only be one user');
|
||||
// import no longer requires all data to be dropped, and adds posts
|
||||
posts.length.should.equal(exportData.data.posts.length, 'Wrong number of posts');
|
||||
|
||||
// Nothing should have been imported
|
||||
posts.length.should.equal(0, 'Wrong number of posts');
|
||||
tags.length.should.equal(0, 'no new tags');
|
||||
|
||||
// test settings
|
||||
settings.length.should.be.above(0, 'Wrong number of settings');
|
||||
_.findWhere(settings, {key: 'databaseVersion'}).value.should.equal('003', 'Wrong database version');
|
||||
|
||||
// test tags
|
||||
tags.length.should.equal(exportData.data.tags.length, 'no new tags');
|
||||
|
||||
|
||||
done();
|
||||
});
|
||||
|
@ -304,7 +291,7 @@ describe('Import', function () {
|
|||
it('doesn\'t import invalid settings data from 001', function (done) {
|
||||
var exportData;
|
||||
|
||||
testUtils.loadExportFixture('export-001').then(function (exported) {
|
||||
testUtils.fixtures.loadExportFixture('export-001').then(function (exported) {
|
||||
exportData = exported;
|
||||
//change to blank settings key
|
||||
exportData.data.settings[3].key = null;
|
||||
|
@ -333,16 +320,15 @@ describe('Import', function () {
|
|||
|
||||
// we always have 1 user, the default user we added
|
||||
users.length.should.equal(1, 'There should only be one user');
|
||||
// import no longer requires all data to be dropped, and adds posts
|
||||
posts.length.should.equal(exportData.data.posts.length, 'Wrong number of posts');
|
||||
|
||||
// Nothing should have been imported
|
||||
posts.length.should.equal(0, 'Wrong number of posts');
|
||||
tags.length.should.equal(0, 'no new tags');
|
||||
|
||||
// test settings
|
||||
settings.length.should.be.above(0, 'Wrong number of settings');
|
||||
_.findWhere(settings, {key: 'databaseVersion'}).value.should.equal('003', 'Wrong database version');
|
||||
|
||||
// test tags
|
||||
tags.length.should.equal(exportData.data.tags.length, 'no new tags');
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
|
@ -351,22 +337,16 @@ describe('Import', function () {
|
|||
});
|
||||
|
||||
describe('002', function () {
|
||||
should.exist(Importer002);
|
||||
|
||||
beforeEach(function (done) {
|
||||
// migrate to current version
|
||||
migration.migrateUpFreshDb().then(function () {
|
||||
return testUtils.insertDefaultUser();
|
||||
}).then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
beforeEach(testUtils.setup('owner', 'settings'));
|
||||
|
||||
should.exist(Importer002);
|
||||
|
||||
it('safely imports data from 002', function (done) {
|
||||
var exportData,
|
||||
timestamp = 1349928000000;
|
||||
|
||||
testUtils.loadExportFixture('export-002').then(function (exported) {
|
||||
testUtils.fixtures.loadExportFixture('export-002').then(function (exported) {
|
||||
exportData = exported;
|
||||
|
||||
// Modify timestamp data for testing
|
||||
|
@ -394,7 +374,7 @@ describe('Import', function () {
|
|||
tags = importedData[3],
|
||||
exportEmail;
|
||||
|
||||
// we always have 1 user, the default user we added
|
||||
// we always have 1 user, the owner user we added
|
||||
users.length.should.equal(1, 'There should only be one user');
|
||||
|
||||
// user should still have the credentials from the original insert, not the import
|
||||
|
@ -406,7 +386,7 @@ describe('Import', function () {
|
|||
users[0].bio.should.equal(exportData.data.users[0].bio);
|
||||
|
||||
// import no longer requires all data to be dropped, and adds posts
|
||||
posts.length.should.equal(exportData.data.posts.length + 1, 'Wrong number of posts');
|
||||
posts.length.should.equal(exportData.data.posts.length, 'Wrong number of posts');
|
||||
|
||||
// test settings
|
||||
settings.length.should.be.above(0, 'Wrong number of settings');
|
||||
|
@ -427,9 +407,9 @@ describe('Import', function () {
|
|||
// in MySQL we're returned a date object.
|
||||
// We pass the returned post always through the date object
|
||||
// to ensure the return is consistant for all DBs.
|
||||
assert.equal(new Date(posts[1].created_at).getTime(), timestamp);
|
||||
assert.equal(new Date(posts[1].updated_at).getTime(), timestamp);
|
||||
assert.equal(new Date(posts[1].published_at).getTime(), timestamp);
|
||||
assert.equal(new Date(posts[0].created_at).getTime(), timestamp);
|
||||
assert.equal(new Date(posts[0].updated_at).getTime(), timestamp);
|
||||
assert.equal(new Date(posts[0].published_at).getTime(), timestamp);
|
||||
|
||||
done();
|
||||
}).catch(function (error) {
|
||||
|
@ -441,7 +421,7 @@ describe('Import', function () {
|
|||
var exportData;
|
||||
|
||||
|
||||
testUtils.loadExportFixture('export-002').then(function (exported) {
|
||||
testUtils.fixtures.loadExportFixture('export-002').then(function (exported) {
|
||||
exportData = exported;
|
||||
|
||||
//change title to 151 characters
|
||||
|
@ -470,18 +450,16 @@ describe('Import', function () {
|
|||
settings = importedData[2],
|
||||
tags = importedData[3];
|
||||
|
||||
// we always have 1 user, the default user we added
|
||||
// we always have 1 user, the owner user we added
|
||||
users.length.should.equal(1, 'There should only be one user');
|
||||
// import no longer requires all data to be dropped, and adds posts
|
||||
posts.length.should.equal(exportData.data.posts.length, 'Wrong number of posts');
|
||||
// Nothing should have been imported
|
||||
posts.length.should.equal(0, 'Wrong number of posts');
|
||||
tags.length.should.equal(0, 'no new tags');
|
||||
|
||||
// test settings
|
||||
settings.length.should.be.above(0, 'Wrong number of settings');
|
||||
_.findWhere(settings, {key: 'databaseVersion'}).value.should.equal('003', 'Wrong database version');
|
||||
|
||||
// test tags
|
||||
tags.length.should.equal(exportData.data.tags.length, 'no new tags');
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
|
@ -491,7 +469,7 @@ describe('Import', function () {
|
|||
it('doesn\'t import invalid settings data from 002', function (done) {
|
||||
var exportData;
|
||||
|
||||
testUtils.loadExportFixture('export-002').then(function (exported) {
|
||||
testUtils.fixtures.loadExportFixture('export-002').then(function (exported) {
|
||||
exportData = exported;
|
||||
//change to blank settings key
|
||||
exportData.data.settings[3].key = null;
|
||||
|
@ -518,18 +496,16 @@ describe('Import', function () {
|
|||
settings = importedData[2],
|
||||
tags = importedData[3];
|
||||
|
||||
// we always have 1 user, the default user we added
|
||||
// we always have 1 user, the owner user we added
|
||||
users.length.should.equal(1, 'There should only be one user');
|
||||
// import no longer requires all data to be dropped, and adds posts
|
||||
posts.length.should.equal(exportData.data.posts.length, 'Wrong number of posts');
|
||||
// Nothing should have been imported
|
||||
posts.length.should.equal(0, 'Wrong number of posts');
|
||||
tags.length.should.equal(0, 'no new tags');
|
||||
|
||||
// test settings
|
||||
settings.length.should.be.above(0, 'Wrong number of settings');
|
||||
_.findWhere(settings, {key: 'databaseVersion'}).value.should.equal('003', 'Wrong database version');
|
||||
|
||||
// test tags
|
||||
tags.length.should.equal(exportData.data.tags.length, 'no new tags');
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
|
@ -538,21 +514,15 @@ describe('Import', function () {
|
|||
});
|
||||
|
||||
describe('003', function () {
|
||||
should.exist(Importer003);
|
||||
|
||||
beforeEach(function (done) {
|
||||
// migrate to current version
|
||||
migration.migrateUpFreshDb().then(function () {
|
||||
return testUtils.insertDefaultUser();
|
||||
}).then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
beforeEach(testUtils.setup('owner', 'settings'));
|
||||
|
||||
should.exist(Importer003);
|
||||
|
||||
it('safely imports data from 003', function (done) {
|
||||
var exportData;
|
||||
|
||||
testUtils.loadExportFixture('export-003').then(function (exported) {
|
||||
testUtils.fixtures.loadExportFixture('export-003').then(function (exported) {
|
||||
exportData = exported;
|
||||
return importer('003', exportData);
|
||||
}).then(function () {
|
|
@ -5,22 +5,13 @@ var testUtils = require('../../utils'),
|
|||
|
||||
// Stuff we are testing
|
||||
AppFieldsModel = require('../../../server/models').AppField,
|
||||
context = {context: {user: 1}};
|
||||
context = testUtils.context.admin;
|
||||
|
||||
describe('App Fields Model', function () {
|
||||
// Keep the DB clean
|
||||
before(testUtils.teardown);
|
||||
afterEach(testUtils.teardown);
|
||||
|
||||
beforeEach(function (done) {
|
||||
testUtils.initData()
|
||||
.then(function () {
|
||||
return testUtils.insertApps();
|
||||
})
|
||||
.then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
beforeEach(testUtils.setup('app_field'));
|
||||
|
||||
should.exist(AppFieldsModel);
|
||||
|
||||
|
|
|
@ -5,22 +5,13 @@ var testUtils = require('../../utils'),
|
|||
|
||||
// Stuff we are testing
|
||||
AppSettingModel = require('../../../server/models').AppSetting,
|
||||
context = {context: {user: 1}};
|
||||
context = testUtils.context.admin;
|
||||
|
||||
describe('App Setting Model', function () {
|
||||
// Keep the DB clean
|
||||
before(testUtils.teardown);
|
||||
afterEach(testUtils.teardown);
|
||||
|
||||
beforeEach(function (done) {
|
||||
testUtils.initData()
|
||||
.then(function () {
|
||||
return testUtils.insertAppWithSettings();
|
||||
})
|
||||
.then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
beforeEach(testUtils.setup('app_setting'));
|
||||
|
||||
should.exist(AppSettingModel);
|
||||
|
||||
|
|
|
@ -1,29 +1,19 @@
|
|||
/*globals describe, before, beforeEach, afterEach, it*/
|
||||
/*jshint expr:true*/
|
||||
var testUtils = require('../../utils'),
|
||||
should = require('should'),
|
||||
sequence = require('when/sequence'),
|
||||
_ = require('lodash'),
|
||||
var testUtils = require('../../utils'),
|
||||
should = require('should'),
|
||||
sequence = require('when/sequence'),
|
||||
_ = require('lodash'),
|
||||
|
||||
// Stuff we are testing
|
||||
Models = require('../../../server/models'),
|
||||
context = {context: {user: 1}},
|
||||
AppModel = Models.App;
|
||||
AppModel = require('../../../server/models').App,
|
||||
context = testUtils.context.admin;
|
||||
|
||||
describe('App Model', function () {
|
||||
// Keep the DB clean
|
||||
before(testUtils.teardown);
|
||||
afterEach(testUtils.teardown);
|
||||
|
||||
beforeEach(function (done) {
|
||||
testUtils.initData()
|
||||
.then(function () {
|
||||
return testUtils.insertDefaultApp();
|
||||
})
|
||||
.then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
beforeEach(testUtils.setup('app'));
|
||||
|
||||
should.exist(AppModel);
|
||||
|
||||
|
|
|
@ -5,18 +5,13 @@ var testUtils = require('../../utils'),
|
|||
|
||||
// Stuff we are testing
|
||||
PermissionModel = require('../../../server/models').Permission,
|
||||
context = {context: {user: 1}};
|
||||
context = testUtils.context.admin;
|
||||
|
||||
describe('Permission Model', function () {
|
||||
// Keep the DB clean
|
||||
before(testUtils.teardown);
|
||||
afterEach(testUtils.teardown);
|
||||
|
||||
beforeEach(function (done) {
|
||||
testUtils.initData().then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
beforeEach(testUtils.setup('permission'));
|
||||
|
||||
should.exist(PermissionModel);
|
||||
|
||||
|
@ -88,4 +83,93 @@ describe('Permission Model', function () {
|
|||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
|
||||
// it('can add user to role', function (done) {
|
||||
// var existingUserRoles;
|
||||
//
|
||||
// Models.User.findOne({id: 1}, { withRelated: ['roles'] }).then(function (foundUser) {
|
||||
// var testRole = new Models.Role({
|
||||
// name: 'testrole1',
|
||||
// description: 'testrole1 description'
|
||||
// });
|
||||
//
|
||||
// should.exist(foundUser);
|
||||
//
|
||||
// should.exist(foundUser.roles());
|
||||
//
|
||||
// existingUserRoles = foundUser.related('roles').length;
|
||||
//
|
||||
// return testRole.save(null, context).then(function () {
|
||||
// return foundUser.roles().attach(testRole);
|
||||
// });
|
||||
// }).then(function () {
|
||||
// return Models.User.findOne({id: 1}, { withRelated: ['roles'] });
|
||||
// }).then(function (updatedUser) {
|
||||
// should.exist(updatedUser);
|
||||
//
|
||||
// updatedUser.related('roles').length.should.equal(existingUserRoles + 1);
|
||||
//
|
||||
// done();
|
||||
// }).catch(done);
|
||||
// });
|
||||
//
|
||||
// it('can add user permissions', function (done) {
|
||||
// Models.User.findOne({id: 1}, { withRelated: ['permissions']}).then(function (testUser) {
|
||||
// var testPermission = new Models.Permission({
|
||||
// name: 'test edit posts',
|
||||
// action_type: 'edit',
|
||||
// object_type: 'post'
|
||||
// });
|
||||
//
|
||||
// testUser.related('permissions').length.should.equal(0);
|
||||
//
|
||||
// return testPermission.save(null, context).then(function () {
|
||||
// return testUser.permissions().attach(testPermission);
|
||||
// });
|
||||
// }).then(function () {
|
||||
// return Models.User.findOne({id: 1}, { include: ['permissions']});
|
||||
// }).then(function (updatedUser) {
|
||||
// should.exist(updatedUser);
|
||||
//
|
||||
// updatedUser.related('permissions').length.should.equal(1);
|
||||
//
|
||||
// done();
|
||||
// }).catch(done);
|
||||
// });
|
||||
//
|
||||
// it('can add role permissions', function (done) {
|
||||
// var testRole = new Models.Role({
|
||||
// name: 'test2',
|
||||
// description: 'test2 description'
|
||||
// });
|
||||
//
|
||||
// testRole.save(null, context)
|
||||
// .then(function () {
|
||||
// return testRole.load('permissions');
|
||||
// })
|
||||
// .then(function () {
|
||||
// var rolePermission = new Models.Permission({
|
||||
// name: 'test edit posts',
|
||||
// action_type: 'edit',
|
||||
// object_type: 'post'
|
||||
// });
|
||||
//
|
||||
// testRole.related('permissions').length.should.equal(0);
|
||||
//
|
||||
// return rolePermission.save(null, context).then(function () {
|
||||
// return testRole.permissions().attach(rolePermission);
|
||||
// });
|
||||
// })
|
||||
// .then(function () {
|
||||
// return Models.Role.findOne({id: testRole.id}, { withRelated: ['permissions']});
|
||||
// })
|
||||
// .then(function (updatedRole) {
|
||||
// should.exist(updatedRole);
|
||||
//
|
||||
// updatedRole.related('permissions').length.should.equal(1);
|
||||
//
|
||||
// done();
|
||||
// }).catch(done);
|
||||
// });
|
||||
});
|
||||
|
|
|
@ -8,22 +8,13 @@ var testUtils = require('../../utils'),
|
|||
// Stuff we are testing
|
||||
PostModel = require('../../../server/models').Post,
|
||||
DataGenerator = testUtils.DataGenerator,
|
||||
context = {context: {user: 1}};
|
||||
context = testUtils.context.owner;
|
||||
|
||||
describe('Post Model', function () {
|
||||
// Keep the DB clean
|
||||
before(testUtils.teardown);
|
||||
afterEach(testUtils.teardown);
|
||||
|
||||
beforeEach(function (done) {
|
||||
testUtils.initData()
|
||||
.then(function () {
|
||||
return testUtils.insertDefaultFixtures();
|
||||
})
|
||||
.then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
beforeEach(testUtils.setup('owner', 'posts', 'apps'));
|
||||
|
||||
should.exist(PostModel);
|
||||
|
||||
|
@ -41,7 +32,7 @@ describe('Post Model', function () {
|
|||
firstPost.created_by.name.should.equal(DataGenerator.Content.users[0].name);
|
||||
firstPost.updated_by.name.should.equal(DataGenerator.Content.users[0].name);
|
||||
firstPost.published_by.name.should.equal(DataGenerator.Content.users[0].name);
|
||||
firstPost.tags[0].name.should.equal('Getting Started');
|
||||
firstPost.tags[0].name.should.equal(DataGenerator.Content.tags[0].name);
|
||||
}
|
||||
|
||||
it('can findAll', function (done) {
|
||||
|
@ -61,7 +52,6 @@ describe('Post Model', function () {
|
|||
should.exist(results);
|
||||
results.length.should.be.above(0);
|
||||
firstPost = results.models[0].toJSON();
|
||||
|
||||
checkFirstPostData(firstPost);
|
||||
|
||||
done();
|
||||
|
@ -75,7 +65,7 @@ describe('Post Model', function () {
|
|||
results.meta.pagination.page.should.equal(1);
|
||||
results.meta.pagination.limit.should.equal(15);
|
||||
results.meta.pagination.pages.should.equal(1);
|
||||
results.posts.length.should.equal(5);
|
||||
results.posts.length.should.equal(4);
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
|
@ -91,7 +81,7 @@ describe('Post Model', function () {
|
|||
results.meta.pagination.page.should.equal(1);
|
||||
results.meta.pagination.limit.should.equal(15);
|
||||
results.meta.pagination.pages.should.equal(1);
|
||||
results.posts.length.should.equal(5);
|
||||
results.posts.length.should.equal(4);
|
||||
|
||||
firstPost = results.posts[0];
|
||||
|
||||
|
@ -371,7 +361,7 @@ describe('Post Model', function () {
|
|||
should.exist(results);
|
||||
post = results.toJSON();
|
||||
post.id.should.equal(firstItemData.id);
|
||||
post.tags.should.have.length(1);
|
||||
post.tags.should.have.length(2);
|
||||
post.tags[0].should.equal(firstItemData.id);
|
||||
|
||||
// Destroy the post
|
||||
|
@ -392,9 +382,9 @@ describe('Post Model', function () {
|
|||
});
|
||||
|
||||
it('can findPage, with various options', function (done) {
|
||||
testUtils.insertMorePosts().then(function () {
|
||||
testUtils.fixtures.insertMorePosts().then(function () {
|
||||
|
||||
return testUtils.insertMorePostsTags();
|
||||
return testUtils.fixtures.insertMorePostsTags();
|
||||
}).then(function () {
|
||||
return PostModel.findPage({page: 2});
|
||||
}).then(function (paginationResult) {
|
||||
|
@ -441,9 +431,9 @@ describe('Post Model', function () {
|
|||
}).catch(done);
|
||||
});
|
||||
it('can findPage for tag, with various options', function (done) {
|
||||
testUtils.insertMorePosts().then(function () {
|
||||
testUtils.fixtures.insertMorePosts().then(function () {
|
||||
|
||||
return testUtils.insertMorePostsTags();
|
||||
return testUtils.fixtures.insertMorePostsTags();
|
||||
}).then(function () {
|
||||
// Test tag filter
|
||||
return PostModel.findPage({page: 1, tag: 'bacon'});
|
||||
|
@ -480,7 +470,7 @@ describe('Post Model', function () {
|
|||
paginationResult.meta.pagination.pages.should.equal(2);
|
||||
paginationResult.meta.filters.tags[0].name.should.equal('injection');
|
||||
paginationResult.meta.filters.tags[0].slug.should.equal('injection');
|
||||
paginationResult.posts.length.should.equal(11);
|
||||
paginationResult.posts.length.should.equal(10);
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
|
|
|
@ -5,18 +5,14 @@ var testUtils = require('../../utils'),
|
|||
|
||||
// Stuff we are testing
|
||||
RoleModel = require('../../../server/models').Role,
|
||||
context = {context: {user: 1}};
|
||||
context = testUtils.context.admin;
|
||||
|
||||
describe('Role Model', function () {
|
||||
// Keep the DB clean
|
||||
before(testUtils.teardown);
|
||||
afterEach(testUtils.teardown);
|
||||
|
||||
beforeEach(function (done) {
|
||||
testUtils.initData().then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
beforeEach(testUtils.setup('role'));
|
||||
|
||||
should.exist(RoleModel);
|
||||
|
||||
|
|
|
@ -6,18 +6,13 @@ var testUtils = require('../../utils'),
|
|||
// Stuff we are testing
|
||||
SettingsModel = require('../../../server/models').Settings,
|
||||
config = require('../../../server/config'),
|
||||
context = {context: {user: 1}};
|
||||
context = testUtils.context.admin;
|
||||
|
||||
describe('Settings Model', function () {
|
||||
// Keep the DB clean
|
||||
before(testUtils.teardown);
|
||||
afterEach(testUtils.teardown);
|
||||
|
||||
beforeEach(function (done) {
|
||||
testUtils.initData().then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
beforeEach(testUtils.setup('settings'));
|
||||
|
||||
should.exist(SettingsModel);
|
||||
|
||||
|
|
|
@ -9,19 +9,13 @@ var testUtils = require('../../utils'),
|
|||
Models = require('../../../server/models'),
|
||||
TagModel = Models.Tag,
|
||||
PostModel = Models.Post,
|
||||
context = {context: {user: 1}};
|
||||
context = testUtils.context.admin;
|
||||
|
||||
describe('Tag Model', function () {
|
||||
// Keep the DB clean
|
||||
before(testUtils.teardown);
|
||||
afterEach(testUtils.teardown);
|
||||
|
||||
beforeEach(function (done) {
|
||||
testUtils.initData()
|
||||
.then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
beforeEach(testUtils.setup());
|
||||
|
||||
should.exist(TagModel);
|
||||
|
||||
|
@ -141,7 +135,7 @@ describe('Tag Model', function () {
|
|||
|
||||
return TagModel.findAll();
|
||||
}).then(function (tagsFromDB) {
|
||||
tagsFromDB.length.should.eql(seededTagNames.length + 1);
|
||||
tagsFromDB.length.should.eql(seededTagNames.length);
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
|
@ -198,7 +192,7 @@ describe('Tag Model', function () {
|
|||
|
||||
// make sure it hasn't just added a new tag with the same name
|
||||
// Don't expect a certain order in results - check for number of items!
|
||||
Math.max.apply(Math, tagIds).should.eql(4);
|
||||
Math.max.apply(Math, tagIds).should.eql(3);
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
|
@ -284,7 +278,7 @@ describe('Tag Model', function () {
|
|||
|
||||
// make sure it hasn't just added a new tag with the same name
|
||||
// Don't expect a certain order in results - check for number of items!
|
||||
Math.max.apply(Math, tagIds).should.eql(4);
|
||||
Math.max.apply(Math, tagIds).should.eql(3);
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
|
@ -323,7 +317,7 @@ describe('Tag Model', function () {
|
|||
|
||||
// make sure it hasn't just added a new tag with the same name
|
||||
// Don't expect a certain order in results - check for number of items!
|
||||
Math.max.apply(Math, tagIds).should.eql(5);
|
||||
Math.max.apply(Math, tagIds).should.eql(4);
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
|
|
|
@ -8,60 +8,62 @@ var testUtils = require('../../utils'),
|
|||
|
||||
// Stuff we are testing
|
||||
UserModel = require('../../../server/models').User,
|
||||
context = {context: {user: 1}};
|
||||
context = testUtils.context.admin,
|
||||
sandbox = sinon.sandbox.create();
|
||||
|
||||
|
||||
describe('User Model', function run() {
|
||||
// Keep the DB clean
|
||||
before(testUtils.teardown);
|
||||
afterEach(testUtils.teardown);
|
||||
afterEach(function () {
|
||||
sandbox.restore();
|
||||
});
|
||||
|
||||
should.exist(UserModel);
|
||||
|
||||
describe('Registration', function runRegistration() {
|
||||
beforeEach(function (done) {
|
||||
testUtils.initData().then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
beforeEach(testUtils.setup());
|
||||
|
||||
it('can add first', function (done) {
|
||||
var userData = testUtils.DataGenerator.forModel.users[0],
|
||||
gravatarStub = sinon.stub(UserModel, 'gravatarLookup', function (userData) {
|
||||
return when.resolve(userData);
|
||||
});
|
||||
var userData = testUtils.DataGenerator.forModel.users[0];
|
||||
|
||||
sandbox.stub(UserModel, 'gravatarLookup', function (userData) {
|
||||
return when.resolve(userData);
|
||||
});
|
||||
|
||||
UserModel.add(userData, context).then(function (createdUser) {
|
||||
should.exist(createdUser);
|
||||
createdUser.has('uuid').should.equal(true);
|
||||
createdUser.attributes.password.should.not.equal(userData.password, 'password was hashed');
|
||||
createdUser.attributes.email.should.eql(userData.email, 'email address correct');
|
||||
gravatarStub.restore();
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('does NOT lowercase email', function (done) {
|
||||
var userData = testUtils.DataGenerator.forModel.users[2],
|
||||
gravatarStub = sinon.stub(UserModel, 'gravatarLookup', function (userData) {
|
||||
return when.resolve(userData);
|
||||
});
|
||||
var userData = testUtils.DataGenerator.forModel.users[2];
|
||||
|
||||
sandbox.stub(UserModel, 'gravatarLookup', function (userData) {
|
||||
return when.resolve(userData);
|
||||
});
|
||||
|
||||
UserModel.add(userData, context).then(function (createdUser) {
|
||||
should.exist(createdUser);
|
||||
createdUser.has('uuid').should.equal(true);
|
||||
createdUser.attributes.email.should.eql(userData.email, 'email address correct');
|
||||
gravatarStub.restore();
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('can find gravatar', function (done) {
|
||||
var userData = testUtils.DataGenerator.forModel.users[4],
|
||||
gravatarStub = sinon.stub(UserModel, 'gravatarLookup', function (userData) {
|
||||
userData.image = 'http://www.gravatar.com/avatar/2fab21a4c4ed88e76add10650c73bae1?d=404';
|
||||
return when.resolve(userData);
|
||||
});
|
||||
var userData = testUtils.DataGenerator.forModel.users[4];
|
||||
|
||||
sandbox.stub(UserModel, 'gravatarLookup', function (userData) {
|
||||
userData.image = 'http://www.gravatar.com/avatar/2fab21a4c4ed88e76add10650c73bae1?d=404';
|
||||
return when.resolve(userData);
|
||||
});
|
||||
|
||||
UserModel.add(userData, context).then(function (createdUser) {
|
||||
should.exist(createdUser);
|
||||
|
@ -69,22 +71,21 @@ describe('User Model', function run() {
|
|||
createdUser.attributes.image.should.eql(
|
||||
'http://www.gravatar.com/avatar/2fab21a4c4ed88e76add10650c73bae1?d=404', 'Gravatar found'
|
||||
);
|
||||
gravatarStub.restore();
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('can handle no gravatar', function (done) {
|
||||
var userData = testUtils.DataGenerator.forModel.users[0],
|
||||
gravatarStub = sinon.stub(UserModel, 'gravatarLookup', function (userData) {
|
||||
return when.resolve(userData);
|
||||
});
|
||||
var userData = testUtils.DataGenerator.forModel.users[0];
|
||||
|
||||
sandbox.stub(UserModel, 'gravatarLookup', function (userData) {
|
||||
return when.resolve(userData);
|
||||
});
|
||||
|
||||
UserModel.add(userData, context).then(function (createdUser) {
|
||||
should.exist(createdUser);
|
||||
createdUser.has('uuid').should.equal(true);
|
||||
should.not.exist(createdUser.image);
|
||||
gravatarStub.restore();
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
@ -124,16 +125,7 @@ describe('User Model', function run() {
|
|||
});
|
||||
|
||||
describe('Basic Operations', function () {
|
||||
|
||||
beforeEach(function (done) {
|
||||
testUtils.initData()
|
||||
.then(function () {
|
||||
return when(testUtils.insertDefaultUser());
|
||||
})
|
||||
.then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
beforeEach(testUtils.setup('owner'));
|
||||
|
||||
it('sets last login time on successful login', function (done) {
|
||||
var userData = testUtils.DataGenerator.forModel.users[0];
|
||||
|
@ -246,16 +238,7 @@ describe('User Model', function run() {
|
|||
});
|
||||
|
||||
describe('Password Reset', function () {
|
||||
|
||||
beforeEach(function (done) {
|
||||
testUtils.initData()
|
||||
.then(function () {
|
||||
return when(testUtils.insertDefaultUser());
|
||||
})
|
||||
.then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
beforeEach(testUtils.setup('owner'));
|
||||
|
||||
it('can generate reset token', function (done) {
|
||||
// Expires in one minute
|
||||
|
|
|
@ -1,14 +1,16 @@
|
|||
/*globals describe, before, beforeEach, afterEach, after, it */
|
||||
var should = require('should'),
|
||||
rewire = require('rewire'),
|
||||
_ = require('lodash'),
|
||||
packageInfo = require('../../../package'),
|
||||
ghost = require('../../../core'),
|
||||
config = rewire('../../../core/server/config'),
|
||||
defaultConfig = require('../../../config.example')[process.env.NODE_ENV],
|
||||
permissions = require('../../server/permissions'),
|
||||
testUtils = require('../utils'),
|
||||
updateCheck = rewire('../../server/update-check');
|
||||
/*globals describe, before, beforeEach, afterEach, after, it*/
|
||||
/*jshint expr:true*/
|
||||
var testUtils = require('../utils'),
|
||||
should = require('should'),
|
||||
rewire = require('rewire'),
|
||||
_ = require('lodash'),
|
||||
|
||||
// Stuff we are testing
|
||||
packageInfo = require('../../../package'),
|
||||
ghost = require('../../../core'),
|
||||
config = rewire('../../../core/server/config'),
|
||||
defaultConfig = require('../../../config.example')[process.env.NODE_ENV],
|
||||
updateCheck = rewire('../../server/update-check');
|
||||
|
||||
describe('Update Check', function () {
|
||||
var environmentsOrig;
|
||||
|
@ -33,22 +35,7 @@ describe('Update Check', function () {
|
|||
updateCheck.__set__('allowedCheckEnvironments', environmentsOrig);
|
||||
});
|
||||
|
||||
beforeEach(function (done) {
|
||||
testUtils.initData().then(function () {
|
||||
return testUtils.insertDefaultFixtures();
|
||||
}).then(function () {
|
||||
return testUtils.insertEditorUser();
|
||||
}).then(function () {
|
||||
return testUtils.insertAuthorUser();
|
||||
}).then(function () {
|
||||
return permissions.init();
|
||||
}).then(function () {
|
||||
done();
|
||||
}).catch(function (err) {
|
||||
console.log('Update Check beforeEach error', err);
|
||||
throw new Error(err);
|
||||
});
|
||||
});
|
||||
beforeEach(testUtils.setup('owner', 'posts'));
|
||||
|
||||
afterEach(testUtils.teardown);
|
||||
|
||||
|
|
|
@ -1,442 +1,284 @@
|
|||
/*globals describe, before, beforeEach, afterEach, after, it*/
|
||||
/*jshint expr:true*/
|
||||
var testUtils = require('../utils'),
|
||||
should = require('should'),
|
||||
sinon = require('sinon'),
|
||||
when = require('when'),
|
||||
_ = require('lodash'),
|
||||
Models = require('../../server/models'),
|
||||
var testUtils = require('../utils'),
|
||||
should = require('should'),
|
||||
sinon = require('sinon'),
|
||||
when = require('when'),
|
||||
_ = require('lodash'),
|
||||
|
||||
// Stuff we are testing
|
||||
permissions = require('../../server/permissions'),
|
||||
effectivePerms = require('../../server/permissions/effective'),
|
||||
context = {context: {user: 1}};
|
||||
ModelPermission = require('../../server/models').Permission,
|
||||
ModelPermissions = require('../../server/models').Permissions,
|
||||
permissions = require('../../server/permissions'),
|
||||
effectivePerms = require('../../server/permissions/effective'),
|
||||
context = testUtils.context.owner,
|
||||
|
||||
sandbox = sinon.sandbox.create();
|
||||
|
||||
// TODO move to integrations or stub
|
||||
|
||||
describe('Permissions', function () {
|
||||
|
||||
var sandbox;
|
||||
|
||||
before(function (done) {
|
||||
testUtils.clearData().then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
afterEach(function (done) {
|
||||
afterEach(function () {
|
||||
sandbox.restore();
|
||||
testUtils.clearData()
|
||||
.then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
after(function (done) {
|
||||
testUtils.clearData().then(function () {
|
||||
beforeEach(function () {
|
||||
var permissions = _.map(testUtils.DataGenerator.Content.permissions, function (testPerm) {
|
||||
return testUtils.DataGenerator.forKnex.createPermission(testPerm);
|
||||
});
|
||||
|
||||
sandbox.stub(ModelPermission, 'findAll', function () {
|
||||
return when(ModelPermissions.forge(permissions));
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
it('can load an actions map from existing permissions', function (done) {
|
||||
permissions.init().then(function (actionsMap) {
|
||||
should.exist(actionsMap);
|
||||
|
||||
actionsMap.edit.sort().should.eql(['post', 'tag', 'user', 'page'].sort());
|
||||
|
||||
actionsMap.should.equal(permissions.actionsMap);
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
var testPerms = [
|
||||
{ act: 'edit', obj: 'post' },
|
||||
{ act: 'edit', obj: 'tag' },
|
||||
{ act: 'edit', obj: 'user' },
|
||||
{ act: 'edit', obj: 'page' },
|
||||
{ act: 'add', obj: 'post' },
|
||||
{ act: 'add', obj: 'user' },
|
||||
{ act: 'add', obj: 'page' },
|
||||
{ act: 'destroy', obj: 'post' },
|
||||
{ act: 'destroy', obj: 'user' }
|
||||
],
|
||||
currTestPermId = 1,
|
||||
|
||||
createPermission = function (name, act, obj) {
|
||||
if (!name) {
|
||||
currTestPermId += 1;
|
||||
name = 'test' + currTestPermId;
|
||||
}
|
||||
|
||||
var newPerm = {
|
||||
name: name,
|
||||
action_type: act,
|
||||
object_type: obj
|
||||
};
|
||||
|
||||
return Models.Permission.add(newPerm, context);
|
||||
},
|
||||
createTestPermissions = function () {
|
||||
var createActions = _.map(testPerms, function (testPerm) {
|
||||
return createPermission(null, testPerm.act, testPerm.obj);
|
||||
});
|
||||
|
||||
return when.all(createActions);
|
||||
};
|
||||
|
||||
describe('Init Permissions', function () {
|
||||
|
||||
beforeEach(function (done) {
|
||||
sandbox = sinon.sandbox.create();
|
||||
testUtils.initData()
|
||||
.then(testUtils.insertDefaultUser)
|
||||
.then(testUtils.insertDefaultApp)
|
||||
.then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('can load an actions map from existing permissions', function (done) {
|
||||
createTestPermissions()
|
||||
.then(permissions.init)
|
||||
.then(function (actionsMap) {
|
||||
should.exist(actionsMap);
|
||||
|
||||
actionsMap.edit.sort().should.eql(['post', 'tag', 'user', 'page', 'theme', 'setting'].sort());
|
||||
|
||||
actionsMap.should.equal(permissions.actionsMap);
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('can add user to role', function (done) {
|
||||
var existingUserRoles;
|
||||
|
||||
Models.User.findOne({id: 1}, { withRelated: ['roles'] }).then(function (foundUser) {
|
||||
var testRole = new Models.Role({
|
||||
name: 'testrole1',
|
||||
description: 'testrole1 description'
|
||||
});
|
||||
|
||||
should.exist(foundUser);
|
||||
|
||||
should.exist(foundUser.roles());
|
||||
|
||||
existingUserRoles = foundUser.related('roles').length;
|
||||
|
||||
return testRole.save(null, context).then(function () {
|
||||
return foundUser.roles().attach(testRole);
|
||||
});
|
||||
}).then(function () {
|
||||
return Models.User.findOne({id: 1}, { withRelated: ['roles'] });
|
||||
}).then(function (updatedUser) {
|
||||
should.exist(updatedUser);
|
||||
|
||||
updatedUser.related('roles').length.should.equal(existingUserRoles + 1);
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('can add user permissions', function (done) {
|
||||
Models.User.findOne({id: 1}, { withRelated: ['permissions']}).then(function (testUser) {
|
||||
var testPermission = new Models.Permission({
|
||||
name: 'test edit posts',
|
||||
action_type: 'edit',
|
||||
object_type: 'post'
|
||||
});
|
||||
|
||||
testUser.related('permissions').length.should.equal(0);
|
||||
|
||||
return testPermission.save(null, context).then(function () {
|
||||
return testUser.permissions().attach(testPermission);
|
||||
});
|
||||
}).then(function () {
|
||||
return Models.User.findOne({id: 1}, { include: ['permissions']});
|
||||
}).then(function (updatedUser) {
|
||||
should.exist(updatedUser);
|
||||
|
||||
updatedUser.related('permissions').length.should.equal(1);
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('can add role permissions', function (done) {
|
||||
var testRole = new Models.Role({
|
||||
name: 'test2',
|
||||
description: 'test2 description'
|
||||
});
|
||||
|
||||
testRole.save(null, context)
|
||||
.then(function () {
|
||||
return testRole.load('permissions');
|
||||
})
|
||||
.then(function () {
|
||||
var rolePermission = new Models.Permission({
|
||||
name: 'test edit posts',
|
||||
action_type: 'edit',
|
||||
object_type: 'post'
|
||||
});
|
||||
|
||||
testRole.related('permissions').length.should.equal(0);
|
||||
|
||||
return rolePermission.save(null, context).then(function () {
|
||||
return testRole.permissions().attach(rolePermission);
|
||||
});
|
||||
})
|
||||
.then(function () {
|
||||
return Models.Role.findOne({id: testRole.id}, { withRelated: ['permissions']});
|
||||
})
|
||||
.then(function (updatedRole) {
|
||||
should.exist(updatedRole);
|
||||
|
||||
updatedRole.related('permissions').length.should.equal(1);
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('With Permissions', function () {
|
||||
|
||||
beforeEach(function (done) {
|
||||
sandbox = sinon.sandbox.create();
|
||||
testUtils.initData()
|
||||
.then(testUtils.insertDefaultUser)
|
||||
.then(testUtils.insertDefaultApp)
|
||||
.then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
|
||||
it('does not allow edit post without permission', function (done) {
|
||||
var fakePage = {
|
||||
id: 1
|
||||
};
|
||||
|
||||
createTestPermissions()
|
||||
.then(permissions.init)
|
||||
.then(function () {
|
||||
return Models.User.findOne({id: 1});
|
||||
})
|
||||
.then(function (foundUser) {
|
||||
var canThisResult = permissions.canThis(foundUser);
|
||||
|
||||
should.exist(canThisResult.edit);
|
||||
should.exist(canThisResult.edit.post);
|
||||
|
||||
return canThisResult.edit.page(fakePage);
|
||||
})
|
||||
.then(function () {
|
||||
done(new Error('was able to edit post without permission'));
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('allows edit post with permission', function (done) {
|
||||
var fakePost = {
|
||||
id: '1'
|
||||
};
|
||||
|
||||
createTestPermissions()
|
||||
.then(permissions.init)
|
||||
.then(function () {
|
||||
return Models.User.findOne({id: 1});
|
||||
})
|
||||
.then(function (foundUser) {
|
||||
var newPerm = new Models.Permission({
|
||||
name: 'test3 edit post',
|
||||
action_type: 'edit',
|
||||
object_type: 'post'
|
||||
});
|
||||
|
||||
return newPerm.save(null, context).then(function () {
|
||||
return foundUser.permissions().attach(newPerm);
|
||||
});
|
||||
})
|
||||
.then(function () {
|
||||
return Models.User.findOne({id: 1}, { withRelated: ['permissions']});
|
||||
})
|
||||
.then(function (updatedUser) {
|
||||
|
||||
// TODO: Verify updatedUser.related('permissions') has the permission?
|
||||
var canThisResult = permissions.canThis(updatedUser.id);
|
||||
|
||||
should.exist(canThisResult.edit);
|
||||
should.exist(canThisResult.edit.post);
|
||||
|
||||
return canThisResult.edit.post(fakePost);
|
||||
})
|
||||
.then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('can use permissable function on Model to allow something', function (done) {
|
||||
var testUser,
|
||||
permissableStub = sandbox.stub(Models.Post, 'permissable', function () {
|
||||
return when.resolve();
|
||||
});
|
||||
|
||||
testUtils.insertAuthorUser()
|
||||
.then(function () {
|
||||
return Models.User.findAll();
|
||||
})
|
||||
.then(function (foundUser) {
|
||||
testUser = foundUser.models[1];
|
||||
|
||||
return permissions.canThis({user: testUser.id}).edit.post(123);
|
||||
})
|
||||
.then(function () {
|
||||
permissableStub.restore();
|
||||
permissableStub.calledWith(123, { user: testUser.id, app: null, internal: false })
|
||||
.should.equal(true);
|
||||
|
||||
done();
|
||||
})
|
||||
.catch(function () {
|
||||
permissableStub.restore();
|
||||
|
||||
done(new Error('did not allow testUser'));
|
||||
});
|
||||
});
|
||||
|
||||
it('can use permissable function on Model to forbid something', function (done) {
|
||||
var testUser,
|
||||
permissableStub = sandbox.stub(Models.Post, 'permissable', function () {
|
||||
return when.reject();
|
||||
});
|
||||
|
||||
testUtils.insertAuthorUser()
|
||||
.then(function () {
|
||||
return Models.User.findAll();
|
||||
})
|
||||
.then(function (foundUser) {
|
||||
testUser = foundUser.models[1];
|
||||
|
||||
return permissions.canThis({user: testUser.id}).edit.post(123);
|
||||
})
|
||||
.then(function () {
|
||||
|
||||
permissableStub.restore();
|
||||
done(new Error('Allowed testUser to edit post'));
|
||||
})
|
||||
.catch(function () {
|
||||
permissableStub.calledWith(123, { user: testUser.id, app: null, internal: false })
|
||||
.should.equal(true);
|
||||
permissableStub.restore();
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('can get effective user permissions', function (done) {
|
||||
effectivePerms.user(1).then(function (effectivePermissions) {
|
||||
should.exist(effectivePermissions);
|
||||
|
||||
effectivePermissions.length.should.be.above(0);
|
||||
|
||||
done();
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('can check an apps effective permissions', function (done) {
|
||||
effectivePerms.app('Kudos')
|
||||
.then(function (effectivePermissions) {
|
||||
should.exist(effectivePermissions);
|
||||
|
||||
effectivePermissions.length.should.be.above(0);
|
||||
|
||||
done();
|
||||
})
|
||||
.catch(done);
|
||||
});
|
||||
|
||||
it('does not allow an app to edit a post without permission', function (done) {
|
||||
// Change the author of the post so the author override doesn't affect the test
|
||||
Models.Post.edit({'author_id': 2}, _.extend(context, {id: 1}))
|
||||
.then(function (updatedPost) {
|
||||
// Add user permissions
|
||||
return Models.User.findOne({id: 1})
|
||||
.then(function (foundUser) {
|
||||
var newPerm = new Models.Permission({
|
||||
name: 'app test edit post',
|
||||
action_type: 'edit',
|
||||
object_type: 'post'
|
||||
});
|
||||
|
||||
return newPerm.save(null, context).then(function () {
|
||||
return foundUser.permissions().attach(newPerm).then(function () {
|
||||
return when.all([updatedPost, foundUser]);
|
||||
});
|
||||
});
|
||||
});
|
||||
})
|
||||
.then(function (results) {
|
||||
var updatedPost = results[0],
|
||||
updatedUser = results[1];
|
||||
|
||||
return permissions.canThis({ user: updatedUser.id })
|
||||
.edit
|
||||
.post(updatedPost.id)
|
||||
.then(function () {
|
||||
return results;
|
||||
})
|
||||
.catch(function (err) {
|
||||
/*jshint unused:false */
|
||||
done(new Error('Did not allow user 1 to edit post 1'));
|
||||
});
|
||||
})
|
||||
.then(function (results) {
|
||||
var updatedPost = results[0],
|
||||
updatedUser = results[1];
|
||||
|
||||
// Confirm app cannot edit it.
|
||||
return permissions.canThis({ app: 'Hemingway', user: updatedUser.id })
|
||||
.edit
|
||||
.post(updatedPost.id)
|
||||
.then(function () {
|
||||
done(new Error('Allowed an edit of post 1'));
|
||||
}).catch(done);
|
||||
}).catch(done);
|
||||
});
|
||||
|
||||
it('allows an app to edit a post with permission', function (done) {
|
||||
permissions.canThis({ app: 'Kudos', user: 1 })
|
||||
.edit
|
||||
.post(1)
|
||||
.then(function () {
|
||||
done();
|
||||
})
|
||||
.catch(function () {
|
||||
done(new Error('Did not allow an edit of post 1'));
|
||||
});
|
||||
});
|
||||
|
||||
it('checks for null context passed and rejects', function (done) {
|
||||
permissions.canThis(undefined)
|
||||
.edit
|
||||
.post(1)
|
||||
.then(function () {
|
||||
done(new Error('Should not allow editing post'));
|
||||
})
|
||||
.catch(done);
|
||||
});
|
||||
|
||||
it('allows \'internal\' to be passed for internal requests', function (done) {
|
||||
// Using tag here because post implements the custom permissable interface
|
||||
permissions.canThis('internal')
|
||||
.edit
|
||||
.tag(1)
|
||||
.then(function () {
|
||||
done();
|
||||
})
|
||||
.catch(function () {
|
||||
done(new Error('Should allow editing post with "internal"'));
|
||||
});
|
||||
});
|
||||
|
||||
it('allows { internal: true } to be passed for internal requests', function (done) {
|
||||
// Using tag here because post implements the custom permissable interface
|
||||
permissions.canThis({ internal: true })
|
||||
.edit
|
||||
.tag(1)
|
||||
.then(function () {
|
||||
done();
|
||||
})
|
||||
.catch(function () {
|
||||
done(new Error('Should allow editing post with { internal: true }'));
|
||||
});
|
||||
});
|
||||
});
|
||||
// it('does not allow edit post without permission', function (done) {
|
||||
// var fakePage = {
|
||||
// id: 1
|
||||
// };
|
||||
//
|
||||
// permissions.init()
|
||||
// .then(function () {
|
||||
// var canThisResult = permissions.canThis({id: 1});
|
||||
//
|
||||
// should.exist(canThisResult.edit);
|
||||
// should.exist(canThisResult.edit.post);
|
||||
//
|
||||
// return canThisResult.edit.page(fakePage);
|
||||
// })
|
||||
// .then(function () {
|
||||
// done(new Error('was able to edit post without permission'));
|
||||
// }).catch(done);
|
||||
// });
|
||||
//////
|
||||
// it('allows edit post with permission', function (done) {
|
||||
// var fakePost = {
|
||||
// id: '1'
|
||||
// };
|
||||
//
|
||||
// permissions.init()
|
||||
// .then(function () {
|
||||
// return Models.User.findOne({id: 1});
|
||||
// })
|
||||
// .then(function (foundUser) {
|
||||
// var newPerm = new Models.Permission({
|
||||
// name: 'test3 edit post',
|
||||
// action_type: 'edit',
|
||||
// object_type: 'post'
|
||||
// });
|
||||
//
|
||||
// return newPerm.save(null, context).then(function () {
|
||||
// return foundUser.permissions().attach(newPerm);
|
||||
// });
|
||||
// })
|
||||
// .then(function () {
|
||||
// return Models.User.findOne({id: 1}, { withRelated: ['permissions']});
|
||||
// })
|
||||
// .then(function (updatedUser) {
|
||||
//
|
||||
// // TODO: Verify updatedUser.related('permissions') has the permission?
|
||||
// var canThisResult = permissions.canThis(updatedUser.id);
|
||||
//
|
||||
// should.exist(canThisResult.edit);
|
||||
// should.exist(canThisResult.edit.post);
|
||||
//
|
||||
// return canThisResult.edit.post(fakePost);
|
||||
// })
|
||||
// .then(function () {
|
||||
// done();
|
||||
// }).catch(done);
|
||||
// });
|
||||
//
|
||||
// it('can use permissable function on Model to allow something', function (done) {
|
||||
// var testUser,
|
||||
// permissableStub = sandbox.stub(Models.Post, 'permissable', function () {
|
||||
// return when.resolve();
|
||||
// });
|
||||
//
|
||||
// testUtils.insertAuthorUser()
|
||||
// .then(function () {
|
||||
// return Models.User.findAll();
|
||||
// })
|
||||
// .then(function (foundUser) {
|
||||
// testUser = foundUser.models[1];
|
||||
//
|
||||
// return permissions.canThis({user: testUser.id}).edit.post(123);
|
||||
// })
|
||||
// .then(function () {
|
||||
// permissableStub.restore();
|
||||
// permissableStub.calledWith(123, { user: testUser.id, app: null, internal: false })
|
||||
// .should.equal(true);
|
||||
//
|
||||
// done();
|
||||
// })
|
||||
// .catch(function () {
|
||||
// permissableStub.restore();
|
||||
//
|
||||
// done(new Error('did not allow testUser'));
|
||||
// });
|
||||
// });
|
||||
//
|
||||
// it('can use permissable function on Model to forbid something', function (done) {
|
||||
// var testUser,
|
||||
// permissableStub = sandbox.stub(Models.Post, 'permissable', function () {
|
||||
// return when.reject();
|
||||
// });
|
||||
//
|
||||
// testUtils.insertAuthorUser()
|
||||
// .then(function () {
|
||||
// return Models.User.findAll();
|
||||
// })
|
||||
// .then(function (foundUser) {
|
||||
// testUser = foundUser.models[1];
|
||||
//
|
||||
// return permissions.canThis({user: testUser.id}).edit.post(123);
|
||||
// })
|
||||
// .then(function () {
|
||||
//
|
||||
// permissableStub.restore();
|
||||
// done(new Error('Allowed testUser to edit post'));
|
||||
// })
|
||||
// .catch(function () {
|
||||
// permissableStub.calledWith(123, { user: testUser.id, app: null, internal: false })
|
||||
// .should.equal(true);
|
||||
// permissableStub.restore();
|
||||
// done();
|
||||
// });
|
||||
// });
|
||||
//
|
||||
// it('can get effective user permissions', function (done) {
|
||||
// effectivePerms.user(1).then(function (effectivePermissions) {
|
||||
// should.exist(effectivePermissions);
|
||||
//
|
||||
// effectivePermissions.length.should.be.above(0);
|
||||
//
|
||||
// done();
|
||||
// }).catch(done);
|
||||
// });
|
||||
//
|
||||
// it('can check an apps effective permissions', function (done) {
|
||||
// effectivePerms.app('Kudos')
|
||||
// .then(function (effectivePermissions) {
|
||||
// should.exist(effectivePermissions);
|
||||
//
|
||||
// effectivePermissions.length.should.be.above(0);
|
||||
//
|
||||
// done();
|
||||
// })
|
||||
// .catch(done);
|
||||
// });
|
||||
//
|
||||
// it('does not allow an app to edit a post without permission', function (done) {
|
||||
// // Change the author of the post so the author override doesn't affect the test
|
||||
// Models.Post.edit({'author_id': 2}, _.extend(context, {id: 1}))
|
||||
// .then(function (updatedPost) {
|
||||
// // Add user permissions
|
||||
// return Models.User.findOne({id: 1})
|
||||
// .then(function (foundUser) {
|
||||
// var newPerm = new Models.Permission({
|
||||
// name: 'app test edit post',
|
||||
// action_type: 'edit',
|
||||
// object_type: 'post'
|
||||
// });
|
||||
//
|
||||
// return newPerm.save(null, context).then(function () {
|
||||
// return foundUser.permissions().attach(newPerm).then(function () {
|
||||
// return when.all([updatedPost, foundUser]);
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// })
|
||||
// .then(function (results) {
|
||||
// var updatedPost = results[0],
|
||||
// updatedUser = results[1];
|
||||
//
|
||||
// return permissions.canThis({ user: updatedUser.id })
|
||||
// .edit
|
||||
// .post(updatedPost.id)
|
||||
// .then(function () {
|
||||
// return results;
|
||||
// })
|
||||
// .catch(function (err) {
|
||||
// /*jshint unused:false */
|
||||
// done(new Error('Did not allow user 1 to edit post 1'));
|
||||
// });
|
||||
// })
|
||||
// .then(function (results) {
|
||||
// var updatedPost = results[0],
|
||||
// updatedUser = results[1];
|
||||
//
|
||||
// // Confirm app cannot edit it.
|
||||
// return permissions.canThis({ app: 'Hemingway', user: updatedUser.id })
|
||||
// .edit
|
||||
// .post(updatedPost.id)
|
||||
// .then(function () {
|
||||
// done(new Error('Allowed an edit of post 1'));
|
||||
// }).catch(done);
|
||||
// }).catch(done);
|
||||
// });
|
||||
//
|
||||
// it('allows an app to edit a post with permission', function (done) {
|
||||
// permissions.canThis({ app: 'Kudos', user: 1 })
|
||||
// .edit
|
||||
// .post(1)
|
||||
// .then(function () {
|
||||
// done();
|
||||
// })
|
||||
// .catch(function () {
|
||||
// done(new Error('Did not allow an edit of post 1'));
|
||||
// });
|
||||
// });
|
||||
//
|
||||
// it('checks for null context passed and rejects', function (done) {
|
||||
// permissions.canThis(undefined)
|
||||
// .edit
|
||||
// .post(1)
|
||||
// .then(function () {
|
||||
// done(new Error('Should not allow editing post'));
|
||||
// })
|
||||
// .catch(done);
|
||||
// });
|
||||
//
|
||||
// it('allows \'internal\' to be passed for internal requests', function (done) {
|
||||
// // Using tag here because post implements the custom permissable interface
|
||||
// permissions.canThis('internal')
|
||||
// .edit
|
||||
// .tag(1)
|
||||
// .then(function () {
|
||||
// done();
|
||||
// })
|
||||
// .catch(function () {
|
||||
// done(new Error('Should allow editing post with "internal"'));
|
||||
// });
|
||||
// });
|
||||
//
|
||||
// it('allows { internal: true } to be passed for internal requests', function (done) {
|
||||
// // Using tag here because post implements the custom permissable interface
|
||||
// permissions.canThis({ internal: true })
|
||||
// .edit
|
||||
// .tag(1)
|
||||
// .then(function () {
|
||||
// done();
|
||||
// })
|
||||
// .catch(function () {
|
||||
// done(new Error('Should allow editing post with { internal: true }'));
|
||||
// });
|
||||
// });
|
||||
});
|
|
@ -103,6 +103,78 @@ DataGenerator.Content = {
|
|||
}
|
||||
],
|
||||
|
||||
permissions: [
|
||||
{
|
||||
name: 'Browse posts',
|
||||
action_type: 'browse',
|
||||
object_type: 'post'
|
||||
},
|
||||
{
|
||||
name: 'test',
|
||||
action_type: 'edit',
|
||||
object_type: 'post'
|
||||
},
|
||||
{
|
||||
name: 'test',
|
||||
action_type: 'edit',
|
||||
object_type: 'tag'
|
||||
},
|
||||
{
|
||||
name: 'test',
|
||||
action_type: 'edit',
|
||||
object_type: 'user'
|
||||
},
|
||||
{
|
||||
name: 'test',
|
||||
action_type: 'edit',
|
||||
object_type: 'page'
|
||||
},
|
||||
{
|
||||
name: 'test',
|
||||
action_type: 'add',
|
||||
object_type: 'post'
|
||||
},
|
||||
{
|
||||
name: 'test',
|
||||
action_type: 'add',
|
||||
object_type: 'user'
|
||||
},
|
||||
{
|
||||
name: 'test',
|
||||
action_type: 'add',
|
||||
object_type: 'page'
|
||||
},
|
||||
{
|
||||
name: 'test',
|
||||
action_type: 'destroy',
|
||||
object_type: 'post'
|
||||
},
|
||||
{
|
||||
name: 'test',
|
||||
action_type: 'destroy',
|
||||
object_type: 'user'
|
||||
}
|
||||
],
|
||||
|
||||
roles: [
|
||||
{
|
||||
"name": "Administrator",
|
||||
"description": "Administrators"
|
||||
},
|
||||
{
|
||||
"name": "Editor",
|
||||
"description": "Editors"
|
||||
},
|
||||
{
|
||||
"name": "Author",
|
||||
"description": "Authors"
|
||||
},
|
||||
{
|
||||
"name": "Owner",
|
||||
"description": "Blog Owner"
|
||||
}
|
||||
],
|
||||
|
||||
apps: [
|
||||
{
|
||||
name: 'Kudos',
|
||||
|
@ -157,7 +229,21 @@ DataGenerator.forKnex = (function () {
|
|||
tags,
|
||||
posts_tags,
|
||||
apps,
|
||||
app_fields;
|
||||
app_fields,
|
||||
roles,
|
||||
users,
|
||||
roles_users;
|
||||
|
||||
function createBasic(overrides) {
|
||||
return _.defaults(overrides, {
|
||||
uuid: uuid.v4(),
|
||||
created_by: 1,
|
||||
created_at: new Date(),
|
||||
updated_by: 1,
|
||||
updated_at: new Date()
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function createPost(overrides) {
|
||||
return _.defaults(overrides, {
|
||||
|
@ -193,16 +279,6 @@ DataGenerator.forKnex = (function () {
|
|||
});
|
||||
}
|
||||
|
||||
function createTag(overrides) {
|
||||
return _.defaults(overrides, {
|
||||
uuid: uuid.v4(),
|
||||
updated_at: new Date(),
|
||||
updated_by: 1,
|
||||
created_at: new Date(),
|
||||
created_by: 1
|
||||
});
|
||||
}
|
||||
|
||||
function createUser(overrides) {
|
||||
return _.defaults(overrides, {
|
||||
uuid: uuid.v4(),
|
||||
|
@ -221,13 +297,6 @@ DataGenerator.forKnex = (function () {
|
|||
});
|
||||
}
|
||||
|
||||
function createUserRole(userId, roleId) {
|
||||
return {
|
||||
role_id: roleId,
|
||||
user_id: userId
|
||||
};
|
||||
}
|
||||
|
||||
function createPostsTags(postId, tagId) {
|
||||
return {
|
||||
post_id: postId,
|
||||
|
@ -235,14 +304,6 @@ DataGenerator.forKnex = (function () {
|
|||
};
|
||||
}
|
||||
|
||||
function createApp(overrides) {
|
||||
return _.defaults(overrides, {
|
||||
uuid: uuid.v4(),
|
||||
created_by: 1,
|
||||
created_at: new Date()
|
||||
});
|
||||
}
|
||||
|
||||
function createAppField(overrides) {
|
||||
return _.defaults(overrides, {
|
||||
uuid: uuid.v4(),
|
||||
|
@ -258,6 +319,7 @@ DataGenerator.forKnex = (function () {
|
|||
function createAppSetting(overrides) {
|
||||
return _.defaults(overrides, {
|
||||
uuid: uuid.v4(),
|
||||
app_id: 1,
|
||||
created_by: 1,
|
||||
created_at: new Date()
|
||||
});
|
||||
|
@ -274,26 +336,47 @@ DataGenerator.forKnex = (function () {
|
|||
];
|
||||
|
||||
tags = [
|
||||
createTag(DataGenerator.Content.tags[0]),
|
||||
createTag(DataGenerator.Content.tags[1]),
|
||||
createTag(DataGenerator.Content.tags[2]),
|
||||
createTag(DataGenerator.Content.tags[3]),
|
||||
createTag(DataGenerator.Content.tags[4])
|
||||
createBasic(DataGenerator.Content.tags[0]),
|
||||
createBasic(DataGenerator.Content.tags[1]),
|
||||
createBasic(DataGenerator.Content.tags[2]),
|
||||
createBasic(DataGenerator.Content.tags[3]),
|
||||
createBasic(DataGenerator.Content.tags[4])
|
||||
];
|
||||
|
||||
roles = [
|
||||
createBasic(DataGenerator.Content.roles[0]),
|
||||
createBasic(DataGenerator.Content.roles[1]),
|
||||
createBasic(DataGenerator.Content.roles[2]),
|
||||
createBasic(DataGenerator.Content.roles[3]),
|
||||
];
|
||||
|
||||
users = [
|
||||
createUser(DataGenerator.Content.users[0]),
|
||||
createUser(DataGenerator.Content.users[1]),
|
||||
createUser(DataGenerator.Content.users[2]),
|
||||
createUser(DataGenerator.Content.users[3]),
|
||||
];
|
||||
|
||||
roles_users = [
|
||||
{ user_id: 1, role_id: 4},
|
||||
{ user_id: 2, role_id: 1},
|
||||
{ user_id: 3, role_id: 2},
|
||||
{ user_id: 4, role_id: 3}
|
||||
];
|
||||
|
||||
posts_tags = [
|
||||
{ post_id: 1, tag_id: 1 },
|
||||
{ post_id: 1, tag_id: 2 },
|
||||
{ post_id: 2, tag_id: 1 },
|
||||
{ post_id: 2, tag_id: 2 },
|
||||
{ post_id: 2, tag_id: 3 },
|
||||
{ post_id: 3, tag_id: 2 },
|
||||
{ post_id: 3, tag_id: 3 },
|
||||
{ post_id: 4, tag_id: 4 },
|
||||
{ post_id: 5, tag_id: 5 }
|
||||
{ post_id: 4, tag_id: 4 }
|
||||
];
|
||||
|
||||
apps = [
|
||||
createApp(DataGenerator.Content.apps[0]),
|
||||
createApp(DataGenerator.Content.apps[1]),
|
||||
createApp(DataGenerator.Content.apps[2])
|
||||
createBasic(DataGenerator.Content.apps[0]),
|
||||
createBasic(DataGenerator.Content.apps[1]),
|
||||
createBasic(DataGenerator.Content.apps[2])
|
||||
];
|
||||
|
||||
app_fields = [
|
||||
|
@ -304,12 +387,14 @@ DataGenerator.forKnex = (function () {
|
|||
return {
|
||||
createPost: createPost,
|
||||
createGenericPost: createGenericPost,
|
||||
createTag: createTag,
|
||||
createTag: createBasic,
|
||||
createUser: createUser,
|
||||
createGenericUser: createGenericUser,
|
||||
createUserRole: createUserRole,
|
||||
createBasic: createBasic,
|
||||
createRole: createBasic,
|
||||
createPermission: createBasic,
|
||||
createPostsTags: createPostsTags,
|
||||
createApp: createApp,
|
||||
createApp: createBasic,
|
||||
createAppField: createAppField,
|
||||
createAppSetting: createAppSetting,
|
||||
|
||||
|
@ -317,7 +402,10 @@ DataGenerator.forKnex = (function () {
|
|||
tags: tags,
|
||||
posts_tags: posts_tags,
|
||||
apps: apps,
|
||||
app_fields: app_fields
|
||||
app_fields: app_fields,
|
||||
roles: roles,
|
||||
users: users,
|
||||
roles_users: roles_users
|
||||
};
|
||||
|
||||
}());
|
||||
|
|
|
@ -5,248 +5,357 @@ var when = require('when'),
|
|||
fs = require('fs-extra'),
|
||||
path = require('path'),
|
||||
migration = require('../../server/data/migration/'),
|
||||
settings = require('../../server/models').Settings,
|
||||
SettingsAPI = require('../../server/api/settings'),
|
||||
permissions = require('../../server/permissions'),
|
||||
permsFixtures = require('../../server/data/fixtures/permissions/permissions.json'),
|
||||
DataGenerator = require('./fixtures/data-generator'),
|
||||
API = require('./api'),
|
||||
fork = require('./fork'),
|
||||
config = require('../../server/config'),
|
||||
|
||||
teardown;
|
||||
fixtures,
|
||||
getFixtureOps,
|
||||
toDoList,
|
||||
postsInserted = 0,
|
||||
|
||||
function initData() {
|
||||
return migration.init();
|
||||
}
|
||||
teardown,
|
||||
setup,
|
||||
doAuth,
|
||||
|
||||
function clearData() {
|
||||
// we must always try to delete all tables
|
||||
return migration.reset();
|
||||
}
|
||||
initData,
|
||||
clearData;
|
||||
|
||||
function insertPosts() {
|
||||
var knex = config.database.knex;
|
||||
// ToDo: Get rid of pyramid of doom
|
||||
return when(knex('posts').insert(DataGenerator.forKnex.posts).then(function () {
|
||||
return knex('tags').insert(DataGenerator.forKnex.tags).then(function () {
|
||||
return knex('posts_tags').insert(DataGenerator.forKnex.posts_tags);
|
||||
});
|
||||
}));
|
||||
}
|
||||
|
||||
function insertMorePosts(max) {
|
||||
var lang,
|
||||
status,
|
||||
posts = [],
|
||||
i, j, k = 0,
|
||||
knex = config.database.knex;
|
||||
/** TEST FIXTURES **/
|
||||
fixtures = {
|
||||
insertPosts: function insertPosts() {
|
||||
var knex = config.database.knex;
|
||||
// ToDo: Get rid of pyramid of doom
|
||||
return when(knex('posts').insert(DataGenerator.forKnex.posts).then(function () {
|
||||
return knex('tags').insert(DataGenerator.forKnex.tags).then(function () {
|
||||
return knex('posts_tags').insert(DataGenerator.forKnex.posts_tags);
|
||||
});
|
||||
}));
|
||||
},
|
||||
|
||||
max = max || 50;
|
||||
insertMorePosts: function insertMorePosts(max) {
|
||||
var lang,
|
||||
status,
|
||||
posts = [],
|
||||
i, j, k = postsInserted,
|
||||
knex = config.database.knex;
|
||||
|
||||
for (i = 0; i < 2; i += 1) {
|
||||
lang = i % 2 ? 'en' : 'fr';
|
||||
posts.push(DataGenerator.forKnex.createGenericPost(k++, null, lang));
|
||||
max = max || 50;
|
||||
|
||||
for (j = 0; j < max; j += 1) {
|
||||
status = j % 2 ? 'draft' : 'published';
|
||||
posts.push(DataGenerator.forKnex.createGenericPost(k++, status, lang));
|
||||
}
|
||||
}
|
||||
for (i = 0; i < 2; i += 1) {
|
||||
lang = i % 2 ? 'en' : 'fr';
|
||||
posts.push(DataGenerator.forKnex.createGenericPost(k++, null, lang));
|
||||
|
||||
return sequence(_.times(posts.length, function(index) {
|
||||
return function() {
|
||||
return knex('posts').insert(posts[index]);
|
||||
};
|
||||
}));
|
||||
}
|
||||
|
||||
function insertMorePostsTags(max) {
|
||||
max = max || 50;
|
||||
var knex = config.database.knex;
|
||||
|
||||
return when.all([
|
||||
// PostgreSQL can return results in any order
|
||||
knex('posts').orderBy('id', 'asc').select('id'),
|
||||
knex('tags').select('id', 'name')
|
||||
]).then(function (results) {
|
||||
var posts = _.pluck(results[0], 'id'),
|
||||
injectionTagId = _.chain(results[1])
|
||||
.where({name: 'injection'})
|
||||
.pluck('id')
|
||||
.value()[0],
|
||||
promises = [],
|
||||
i;
|
||||
|
||||
if (max > posts.length) {
|
||||
throw new Error('Trying to add more posts_tags than the number of posts.');
|
||||
for (j = 0; j < max; j += 1) {
|
||||
status = j % 2 ? 'draft' : 'published';
|
||||
posts.push(DataGenerator.forKnex.createGenericPost(k++, status, lang));
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < max; i += 1) {
|
||||
promises.push(DataGenerator.forKnex.createPostsTags(posts[i], injectionTagId));
|
||||
}
|
||||
// Keep track so we can run this function again safely
|
||||
postsInserted = k;
|
||||
|
||||
return sequence(_.times(promises.length, function (index) {
|
||||
return sequence(_.times(posts.length, function (index) {
|
||||
return function () {
|
||||
return knex('posts_tags').insert(promises[index]);
|
||||
return knex('posts').insert(posts[index]);
|
||||
};
|
||||
}));
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
function insertDefaultUser() {
|
||||
var user,
|
||||
knex = config.database.knex;
|
||||
insertMorePostsTags: function insertMorePostsTags(max) {
|
||||
max = max || 50;
|
||||
|
||||
user = DataGenerator.forKnex.createUser(DataGenerator.Content.users[0]);
|
||||
var knex = config.database.knex;
|
||||
|
||||
return knex('users')
|
||||
.where('id', '=', '1')
|
||||
.update(user);
|
||||
}
|
||||
|
||||
function insertAdminUser() {
|
||||
var users = [],
|
||||
userRoles = [],
|
||||
knex = config.database.knex;
|
||||
|
||||
users.push(DataGenerator.forKnex.createUser(DataGenerator.Content.users[1]));
|
||||
userRoles.push(DataGenerator.forKnex.createUserRole(2, 2));
|
||||
return knex('users')
|
||||
.insert(users)
|
||||
.then(function () {
|
||||
return knex('roles_users').insert(userRoles);
|
||||
});
|
||||
}
|
||||
|
||||
function insertEditorUser() {
|
||||
var users = [],
|
||||
userRoles = [],
|
||||
knex = config.database.knex;
|
||||
|
||||
users.push(DataGenerator.forKnex.createUser(DataGenerator.Content.users[2]));
|
||||
userRoles.push(DataGenerator.forKnex.createUserRole(3, 2));
|
||||
return knex('users')
|
||||
.insert(users)
|
||||
.then(function () {
|
||||
return knex('roles_users').insert(userRoles);
|
||||
});
|
||||
}
|
||||
|
||||
function insertAuthorUser() {
|
||||
var users = [],
|
||||
userRoles = [],
|
||||
knex = config.database.knex;
|
||||
|
||||
users.push(DataGenerator.forKnex.createUser(DataGenerator.Content.users[3]));
|
||||
userRoles.push(DataGenerator.forKnex.createUserRole(4, 3));
|
||||
return knex('users')
|
||||
.insert(users)
|
||||
.then(function () {
|
||||
return knex('roles_users').insert(userRoles);
|
||||
});
|
||||
}
|
||||
|
||||
function insertDefaultApp() {
|
||||
var apps = [],
|
||||
knex = config.database.knex;
|
||||
|
||||
apps.push(DataGenerator.forKnex.createApp(DataGenerator.Content.apps[0]));
|
||||
|
||||
return knex('permissions')
|
||||
.select('id')
|
||||
.where('object_type', 'post')
|
||||
.andWhere('action_type', 'edit')
|
||||
.then(function (result) {
|
||||
var permission_id = result[0].id;
|
||||
if (permission_id) {
|
||||
return knex('apps')
|
||||
.insert(apps)
|
||||
.then(function () {
|
||||
return knex('permissions_apps')
|
||||
.insert({
|
||||
app_id: 1,
|
||||
permission_id: permission_id
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
throw new Error('Permissions not created');
|
||||
});
|
||||
}
|
||||
|
||||
function insertApps() {
|
||||
var knex = config.database.knex;
|
||||
return knex('apps').insert(DataGenerator.forKnex.apps).then(function () {
|
||||
return knex('app_fields').insert(DataGenerator.forKnex.app_fields);
|
||||
});
|
||||
}
|
||||
|
||||
function insertAppWithSettings() {
|
||||
var apps = [],
|
||||
app_settings = [],
|
||||
knex = config.database.knex;
|
||||
|
||||
apps.push(DataGenerator.forKnex.createApp(DataGenerator.Content.apps[0]));
|
||||
app_settings.push(DataGenerator.forKnex.createAppSetting(DataGenerator.Content.app_settings[0]));
|
||||
app_settings.push(DataGenerator.forKnex.createAppSetting(DataGenerator.Content.app_settings[1]));
|
||||
|
||||
return knex('apps').insert(apps, 'id')
|
||||
.then(function (results) {
|
||||
var appId = results[0], i;
|
||||
|
||||
for (i = 0; i < app_settings.length; i++) {
|
||||
app_settings[i].app_id = appId;
|
||||
}
|
||||
|
||||
return knex('app_settings').insert(app_settings);
|
||||
});
|
||||
}
|
||||
function insertAppWithFields() {
|
||||
var apps = [],
|
||||
app_fields = [],
|
||||
knex = config.database.knex;
|
||||
|
||||
apps.push(DataGenerator.forKnex.createApp(DataGenerator.Content.apps[0]));
|
||||
app_fields.push(DataGenerator.forKnex.createAppField(DataGenerator.Content.app_fields[0]));
|
||||
app_fields.push(DataGenerator.forKnex.createAppField(DataGenerator.Content.app_fields[1]));
|
||||
|
||||
return knex('apps').insert(apps, 'id')
|
||||
.then(function (results) {
|
||||
var appId = results[0],
|
||||
return when.all([
|
||||
// PostgreSQL can return results in any order
|
||||
knex('posts').orderBy('id', 'asc').select('id'),
|
||||
knex('tags').select('id', 'name')
|
||||
]).then(function (results) {
|
||||
var posts = _.pluck(results[0], 'id'),
|
||||
injectionTagId = _.chain(results[1])
|
||||
.where({name: 'injection'})
|
||||
.pluck('id')
|
||||
.value()[0],
|
||||
promises = [],
|
||||
i;
|
||||
|
||||
for (i = 0; i < app_fields.length; i++) {
|
||||
app_fields[i].app_id = appId;
|
||||
if (max > posts.length) {
|
||||
throw new Error('Trying to add more posts_tags than the number of posts.');
|
||||
}
|
||||
|
||||
return knex('app_fields').insert(app_fields);
|
||||
for (i = 0; i < max; i += 1) {
|
||||
promises.push(DataGenerator.forKnex.createPostsTags(posts[i], injectionTagId));
|
||||
}
|
||||
|
||||
return sequence(_.times(promises.length, function (index) {
|
||||
return function () {
|
||||
return knex('posts_tags').insert(promises[index]);
|
||||
};
|
||||
}));
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
initOwnerUser: function initOwnerUser() {
|
||||
var user = DataGenerator.Content.users[0],
|
||||
knex = config.database.knex;
|
||||
|
||||
function insertDefaultFixtures() {
|
||||
return insertDefaultUser().then(function () {
|
||||
return insertPosts();
|
||||
}).then(function () {
|
||||
return insertApps();
|
||||
});
|
||||
}
|
||||
user = DataGenerator.forKnex.createBasic(user);
|
||||
user = _.extend({}, user, {'status': 'inactive'});
|
||||
|
||||
function loadExportFixture(filename) {
|
||||
var filepath = path.resolve(__dirname + '/fixtures/' + filename + '.json');
|
||||
return knex('users').insert(user);
|
||||
},
|
||||
|
||||
return nodefn.call(fs.readFile, filepath).then(function (fileContents) {
|
||||
var data;
|
||||
insertOwnerUser: function insertOwnerUser() {
|
||||
var user,
|
||||
knex = config.database.knex;
|
||||
|
||||
// Parse the json data
|
||||
try {
|
||||
data = JSON.parse(fileContents);
|
||||
} catch (e) {
|
||||
return when.reject(new Error("Failed to parse the file"));
|
||||
user = DataGenerator.forKnex.createUser(DataGenerator.Content.users[0]);
|
||||
|
||||
return knex('users').insert(user);
|
||||
},
|
||||
|
||||
overrideOwnerUser: function overrideOwnerUser() {
|
||||
var user,
|
||||
knex = config.database.knex;
|
||||
|
||||
user = DataGenerator.forKnex.createUser(DataGenerator.Content.users[0]);
|
||||
|
||||
return knex('users')
|
||||
.where('id', '=', '1')
|
||||
.update(user);
|
||||
},
|
||||
|
||||
createUsersWithRoles: function createUsersWithRoles() {
|
||||
var knex = config.database.knex;
|
||||
return knex('roles').insert(DataGenerator.forKnex.roles).then(function () {
|
||||
return knex('users').insert(DataGenerator.forKnex.users);
|
||||
}).then(function () {
|
||||
return knex('roles_users').insert(DataGenerator.forKnex.roles_users);
|
||||
});
|
||||
},
|
||||
|
||||
insertOne: function insertOne(obj, fn) {
|
||||
var knex = config.database.knex;
|
||||
return knex(obj)
|
||||
.insert(DataGenerator.forKnex[fn](DataGenerator.Content[obj][0]));
|
||||
},
|
||||
|
||||
insertApps: function insertApps() {
|
||||
var knex = config.database.knex;
|
||||
return knex('apps').insert(DataGenerator.forKnex.apps).then(function () {
|
||||
return knex('app_fields').insert(DataGenerator.forKnex.app_fields);
|
||||
});
|
||||
},
|
||||
|
||||
loadExportFixture: function loadExportFixture(filename) {
|
||||
var filepath = path.resolve(__dirname + '/fixtures/' + filename + '.json');
|
||||
|
||||
return nodefn.call(fs.readFile, filepath).then(function (fileContents) {
|
||||
var data;
|
||||
|
||||
// Parse the json data
|
||||
try {
|
||||
data = JSON.parse(fileContents);
|
||||
} catch (e) {
|
||||
return when.reject(new Error("Failed to parse the file"));
|
||||
}
|
||||
|
||||
return data;
|
||||
});
|
||||
},
|
||||
|
||||
permissionsFor: function permissionsFor(obj) {
|
||||
var knex = config.database.knex,
|
||||
permsToInsert = permsFixtures.permissions[obj],
|
||||
permsRolesToInsert = permsFixtures.permissions_roles,
|
||||
actions = [],
|
||||
permissions_roles = [],
|
||||
roles = {
|
||||
'Administrator': 1,
|
||||
'Editor': 2,
|
||||
'Author': 3,
|
||||
'Owner': 4
|
||||
};
|
||||
|
||||
permsToInsert = _.map(permsToInsert, function (perms) {
|
||||
perms.object_type = obj;
|
||||
actions.push(perms.action_type);
|
||||
return DataGenerator.forKnex.createBasic(perms);
|
||||
});
|
||||
|
||||
_.each(permsRolesToInsert, function (perms, role) {
|
||||
if (perms[obj]) {
|
||||
if (perms[obj] === 'all') {
|
||||
_.each(actions, function (action, i) {
|
||||
permissions_roles.push({permission_id: (i + 1), role_id: roles[role]});
|
||||
});
|
||||
}
|
||||
else {
|
||||
_.each(perms[obj], function (action) {
|
||||
permissions_roles.push({permission_id: (_.indexOf(actions, action) + 1), role_id: roles[role]});
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return knex('permissions').insert(permsToInsert).then(function () {
|
||||
return knex('permissions_roles').insert(permissions_roles);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/** Test Utility Functions **/
|
||||
initData = function initData() {
|
||||
return migration.init();
|
||||
};
|
||||
|
||||
clearData = function clearData() {
|
||||
// we must always try to delete all tables
|
||||
return migration.reset();
|
||||
};
|
||||
|
||||
toDoList = {
|
||||
'app': function insertApp() { return fixtures.insertOne('apps', 'createApp'); },
|
||||
'app_field': function insertAppField() {
|
||||
// TODO: use the actual app ID to create the field
|
||||
return fixtures.insertOne('apps', 'createApp').then(function () {
|
||||
return fixtures.insertOne('app_fields', 'createAppField');
|
||||
});
|
||||
},
|
||||
'app_setting': function insertAppSetting() {
|
||||
// TODO: use the actual app ID to create the field
|
||||
return fixtures.insertOne('apps', 'createApp').then(function () {
|
||||
return fixtures.insertOne('app_settings', 'createAppSetting');
|
||||
});
|
||||
},
|
||||
'permission': function insertPermission() { return fixtures.insertOne('permissions', 'createPermission'); },
|
||||
'role': function insertRole() { return fixtures.insertOne('roles', 'createRole'); },
|
||||
'tag': function insertRole() { return fixtures.insertOne('tags', 'createTag'); },
|
||||
'posts': function insertPosts() { return fixtures.insertPosts(); },
|
||||
'apps': function insertApps() { return fixtures.insertApps(); },
|
||||
'settings': function populate() {
|
||||
return settings.populateDefaults().then(function () { return SettingsAPI.updateSettingsCache(); });
|
||||
},
|
||||
'users:roles': function createUsersWithRoles() { return fixtures.createUsersWithRoles(); },
|
||||
'owner': function insertOwnerUser() { return fixtures.insertOwnerUser(); },
|
||||
'owner:pre': function initOwnerUser() { return fixtures.initOwnerUser(); },
|
||||
'owner:post': function overrideOwnerUser() { return fixtures.overrideOwnerUser(); },
|
||||
'perms:init': function initPermissions() { return permissions.init(); },
|
||||
'perms': function permissionsFor(obj) {
|
||||
return function permissionsForObj() { return fixtures.permissionsFor(obj); };
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* ## getFixtureOps
|
||||
*
|
||||
* Takes the arguments from a setup function and turns them into an array of promises to fullfil
|
||||
*
|
||||
* This is effectively a list of instructions with regard to which fixtures should be setup for this test.
|
||||
* * `default` - a special option which will cause the full suite of normal fixtures to be initialised
|
||||
* * `perms:init` - initialise the permissions object after having added permissions
|
||||
* * `perms:obj` - initialise permissions for a particular object type
|
||||
* * `users:roles` - create a full suite of users, one per role
|
||||
* @param options
|
||||
*/
|
||||
getFixtureOps = function getFixtureOps(toDos) {
|
||||
// default = default fixtures, if it isn't present, init with tables only
|
||||
var tablesOnly = !toDos.default,
|
||||
fixtureOps = [];
|
||||
|
||||
// Database initialisation
|
||||
if (toDos.init || toDos.default) {
|
||||
fixtureOps.push(function initDB() {
|
||||
return migration.init(tablesOnly);
|
||||
});
|
||||
delete toDos.default;
|
||||
delete toDos.init;
|
||||
}
|
||||
|
||||
// Go through our list of things to do, and add them to an array
|
||||
_.each(toDos, function (value, toDo) {
|
||||
var tmp;
|
||||
if (toDo !== 'perms:init' && toDo.indexOf('perms:') !== -1) {
|
||||
tmp = toDo.split(':');
|
||||
fixtureOps.push(toDoList[tmp[0]](tmp[1]));
|
||||
} else {
|
||||
fixtureOps.push(toDoList[toDo]);
|
||||
}
|
||||
|
||||
return data;
|
||||
});
|
||||
}
|
||||
|
||||
teardown = function (done) {
|
||||
return fixtureOps;
|
||||
};
|
||||
|
||||
|
||||
// ## Test Setup and Teardown
|
||||
|
||||
/**
|
||||
* ## Setup Integration Tests
|
||||
* Setup takes a list of arguments like: 'default', 'tag', 'perms:tag', 'perms:init'
|
||||
* Setup does 'init' (DB) by default
|
||||
* @returns {Function}
|
||||
*/
|
||||
setup = function setup() {
|
||||
var options = _.merge({'init': true}, _.transform(arguments, function (result, val) {
|
||||
result[val] = true;
|
||||
})
|
||||
),
|
||||
fixtureOps = getFixtureOps(options);
|
||||
|
||||
return function (done) {
|
||||
return sequence(fixtureOps).then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* ## DoAuth For Route Tests
|
||||
*
|
||||
* This function manages the work of ensuring we have an overriden owner user, and grabbing an access token
|
||||
* @returns {deferred.promise<AccessToken>}
|
||||
*/
|
||||
// TODO make this do the DB init as well
|
||||
doAuth = function doAuth() {
|
||||
var options = arguments,
|
||||
deferred = when.defer(),
|
||||
request = arguments[0],
|
||||
user = DataGenerator.forModel.users[0],
|
||||
fixtureOps;
|
||||
|
||||
// Remove request from this list
|
||||
delete options[0];
|
||||
// No DB setup, but override the owner
|
||||
options = _.merge({'owner:post': true}, _.transform(options, function (result, val) {
|
||||
result[val] = true;
|
||||
})
|
||||
);
|
||||
|
||||
fixtureOps = getFixtureOps(options);
|
||||
|
||||
sequence(fixtureOps).then(function () {
|
||||
request.post('/ghost/api/v0.1/authentication/token/')
|
||||
.send({ grant_type: 'password', username: user.email, password: user.password, client_id: 'ghost-admin'})
|
||||
.end(function (err, res) {
|
||||
if (err) {
|
||||
deferred.reject(err);
|
||||
}
|
||||
|
||||
deferred.resolve(res.body.access_token);
|
||||
});
|
||||
});
|
||||
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
teardown = function teardown(done) {
|
||||
migration.reset().then(function () {
|
||||
done();
|
||||
}).catch(done);
|
||||
|
@ -254,26 +363,24 @@ teardown = function (done) {
|
|||
|
||||
module.exports = {
|
||||
teardown: teardown,
|
||||
setup: setup,
|
||||
doAuth: doAuth,
|
||||
|
||||
initData: initData,
|
||||
clearData: clearData,
|
||||
insertDefaultFixtures: insertDefaultFixtures,
|
||||
insertPosts: insertPosts,
|
||||
insertMorePosts: insertMorePosts,
|
||||
insertMorePostsTags: insertMorePostsTags,
|
||||
insertDefaultUser: insertDefaultUser,
|
||||
insertAdminUser: insertAdminUser,
|
||||
insertEditorUser: insertEditorUser,
|
||||
insertAuthorUser: insertAuthorUser,
|
||||
insertDefaultApp: insertDefaultApp,
|
||||
insertApps: insertApps,
|
||||
insertAppWithSettings: insertAppWithSettings,
|
||||
insertAppWithFields: insertAppWithFields,
|
||||
|
||||
loadExportFixture: loadExportFixture,
|
||||
fixtures: fixtures,
|
||||
|
||||
DataGenerator: DataGenerator,
|
||||
API: API,
|
||||
|
||||
fork: fork
|
||||
fork: fork,
|
||||
|
||||
context: {
|
||||
internal: {context: {internal: true}},
|
||||
owner: {context: {user: 1}},
|
||||
admin: {context: {user: 2}},
|
||||
editor: {context: {user: 3}},
|
||||
author: {context: {user: 4}}
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue