From c3162e5084c23598196ddf9de2d37a708721813f Mon Sep 17 00:00:00 2001 From: Hannah Wolfe Date: Thu, 11 Dec 2014 15:50:10 +0000 Subject: [PATCH] remove versioning from importer refs #4605, #4479 --- core/server/data/import/001.js | 8 - core/server/data/import/002.js | 8 - core/server/data/import/003.js | 8 - .../data/import/{000.js => data-importer.js} | 44 +- core/server/data/import/index.js | 18 +- core/server/data/importer/importers/data.js | 2 +- core/test/integration/import_spec.js | 1389 ++++++++--------- 7 files changed, 672 insertions(+), 805 deletions(-) delete mode 100644 core/server/data/import/001.js delete mode 100644 core/server/data/import/002.js delete mode 100644 core/server/data/import/003.js rename core/server/data/import/{000.js => data-importer.js} (81%) diff --git a/core/server/data/import/001.js b/core/server/data/import/001.js deleted file mode 100644 index 5def4a987108..000000000000 --- a/core/server/data/import/001.js +++ /dev/null @@ -1,8 +0,0 @@ -var Importer000 = require('./000'); - -module.exports = { - Importer001: Importer000, - importData: function (data) { - return new Importer000.importData(data); - } -}; diff --git a/core/server/data/import/002.js b/core/server/data/import/002.js deleted file mode 100644 index b0a113d256d6..000000000000 --- a/core/server/data/import/002.js +++ /dev/null @@ -1,8 +0,0 @@ -var Importer000 = require('./000'); - -module.exports = { - Importer002: Importer000, - importData: function (data) { - return new Importer000.importData(data); - } -}; diff --git a/core/server/data/import/003.js b/core/server/data/import/003.js deleted file mode 100644 index 349df223e704..000000000000 --- a/core/server/data/import/003.js +++ /dev/null @@ -1,8 +0,0 @@ -var Importer000 = require('./000'); - -module.exports = { - Importer003: Importer000, - importData: function (data) { - return new Importer000.importData(data); - } -}; diff --git a/core/server/data/import/000.js b/core/server/data/import/data-importer.js similarity index 81% rename from core/server/data/import/000.js rename to core/server/data/import/data-importer.js index 571aeac9fb8b..4b692fb4b70c 100644 --- a/core/server/data/import/000.js +++ b/core/server/data/import/data-importer.js @@ -3,37 +3,15 @@ var Promise = require('bluebird'), models = require('../../models'), utils = require('./utils'), - Importer000; + DataImporter; -Importer000 = function () { - _.bindAll(this, 'doImport'); +DataImporter = function () {}; - this.version = '000'; - - this.importFrom = { - '000': this.doImport, - '001': this.doImport, - '002': this.doImport, - '003': this.doImport - }; +DataImporter.prototype.importData = function (data) { + return this.doImport(data); }; -Importer000.prototype.importData = function (data) { - return this.canImport(data) - .then(function (importerFunc) { - return importerFunc(data); - }); -}; - -Importer000.prototype.canImport = function (data) { - if (data.meta && data.meta.version && this.importFrom[data.meta.version]) { - return Promise.resolve(this.importFrom[data.meta.version]); - } - - return Promise.reject('Unsupported version of data: ' + data.meta.version); -}; - -Importer000.prototype.loadUsers = function () { +DataImporter.prototype.loadUsers = function () { var users = {all: {}}; return models.User.findAll({include: ['roles']}).then(function (_users) { @@ -52,11 +30,7 @@ Importer000.prototype.loadUsers = function () { }); }; -// Importer000.prototype.importerFunction = function (t) { -// -// }; - -Importer000.prototype.doUserImport = function (t, tableData, users, errors) { +DataImporter.prototype.doUserImport = function (t, tableData, users, errors) { var userOps = [], imported = []; @@ -89,7 +63,7 @@ Importer000.prototype.doUserImport = function (t, tableData, users, errors) { return Promise.resolve({}); }; -Importer000.prototype.doImport = function (data) { +DataImporter.prototype.doImport = function (data) { var self = this, tableData = data.data, imported = {}, @@ -171,8 +145,8 @@ Importer000.prototype.doImport = function (data) { }; module.exports = { - Importer000: Importer000, + DataImporter: DataImporter, importData: function (data) { - return new Importer000().importData(data); + return new DataImporter().importData(data); } }; diff --git a/core/server/data/import/index.js b/core/server/data/import/index.js index 0deaa54e9c02..c6ba16b3ffb2 100644 --- a/core/server/data/import/index.js +++ b/core/server/data/import/index.js @@ -4,6 +4,7 @@ var Promise = require('bluebird'), errors = require('../../errors'), uuid = require('node-uuid'), validator = require('validator'), + importer = require('./data-importer'), tables = require('../schema').tables, validate, handleErrors, @@ -184,25 +185,12 @@ validate = function validate(data) { }); }; -module.exports = function (version, data) { - var importer, - sanitizeResults; - - sanitizeResults = sanitize(data); +module.exports = function (data) { + var sanitizeResults = sanitize(data); data = sanitizeResults.data; return validate(data).then(function () { - try { - importer = require('./' + version); - } catch (ignore) { - // Zero effs given - } - - if (!importer) { - return Promise.reject('No importer found'); - } - return importer.importData(data); }).then(function () { return sanitizeResults; diff --git a/core/server/data/importer/importers/data.js b/core/server/data/importer/importers/data.js index 455164e9fffb..b5f9ef39471d 100644 --- a/core/server/data/importer/importers/data.js +++ b/core/server/data/importer/importers/data.js @@ -8,7 +8,7 @@ DataImporter = { return importData; }, doImport: function (importData) { - return importer('003', importData); + return importer(importData); } }; diff --git a/core/test/integration/import_spec.js b/core/test/integration/import_spec.js index 250850d4f0ab..6514f3ac3b19 100644 --- a/core/test/integration/import_spec.js +++ b/core/test/integration/import_spec.js @@ -13,13 +13,9 @@ var testUtils = require('../utils/index'), config = rewire('../../server/config'), 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'), + DataImporter = require('../../server/data/import/data-importer'), knex, sandbox = sinon.sandbox.create(); @@ -45,58 +41,13 @@ describe('Import', function () { knex = config.database.knex; }); - it('resolves 000', function (done) { - var importStub = sandbox.stub(Importer000, 'importData', function () { + it('resolves DataImporter', function (done) { + var importStub = sandbox.stub(DataImporter, 'importData', function () { return Promise.resolve(); }), fakeData = {test: true}; - importer('000', fakeData).then(function () { - importStub.calledWith(fakeData).should.equal(true); - - importStub.restore(); - - done(); - }).catch(done); - }); - - it('resolves 001', function (done) { - var importStub = sandbox.stub(Importer001, 'importData', function () { - return Promise.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 Promise.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 Promise.resolve(); - }), - fakeData = {test: true}; - - importer('003', fakeData).then(function () { + importer(fakeData).then(function () { importStub.calledWith(fakeData).should.equal(true); importStub.restore(); @@ -117,7 +68,7 @@ describe('Import', function () { testUtils.fixtures.loadExportFixture('export-003').then(function (exported) { exportData = exported; - return importer('003', exportData); + return importer(exportData); }).then(function (importResult) { should.exist(importResult); should.exist(importResult.data); @@ -132,7 +83,7 @@ describe('Import', function () { testUtils.fixtures.loadExportFixture('export-003-duplicate-posts').then(function (exported) { exportData = exported; - return importer('003', exportData); + return importer(exportData); }).then(function (importResult) { should.exist(importResult.data.data.posts); @@ -149,7 +100,7 @@ describe('Import', function () { testUtils.fixtures.loadExportFixture('export-003-duplicate-tags').then(function (exported) { exportData = exported; - return importer('003', exportData); + return importer(exportData); }).then(function (importResult) { should.exist(importResult.data.data.tags); should.exist(importResult.data.data.posts_tags); @@ -170,24 +121,21 @@ describe('Import', function () { }); }); - describe('000', function () { + describe('DataImporter', function () { before(function () { knex = config.database.knex; }); beforeEach(testUtils.setup('roles', 'owner', 'settings')); - should.exist(Importer000); + should.exist(DataImporter); it('imports data from 000', function (done) { - var exportData, - versioningStub = sandbox.stub(versioning, 'getDatabaseVersion', function () { - return Promise.resolve('000'); - }); + var exportData; testUtils.fixtures.loadExportFixture('export-000').then(function (exported) { exportData = exported; - return importer('000', exportData); + return importer(exportData); }).then(function () { // Grab the data from tables return Promise.all([ @@ -218,22 +166,11 @@ describe('Import', function () { // test tags tags.length.should.equal(exportData.data.tags.length, 'no new tags'); - versioningStub.restore(); - done(); }).catch(done); }); - }); - - describe('001', function () { - before(function () { - knex = config.database.knex; - }); - beforeEach(testUtils.setup('roles', 'owner', 'settings')); - - should.exist(Importer001); - it('safely imports data from 001', function (done) { + it('safely imports data, from 001', function (done) { var exportData, timestamp = 1349928000000; @@ -245,7 +182,7 @@ describe('Import', function () { exportData.data.posts[0].updated_at = timestamp; exportData.data.posts[0].published_at = timestamp; - return importer('001', exportData); + return importer(exportData); }).then(function () { // Grab the data from tables return Promise.all([ @@ -315,7 +252,7 @@ describe('Import', function () { // change title to 151 characters exportData.data.posts[0].title = new Array(152).join('a'); exportData.data.posts[0].tags = 'Tag'; - return importer('001', exportData); + return importer(exportData); }).then(function () { (1).should.eql(0, 'Data import should not resolve promise.'); }, function (error) { @@ -360,7 +297,7 @@ describe('Import', function () { exportData = exported; // change to blank settings key exportData.data.settings[3].key = null; - return importer('001', exportData); + return importer(exportData); }).then(function () { (1).should.eql(0, 'Data import should not resolve promise.'); }, function (error) { @@ -405,8 +342,6 @@ describe('Import', function () { }); beforeEach(testUtils.setup('roles', 'owner', 'settings')); - should.exist(Importer002); - it('safely imports data from 002', function (done) { var exportData, timestamp = 1349928000000; @@ -419,7 +354,7 @@ describe('Import', function () { exportData.data.posts[0].updated_at = timestamp; exportData.data.posts[0].published_at = timestamp; - return importer('002', exportData); + return importer(exportData); }).then(function () { // Grab the data from tables return Promise.all([ @@ -489,7 +424,7 @@ describe('Import', function () { // change title to 151 characters exportData.data.posts[0].title = new Array(152).join('a'); exportData.data.posts[0].tags = 'Tag'; - return importer('002', exportData); + return importer(exportData); }).then(function () { (1).should.eql(0, 'Data import should not resolve promise.'); }, function (error) { @@ -533,7 +468,7 @@ describe('Import', function () { exportData = exported; // change to blank settings key exportData.data.settings[3].key = null; - return importer('002', exportData); + return importer(exportData); }).then(function () { (1).should.eql(0, 'Data import should not resolve promise.'); }, function (error) { @@ -577,14 +512,12 @@ describe('Import', function () { }); beforeEach(testUtils.setup('roles', 'owner', 'settings')); - should.exist(Importer003); - it('safely imports data from 003 (single user)', function (done) { var exportData; testUtils.fixtures.loadExportFixture('export-003').then(function (exported) { exportData = exported; - return importer('003', exportData); + return importer(exportData); }).then(function () { // Grab the data from tables return Promise.all([ @@ -629,7 +562,7 @@ describe('Import', function () { testUtils.fixtures.loadExportFixture('export-003-badValidation').then(function (exported) { exportData = exported; - return importer('003', exportData); + return importer(exportData); }).then(function () { done(new Error('Allowed import of duplicate data')); }).catch(function (response) { @@ -652,7 +585,7 @@ describe('Import', function () { var exportData; testUtils.fixtures.loadExportFixture('export-003-dbErrors').then(function (exported) { exportData = exported; - return importer('003', exportData); + return importer(exportData); }).then(function () { done(new Error('Allowed import of duplicate data')); }).catch(function (response) { @@ -668,7 +601,7 @@ describe('Import', function () { testUtils.fixtures.loadExportFixture('export-003-mu-unknownAuthor').then(function (exported) { exportData = exported; - return importer('003', exportData); + return importer(exportData); }).then(function () { done(new Error('Allowed import of unknown author')); }).catch(function (response) { @@ -689,7 +622,7 @@ describe('Import', function () { exportData.data.tags.length.should.be.above(1); exportData.data.posts_tags.length.should.be.above(1); - return importer('003', exportData); + return importer(exportData); }).then(function () { done(new Error('Allowed import of invalid tags data')); }).catch(function (response) { @@ -710,7 +643,7 @@ describe('Import', function () { exportData.data.posts.length.should.be.above(1); - return importer('003', exportData); + return importer(exportData); }).then(function () { done(new Error('Allowed import of invalid tags data')); }).catch(function (response) { @@ -727,7 +660,7 @@ describe('Import', function () { exportData.data.posts.length.should.be.above(0); - return importer('003', exportData); + return importer(exportData); }).then(function () { // Grab the data from tables return knex('posts').select(); @@ -748,697 +681,693 @@ describe('Import', function () { describe('Import (new test structure)', function () { before(testUtils.teardown); - describe('003', function () { + after(testUtils.teardown); + + describe('imports multi user data onto blank ghost install', function () { + var exportData; + + before(function doImport(done) { + knex = config.database.knex; + + testUtils.initFixtures('roles', 'owner', 'settings').then(function () { + return testUtils.fixtures.loadExportFixture('export-003-mu'); + }).then(function (exported) { + exportData = exported; + return importer(exportData); + }).then(function () { + done(); + }).catch(done); + }); after(testUtils.teardown); - should.exist(Importer003); + it('gets the right data', function (done) { + var fetchImported = Promise.join( + knex('posts').select(), + knex('settings').select(), + knex('tags').select() + ); + + fetchImported.then(function (importedData) { + var posts, + settings, + tags, + post1, + post2, + post3; + + // General data checks + should.exist(importedData); + importedData.length.should.equal(3, 'Did not get data successfully'); - describe('imports multi user data onto blank ghost install', function () { - var exportData; + // Test posts, settings and tags + posts = importedData[0]; + settings = importedData[1]; + tags = importedData[2]; - before(function doImport(done) { - knex = config.database.knex; + post1 = _.find(posts, function (post) { + return post.slug === exportData.data.posts[0].slug; + }); + post2 = _.find(posts, function (post) { + return post.slug === exportData.data.posts[1].slug; + }); + post3 = _.find(posts, function (post) { + return post.slug === exportData.data.posts[2].slug; + }); - testUtils.initFixtures('roles', 'owner', 'settings').then(function () { - return testUtils.fixtures.loadExportFixture('export-003-mu'); - }).then(function (exported) { - exportData = exported; - return importer('003', exportData); - }).then(function () { - done(); - }).catch(done); - }); - after(testUtils.teardown); + // test posts + posts.length.should.equal(3, 'Wrong number of posts'); + post1.title.should.equal(exportData.data.posts[0].title); + post2.title.should.equal(exportData.data.posts[1].title); + post3.title.should.equal(exportData.data.posts[2].title); - it('gets the right data', function (done) { - var fetchImported = Promise.join( - knex('posts').select(), - knex('settings').select(), - knex('tags').select() - ); + // test tags + tags.length.should.equal(3, 'should be 3 tags'); - fetchImported.then(function (importedData) { - var posts, - settings, - tags, - post1, - post2, - post3; + // test settings + settings.length.should.be.above(0, 'Wrong number of settings'); + _.findWhere(settings, {key: 'databaseVersion'}).value.should.equal('003', 'Wrong database version'); - // General data checks - should.exist(importedData); - importedData.length.should.equal(3, 'Did not get data successfully'); - - // Test posts, settings and tags - posts = importedData[0]; - settings = importedData[1]; - tags = importedData[2]; - - post1 = _.find(posts, function (post) { - return post.slug === exportData.data.posts[0].slug; - }); - post2 = _.find(posts, function (post) { - return post.slug === exportData.data.posts[1].slug; - }); - post3 = _.find(posts, function (post) { - return post.slug === exportData.data.posts[2].slug; - }); - - // test posts - posts.length.should.equal(3, 'Wrong number of posts'); - post1.title.should.equal(exportData.data.posts[0].title); - post2.title.should.equal(exportData.data.posts[1].title); - post3.title.should.equal(exportData.data.posts[2].title); - - // test tags - tags.length.should.equal(3, 'should be 3 tags'); + done(); + }).catch(done); + }); - // test settings - settings.length.should.be.above(0, 'Wrong number of settings'); - _.findWhere(settings, {key: 'databaseVersion'}).value.should.equal('003', 'Wrong database version'); + it('imports users with correct roles and status', function (done) { + var fetchImported = Promise.join( + knex('users').select(), + knex('roles_users').select() + ); - done(); - }).catch(done); - }); + fetchImported.then(function (importedData) { + var user1, + user2, + user3, + users, + rolesUsers; - it('imports users with correct roles and status', function (done) { - var fetchImported = Promise.join( - knex('users').select(), - knex('roles_users').select() - ); + // General data checks + should.exist(importedData); + importedData.length.should.equal(2, 'Did not get data successfully'); + + // Test the users and roles + users = importedData[0]; + rolesUsers = importedData[1]; + + // we imported 3 users + // the original user should be untouched + // the two news users should have been created + users.length.should.equal(3, 'There should only be three users'); + + // the owner user is first + user1 = users[0]; + // the other two users should have the imported data, but they get inserted in different orders + user2 = _.find(users, function (user) { + return user.name === exportData.data.users[1].name; + }); + user3 = _.find(users, function (user) { + return user.name === exportData.data.users[2].name; + }); - fetchImported.then(function (importedData) { - var user1, - user2, - user3, - users, - rolesUsers; + user1.email.should.equal(testUtils.DataGenerator.Content.users[0].email); + user1.password.should.equal(testUtils.DataGenerator.Content.users[0].password); + user1.status.should.equal('active'); + user2.email.should.equal(exportData.data.users[1].email); + user3.email.should.equal(exportData.data.users[2].email); + + // Newly created users should have a status of locked + user2.status.should.equal('locked'); + user3.status.should.equal('locked'); + + // Newly created users should have created_at/_by and updated_at/_by set to when they were imported + user2.created_by.should.equal(user1.id); + user2.created_at.should.not.equal(exportData.data.users[1].created_at); + user2.updated_by.should.equal(user1.id); + user2.updated_at.should.not.equal(exportData.data.users[1].updated_at); + user3.created_by.should.equal(user1.id); + user3.created_at.should.not.equal(exportData.data.users[2].created_at); + user3.updated_by.should.equal(user1.id); + user3.updated_at.should.not.equal(exportData.data.users[2].updated_at); + + rolesUsers.length.should.equal(3, 'There should be 3 role relations'); + + _.each(rolesUsers, function (roleUser) { + if (roleUser.user_id === user1.id) { + roleUser.role_id.should.equal(4, 'Original user should be an owner'); + } + if (roleUser.user_id === user2.id) { + roleUser.role_id.should.equal(1, 'Josephine should be an admin'); + } + if (roleUser.user_id === user3.id) { + roleUser.role_id.should.equal(3, 'Smith should be an author by default'); + } + }); - // General data checks - should.exist(importedData); - importedData.length.should.equal(2, 'Did not get data successfully'); - - // Test the users and roles - users = importedData[0]; - rolesUsers = importedData[1]; - - // we imported 3 users - // the original user should be untouched - // the two news users should have been created - users.length.should.equal(3, 'There should only be three users'); - - // the owner user is first - user1 = users[0]; - // the other two users should have the imported data, but they get inserted in different orders - user2 = _.find(users, function (user) { - return user.name === exportData.data.users[1].name; - }); - user3 = _.find(users, function (user) { - return user.name === exportData.data.users[2].name; - }); - - user1.email.should.equal(testUtils.DataGenerator.Content.users[0].email); - user1.password.should.equal(testUtils.DataGenerator.Content.users[0].password); - user1.status.should.equal('active'); - user2.email.should.equal(exportData.data.users[1].email); - user3.email.should.equal(exportData.data.users[2].email); - - // Newly created users should have a status of locked - user2.status.should.equal('locked'); - user3.status.should.equal('locked'); - - // Newly created users should have created_at/_by and updated_at/_by set to when they were imported - user2.created_by.should.equal(user1.id); - user2.created_at.should.not.equal(exportData.data.users[1].created_at); - user2.updated_by.should.equal(user1.id); - user2.updated_at.should.not.equal(exportData.data.users[1].updated_at); - user3.created_by.should.equal(user1.id); - user3.created_at.should.not.equal(exportData.data.users[2].created_at); - user3.updated_by.should.equal(user1.id); - user3.updated_at.should.not.equal(exportData.data.users[2].updated_at); - - rolesUsers.length.should.equal(3, 'There should be 3 role relations'); - - _.each(rolesUsers, function (roleUser) { - if (roleUser.user_id === user1.id) { - roleUser.role_id.should.equal(4, 'Original user should be an owner'); - } - if (roleUser.user_id === user2.id) { - roleUser.role_id.should.equal(1, 'Josephine should be an admin'); - } - if (roleUser.user_id === user3.id) { - roleUser.role_id.should.equal(3, 'Smith should be an author by default'); - } - }); + done(); + }).catch(done); + }); - done(); - }).catch(done); - }); + it('imports posts & tags with correct authors, owners etc', function (done) { + var fetchImported = Promise.join( + knex('users').select(), + knex('posts').select(), + knex('tags').select() + ); - it('imports posts & tags with correct authors, owners etc', function (done) { - var fetchImported = Promise.join( - knex('users').select(), - knex('posts').select(), - knex('tags').select() - ); + fetchImported.then(function (importedData) { + var users, user1, user2, user3, + posts, post1, post2, post3, + tags, tag1, tag2, tag3; - fetchImported.then(function (importedData) { - var users, user1, user2, user3, - posts, post1, post2, post3, - tags, tag1, tag2, tag3; + // General data checks + should.exist(importedData); + importedData.length.should.equal(3, 'Did not get data successfully'); + + // Test the users and roles + users = importedData[0]; + posts = importedData[1]; + tags = importedData[2]; + + // Grab the users + // the owner user is first + user1 = users[0]; + // the other two users should have the imported data, but they get inserted in different orders + user2 = _.find(users, function (user) { + return user.name === exportData.data.users[1].name; + }); + user3 = _.find(users, function (user) { + return user.name === exportData.data.users[2].name; + }); + post1 = _.find(posts, function (post) { + return post.slug === exportData.data.posts[0].slug; + }); + post2 = _.find(posts, function (post) { + return post.slug === exportData.data.posts[1].slug; + }); + post3 = _.find(posts, function (post) { + return post.slug === exportData.data.posts[2].slug; + }); + tag1 = _.find(tags, function (tag) { + return tag.slug === exportData.data.tags[0].slug; + }); + tag2 = _.find(tags, function (tag) { + return tag.slug === exportData.data.tags[1].slug; + }); + tag3 = _.find(tags, function (tag) { + return tag.slug === exportData.data.tags[2].slug; + }); - // General data checks - should.exist(importedData); - importedData.length.should.equal(3, 'Did not get data successfully'); - - // Test the users and roles - users = importedData[0]; - posts = importedData[1]; - tags = importedData[2]; - - // Grab the users - // the owner user is first - user1 = users[0]; - // the other two users should have the imported data, but they get inserted in different orders - user2 = _.find(users, function (user) { - return user.name === exportData.data.users[1].name; - }); - user3 = _.find(users, function (user) { - return user.name === exportData.data.users[2].name; - }); - post1 = _.find(posts, function (post) { - return post.slug === exportData.data.posts[0].slug; - }); - post2 = _.find(posts, function (post) { - return post.slug === exportData.data.posts[1].slug; - }); - post3 = _.find(posts, function (post) { - return post.slug === exportData.data.posts[2].slug; - }); - tag1 = _.find(tags, function (tag) { - return tag.slug === exportData.data.tags[0].slug; - }); - tag2 = _.find(tags, function (tag) { - return tag.slug === exportData.data.tags[1].slug; - }); - tag3 = _.find(tags, function (tag) { - return tag.slug === exportData.data.tags[2].slug; - }); - - // Check the authors are correct - post1.author_id.should.equal(user2.id); - post2.author_id.should.equal(user3.id); - post3.author_id.should.equal(user1.id); - - // Created by should be what was in the import file - post1.created_by.should.equal(user1.id); - post2.created_by.should.equal(user3.id); - post3.created_by.should.equal(user1.id); - - // Updated by gets set to the current user - post1.updated_by.should.equal(user1.id); - post2.updated_by.should.equal(user1.id); - post3.updated_by.should.equal(user1.id); - - // Published by should be what was in the import file - post1.published_by.should.equal(user2.id); - post2.published_by.should.equal(user3.id); - post3.published_by.should.equal(user1.id); - - // Created by should be what was in the import file - tag1.created_by.should.equal(user1.id); - tag2.created_by.should.equal(user2.id); - tag3.created_by.should.equal(user3.id); - - // Updated by gets set to the current user - tag1.updated_by.should.equal(user1.id); - tag2.updated_by.should.equal(user1.id); - tag3.updated_by.should.equal(user1.id); + // Check the authors are correct + post1.author_id.should.equal(user2.id); + post2.author_id.should.equal(user3.id); + post3.author_id.should.equal(user1.id); - done(); - }).catch(done); - }); + // Created by should be what was in the import file + post1.created_by.should.equal(user1.id); + post2.created_by.should.equal(user3.id); + post3.created_by.should.equal(user1.id); + + // Updated by gets set to the current user + post1.updated_by.should.equal(user1.id); + post2.updated_by.should.equal(user1.id); + post3.updated_by.should.equal(user1.id); + + // Published by should be what was in the import file + post1.published_by.should.equal(user2.id); + post2.published_by.should.equal(user3.id); + post3.published_by.should.equal(user1.id); + + // Created by should be what was in the import file + tag1.created_by.should.equal(user1.id); + tag2.created_by.should.equal(user2.id); + tag3.created_by.should.equal(user3.id); + + // Updated by gets set to the current user + tag1.updated_by.should.equal(user1.id); + tag2.updated_by.should.equal(user1.id); + tag3.updated_by.should.equal(user1.id); + + done(); + }).catch(done); }); + }); - describe('imports multi user data with no owner onto blank ghost install', function () { - var exportData; + describe('imports multi user data with no owner onto blank ghost install', function () { + var exportData; - before(function doImport(done) { - knex = config.database.knex; + before(function doImport(done) { + knex = config.database.knex; - testUtils.initFixtures('roles', 'owner', 'settings').then(function () { - return testUtils.fixtures.loadExportFixture('export-003-mu-noOwner'); - }).then(function (exported) { - exportData = exported; - return importer('003', exportData); - }).then(function () { - done(); - }).catch(done); - }); - after(testUtils.teardown); + testUtils.initFixtures('roles', 'owner', 'settings').then(function () { + return testUtils.fixtures.loadExportFixture('export-003-mu-noOwner'); + }).then(function (exported) { + exportData = exported; + return importer(exportData); + }).then(function () { + done(); + }).catch(done); + }); + after(testUtils.teardown); - it('gets the right data', function (done) { - var fetchImported = Promise.join( - knex('posts').select(), - knex('settings').select(), - knex('tags').select() - ); + it('gets the right data', function (done) { + var fetchImported = Promise.join( + knex('posts').select(), + knex('settings').select(), + knex('tags').select() + ); + + fetchImported.then(function (importedData) { + var posts, + settings, + tags, + post1, + post2, + post3; + + // General data checks + should.exist(importedData); + importedData.length.should.equal(3, 'Did not get data successfully'); - fetchImported.then(function (importedData) { - var posts, - settings, - tags, - post1, - post2, - post3; + // Test posts, settings and tags + posts = importedData[0]; + settings = importedData[1]; + tags = importedData[2]; - // General data checks - should.exist(importedData); - importedData.length.should.equal(3, 'Did not get data successfully'); - - // Test posts, settings and tags - posts = importedData[0]; - settings = importedData[1]; - tags = importedData[2]; - - post1 = _.find(posts, function (post) { - return post.slug === exportData.data.posts[0].slug; - }); - post2 = _.find(posts, function (post) { - return post.slug === exportData.data.posts[1].slug; - }); - post3 = _.find(posts, function (post) { - return post.slug === exportData.data.posts[2].slug; - }); - - // test posts - posts.length.should.equal(3, 'Wrong number of posts'); - post1.title.should.equal(exportData.data.posts[0].title); - post2.title.should.equal(exportData.data.posts[1].title); - post3.title.should.equal(exportData.data.posts[2].title); - - // test tags - tags.length.should.equal(3, 'should be 3 tags'); + post1 = _.find(posts, function (post) { + return post.slug === exportData.data.posts[0].slug; + }); + post2 = _.find(posts, function (post) { + return post.slug === exportData.data.posts[1].slug; + }); + post3 = _.find(posts, function (post) { + return post.slug === exportData.data.posts[2].slug; + }); - // test settings - settings.length.should.be.above(0, 'Wrong number of settings'); - _.findWhere(settings, {key: 'databaseVersion'}).value.should.equal('003', 'Wrong database version'); + // test posts + posts.length.should.equal(3, 'Wrong number of posts'); + post1.title.should.equal(exportData.data.posts[0].title); + post2.title.should.equal(exportData.data.posts[1].title); + post3.title.should.equal(exportData.data.posts[2].title); - done(); - }).catch(done); - }); + // test tags + tags.length.should.equal(3, 'should be 3 tags'); - it('imports users with correct roles and status', function (done) { - var fetchImported = Promise.join( - knex('users').select(), - knex('roles_users').select() - ); + // test settings + settings.length.should.be.above(0, 'Wrong number of settings'); + _.findWhere(settings, {key: 'databaseVersion'}).value.should.equal('003', 'Wrong database version'); - fetchImported.then(function (importedData) { - var user1, - user2, - user3, - users, - rolesUsers; + done(); + }).catch(done); + }); - // General data checks - should.exist(importedData); - importedData.length.should.equal(2, 'Did not get data successfully'); - - // Test the users and roles - users = importedData[0]; - rolesUsers = importedData[1]; - - // we imported 3 users - // the original user should be untouched - // the two news users should have been created - users.length.should.equal(3, 'There should only be three users'); - - // the owner user is first - user1 = users[0]; - // the other two users should have the imported data, but they get inserted in different orders - user2 = _.find(users, function (user) { - return user.name === exportData.data.users[0].name; - }); - user3 = _.find(users, function (user) { - return user.name === exportData.data.users[1].name; - }); - - user1.email.should.equal(testUtils.DataGenerator.Content.users[0].email); - user1.password.should.equal(testUtils.DataGenerator.Content.users[0].password); - user1.status.should.equal('active'); - user2.email.should.equal(exportData.data.users[0].email); - user3.email.should.equal(exportData.data.users[1].email); - - // Newly created users should have a status of locked - user2.status.should.equal('locked'); - user3.status.should.equal('locked'); - - // Newly created users should have created_at/_by and updated_at/_by set to when they were imported - user2.created_by.should.equal(user1.id); - user2.created_at.should.not.equal(exportData.data.users[0].created_at); - user2.updated_by.should.equal(user1.id); - user2.updated_at.should.not.equal(exportData.data.users[0].updated_at); - user3.created_by.should.equal(user1.id); - user3.created_at.should.not.equal(exportData.data.users[1].created_at); - user3.updated_by.should.equal(user1.id); - user3.updated_at.should.not.equal(exportData.data.users[1].updated_at); - - rolesUsers.length.should.equal(3, 'There should be 3 role relations'); - - _.each(rolesUsers, function (roleUser) { - if (roleUser.user_id === user1.id) { - roleUser.role_id.should.equal(4, 'Original user should be an owner'); - } - if (roleUser.user_id === user2.id) { - roleUser.role_id.should.equal(1, 'Josephine should be an admin'); - } - if (roleUser.user_id === user3.id) { - roleUser.role_id.should.equal(3, 'Smith should be an author by default'); - } - }); + it('imports users with correct roles and status', function (done) { + var fetchImported = Promise.join( + knex('users').select(), + knex('roles_users').select() + ); - done(); - }).catch(done); - }); + fetchImported.then(function (importedData) { + var user1, + user2, + user3, + users, + rolesUsers; - it('imports posts & tags with correct authors, owners etc', function (done) { - var fetchImported = Promise.join( - knex('users').select(), - knex('posts').select(), - knex('tags').select() - ); + // General data checks + should.exist(importedData); + importedData.length.should.equal(2, 'Did not get data successfully'); + + // Test the users and roles + users = importedData[0]; + rolesUsers = importedData[1]; + + // we imported 3 users + // the original user should be untouched + // the two news users should have been created + users.length.should.equal(3, 'There should only be three users'); + + // the owner user is first + user1 = users[0]; + // the other two users should have the imported data, but they get inserted in different orders + user2 = _.find(users, function (user) { + return user.name === exportData.data.users[0].name; + }); + user3 = _.find(users, function (user) { + return user.name === exportData.data.users[1].name; + }); - fetchImported.then(function (importedData) { - var users, user1, user2, user3, - posts, post1, post2, post3, - tags, tag1, tag2, tag3; + user1.email.should.equal(testUtils.DataGenerator.Content.users[0].email); + user1.password.should.equal(testUtils.DataGenerator.Content.users[0].password); + user1.status.should.equal('active'); + user2.email.should.equal(exportData.data.users[0].email); + user3.email.should.equal(exportData.data.users[1].email); + + // Newly created users should have a status of locked + user2.status.should.equal('locked'); + user3.status.should.equal('locked'); + + // Newly created users should have created_at/_by and updated_at/_by set to when they were imported + user2.created_by.should.equal(user1.id); + user2.created_at.should.not.equal(exportData.data.users[0].created_at); + user2.updated_by.should.equal(user1.id); + user2.updated_at.should.not.equal(exportData.data.users[0].updated_at); + user3.created_by.should.equal(user1.id); + user3.created_at.should.not.equal(exportData.data.users[1].created_at); + user3.updated_by.should.equal(user1.id); + user3.updated_at.should.not.equal(exportData.data.users[1].updated_at); + + rolesUsers.length.should.equal(3, 'There should be 3 role relations'); + + _.each(rolesUsers, function (roleUser) { + if (roleUser.user_id === user1.id) { + roleUser.role_id.should.equal(4, 'Original user should be an owner'); + } + if (roleUser.user_id === user2.id) { + roleUser.role_id.should.equal(1, 'Josephine should be an admin'); + } + if (roleUser.user_id === user3.id) { + roleUser.role_id.should.equal(3, 'Smith should be an author by default'); + } + }); - // General data checks - should.exist(importedData); - importedData.length.should.equal(3, 'Did not get data successfully'); - - // Test the users and roles - users = importedData[0]; - posts = importedData[1]; - tags = importedData[2]; - - // Grab the users - // the owner user is first - user1 = users[0]; - // the other two users should have the imported data, but they get inserted in different orders - user2 = _.find(users, function (user) { - return user.name === exportData.data.users[0].name; - }); - user3 = _.find(users, function (user) { - return user.name === exportData.data.users[1].name; - }); - post1 = _.find(posts, function (post) { - return post.slug === exportData.data.posts[0].slug; - }); - post2 = _.find(posts, function (post) { - return post.slug === exportData.data.posts[1].slug; - }); - post3 = _.find(posts, function (post) { - return post.slug === exportData.data.posts[2].slug; - }); - tag1 = _.find(tags, function (tag) { - return tag.slug === exportData.data.tags[0].slug; - }); - tag2 = _.find(tags, function (tag) { - return tag.slug === exportData.data.tags[1].slug; - }); - tag3 = _.find(tags, function (tag) { - return tag.slug === exportData.data.tags[2].slug; - }); - - // Check the authors are correct - post1.author_id.should.equal(user2.id); - post2.author_id.should.equal(user3.id); - post3.author_id.should.equal(user1.id); - - // Created by should be what was in the import file - post1.created_by.should.equal(user1.id); - post2.created_by.should.equal(user3.id); - post3.created_by.should.equal(user1.id); - - // Updated by gets set to the current user - post1.updated_by.should.equal(user1.id); - post2.updated_by.should.equal(user1.id); - post3.updated_by.should.equal(user1.id); - - // Published by should be what was in the import file - post1.published_by.should.equal(user2.id); - post2.published_by.should.equal(user3.id); - post3.published_by.should.equal(user1.id); - - // Created by should be what was in the import file - tag1.created_by.should.equal(user1.id); - tag2.created_by.should.equal(user2.id); - tag3.created_by.should.equal(user3.id); - - // Updated by gets set to the current user - tag1.updated_by.should.equal(user1.id); - tag2.updated_by.should.equal(user1.id); - tag3.updated_by.should.equal(user1.id); + done(); + }).catch(done); + }); - done(); - }).catch(done); - }); + it('imports posts & tags with correct authors, owners etc', function (done) { + var fetchImported = Promise.join( + knex('users').select(), + knex('posts').select(), + knex('tags').select() + ); + + fetchImported.then(function (importedData) { + var users, user1, user2, user3, + posts, post1, post2, post3, + tags, tag1, tag2, tag3; + + // General data checks + should.exist(importedData); + importedData.length.should.equal(3, 'Did not get data successfully'); + + // Test the users and roles + users = importedData[0]; + posts = importedData[1]; + tags = importedData[2]; + + // Grab the users + // the owner user is first + user1 = users[0]; + // the other two users should have the imported data, but they get inserted in different orders + user2 = _.find(users, function (user) { + return user.name === exportData.data.users[0].name; + }); + user3 = _.find(users, function (user) { + return user.name === exportData.data.users[1].name; + }); + post1 = _.find(posts, function (post) { + return post.slug === exportData.data.posts[0].slug; + }); + post2 = _.find(posts, function (post) { + return post.slug === exportData.data.posts[1].slug; + }); + post3 = _.find(posts, function (post) { + return post.slug === exportData.data.posts[2].slug; + }); + tag1 = _.find(tags, function (tag) { + return tag.slug === exportData.data.tags[0].slug; + }); + tag2 = _.find(tags, function (tag) { + return tag.slug === exportData.data.tags[1].slug; + }); + tag3 = _.find(tags, function (tag) { + return tag.slug === exportData.data.tags[2].slug; + }); + + // Check the authors are correct + post1.author_id.should.equal(user2.id); + post2.author_id.should.equal(user3.id); + post3.author_id.should.equal(user1.id); + + // Created by should be what was in the import file + post1.created_by.should.equal(user1.id); + post2.created_by.should.equal(user3.id); + post3.created_by.should.equal(user1.id); + + // Updated by gets set to the current user + post1.updated_by.should.equal(user1.id); + post2.updated_by.should.equal(user1.id); + post3.updated_by.should.equal(user1.id); + + // Published by should be what was in the import file + post1.published_by.should.equal(user2.id); + post2.published_by.should.equal(user3.id); + post3.published_by.should.equal(user1.id); + + // Created by should be what was in the import file + tag1.created_by.should.equal(user1.id); + tag2.created_by.should.equal(user2.id); + tag3.created_by.should.equal(user3.id); + + // Updated by gets set to the current user + tag1.updated_by.should.equal(user1.id); + tag2.updated_by.should.equal(user1.id); + tag3.updated_by.should.equal(user1.id); + + done(); + }).catch(done); }); + }); - describe('imports multi user data onto existing data', function () { - var exportData; + describe('imports multi user data onto existing data', function () { + var exportData; - before(function doImport(done) { - knex = config.database.knex; + before(function doImport(done) { + knex = config.database.knex; - // initialise the blog with some data - testUtils.initFixtures('users:roles', 'posts', 'settings').then(function () { - return testUtils.fixtures.loadExportFixture('export-003-mu'); - }).then(function (exported) { - exportData = exported; - return importer('003', exportData); - }).then(function () { - done(); - }).catch(done); - }); - after(testUtils.teardown); + // initialise the blog with some data + testUtils.initFixtures('users:roles', 'posts', 'settings').then(function () { + return testUtils.fixtures.loadExportFixture('export-003-mu'); + }).then(function (exported) { + exportData = exported; + return importer(exportData); + }).then(function () { + done(); + }).catch(done); + }); + after(testUtils.teardown); - it('gets the right data', function (done) { - var fetchImported = Promise.join( - knex('posts').select(), - knex('settings').select(), - knex('tags').select() - ); + it('gets the right data', function (done) { + var fetchImported = Promise.join( + knex('posts').select(), + knex('settings').select(), + knex('tags').select() + ); + + fetchImported.then(function (importedData) { + var posts, + settings, + tags, + post1, + post2, + post3; + + // General data checks + should.exist(importedData); + importedData.length.should.equal(3, 'Did not get data successfully'); - fetchImported.then(function (importedData) { - var posts, - settings, - tags, - post1, - post2, - post3; + // Test posts, settings and tags + posts = importedData[0]; + settings = importedData[1]; + tags = importedData[2]; - // General data checks - should.exist(importedData); - importedData.length.should.equal(3, 'Did not get data successfully'); - - // Test posts, settings and tags - posts = importedData[0]; - settings = importedData[1]; - tags = importedData[2]; - - post1 = _.find(posts, function (post) { - return post.slug === exportData.data.posts[0].slug; - }); - post2 = _.find(posts, function (post) { - return post.slug === exportData.data.posts[1].slug; - }); - post3 = _.find(posts, function (post) { - return post.slug === exportData.data.posts[2].slug; - }); - - // test posts - posts.length.should.equal( - (exportData.data.posts.length + testUtils.DataGenerator.Content.posts.length), - 'Wrong number of posts' - ); - - posts[0].title.should.equal(testUtils.DataGenerator.Content.posts[0].title); - - post1.title.should.equal(exportData.data.posts[0].title); - post2.title.should.equal(exportData.data.posts[1].title); - post3.title.should.equal(exportData.data.posts[2].title); - - // test tags - tags.length.should.equal( - (exportData.data.tags.length + testUtils.DataGenerator.Content.tags.length), - 'Wrong number of tags' - ); - - tags[0].name.should.equal(testUtils.DataGenerator.Content.tags[0].name); + post1 = _.find(posts, function (post) { + return post.slug === exportData.data.posts[0].slug; + }); + post2 = _.find(posts, function (post) { + return post.slug === exportData.data.posts[1].slug; + }); + post3 = _.find(posts, function (post) { + return post.slug === exportData.data.posts[2].slug; + }); - // test settings - settings.length.should.be.above(0, 'Wrong number of settings'); - _.findWhere(settings, {key: 'databaseVersion'}).value.should.equal('003', 'Wrong database version'); + // test posts + posts.length.should.equal( + (exportData.data.posts.length + testUtils.DataGenerator.Content.posts.length), + 'Wrong number of posts' + ); - done(); - }).catch(done); - }); + posts[0].title.should.equal(testUtils.DataGenerator.Content.posts[0].title); - it('imports users with correct roles and status', function (done) { - var fetchImported = Promise.join( - knex('users').select(), - knex('roles_users').select() + post1.title.should.equal(exportData.data.posts[0].title); + post2.title.should.equal(exportData.data.posts[1].title); + post3.title.should.equal(exportData.data.posts[2].title); + + // test tags + tags.length.should.equal( + (exportData.data.tags.length + testUtils.DataGenerator.Content.tags.length), + 'Wrong number of tags' ); - fetchImported.then(function (importedData) { - var ownerUser, - newUser, - existingUser, - users, - rolesUsers; + tags[0].name.should.equal(testUtils.DataGenerator.Content.tags[0].name); - // General data checks - should.exist(importedData); - importedData.length.should.equal(2, 'Did not get data successfully'); - - // Test the users and roles - users = importedData[0]; - rolesUsers = importedData[1]; - - // we imported 3 users, there were already 4 users, only one of the imported users is new - users.length.should.equal(5, 'There should only be three users'); - - // the owner user is first - ownerUser = users[0]; - // the other two users should have the imported data, but they get inserted in different orders - newUser = _.find(users, function (user) { - return user.name === exportData.data.users[1].name; - }); - existingUser = _.find(users, function (user) { - return user.name === exportData.data.users[2].name; - }); - - ownerUser.email.should.equal(testUtils.DataGenerator.Content.users[0].email); - ownerUser.password.should.equal(testUtils.DataGenerator.Content.users[0].password); - ownerUser.status.should.equal('active'); - newUser.email.should.equal(exportData.data.users[1].email); - existingUser.email.should.equal(exportData.data.users[2].email); - - // Newly created users should have a status of locked - newUser.status.should.equal('locked'); - // The already existing user should still have a status of active - existingUser.status.should.equal('active'); - - // Newly created users should have created_at/_by and updated_at/_by set to when they were imported - newUser.created_by.should.equal(ownerUser.id); - newUser.created_at.should.not.equal(exportData.data.users[1].created_at); - newUser.updated_by.should.equal(ownerUser.id); - newUser.updated_at.should.not.equal(exportData.data.users[1].updated_at); - - rolesUsers.length.should.equal(5, 'There should be 5 role relations'); - - _.each(rolesUsers, function (roleUser) { - if (roleUser.user_id === ownerUser.id) { - roleUser.role_id.should.equal(4, 'Original user should be an owner'); - } - if (roleUser.user_id === newUser.id) { - roleUser.role_id.should.equal(1, 'New user should be an admin'); - } - if (roleUser.user_id === existingUser.id) { - roleUser.role_id.should.equal(1, 'Existing user was an admin'); - } - }); + // test settings + settings.length.should.be.above(0, 'Wrong number of settings'); + _.findWhere(settings, {key: 'databaseVersion'}).value.should.equal('003', 'Wrong database version'); - done(); - }).catch(done); - }); + done(); + }).catch(done); + }); - it('imports posts & tags with correct authors, owners etc', function (done) { - var fetchImported = Promise.join( - knex('users').select(), - knex('posts').select(), - knex('tags').select() - ); + it('imports users with correct roles and status', function (done) { + var fetchImported = Promise.join( + knex('users').select(), + knex('roles_users').select() + ); - fetchImported.then(function (importedData) { - var users, ownerUser, newUser, existingUser, - posts, post1, post2, post3, - tags, tag1, tag2, tag3; + fetchImported.then(function (importedData) { + var ownerUser, + newUser, + existingUser, + users, + rolesUsers; - // General data checks - should.exist(importedData); - importedData.length.should.equal(3, 'Did not get data successfully'); - - // Test the users and roles - users = importedData[0]; - posts = importedData[1]; - tags = importedData[2]; - - // Grab the users - // the owner user is first - ownerUser = users[0]; - // the other two users should have the imported data, but they get inserted in different orders - newUser = _.find(users, function (user) { - return user.name === exportData.data.users[1].name; - }); - existingUser = _.find(users, function (user) { - return user.name === exportData.data.users[2].name; - }); - post1 = _.find(posts, function (post) { - return post.slug === exportData.data.posts[0].slug; - }); - post2 = _.find(posts, function (post) { - return post.slug === exportData.data.posts[1].slug; - }); - post3 = _.find(posts, function (post) { - return post.slug === exportData.data.posts[2].slug; - }); - tag1 = _.find(tags, function (tag) { - return tag.slug === exportData.data.tags[0].slug; - }); - tag2 = _.find(tags, function (tag) { - return tag.slug === exportData.data.tags[1].slug; - }); - tag3 = _.find(tags, function (tag) { - return tag.slug === exportData.data.tags[2].slug; - }); - - // Check the authors are correct - post1.author_id.should.equal(newUser.id); - post2.author_id.should.equal(existingUser.id); - post3.author_id.should.equal(ownerUser.id); - - // Created by should be what was in the import file - post1.created_by.should.equal(ownerUser.id); - post2.created_by.should.equal(existingUser.id); - post3.created_by.should.equal(ownerUser.id); - - // Updated by gets set to the current user - post1.updated_by.should.equal(ownerUser.id); - post2.updated_by.should.equal(ownerUser.id); - post3.updated_by.should.equal(ownerUser.id); - - // Published by should be what was in the import file - post1.published_by.should.equal(newUser.id); - post2.published_by.should.equal(existingUser.id); - post3.published_by.should.equal(ownerUser.id); - - // Created by should be what was in the import file - tag1.created_by.should.equal(ownerUser.id); - tag2.created_by.should.equal(newUser.id); - tag3.created_by.should.equal(existingUser.id); - - // Updated by gets set to the current user - tag1.updated_by.should.equal(ownerUser.id); - tag2.updated_by.should.equal(ownerUser.id); - tag3.updated_by.should.equal(ownerUser.id); + // General data checks + should.exist(importedData); + importedData.length.should.equal(2, 'Did not get data successfully'); - done(); - }).catch(done); - }); + // Test the users and roles + users = importedData[0]; + rolesUsers = importedData[1]; + + // we imported 3 users, there were already 4 users, only one of the imported users is new + users.length.should.equal(5, 'There should only be three users'); + + // the owner user is first + ownerUser = users[0]; + // the other two users should have the imported data, but they get inserted in different orders + newUser = _.find(users, function (user) { + return user.name === exportData.data.users[1].name; + }); + existingUser = _.find(users, function (user) { + return user.name === exportData.data.users[2].name; + }); + + ownerUser.email.should.equal(testUtils.DataGenerator.Content.users[0].email); + ownerUser.password.should.equal(testUtils.DataGenerator.Content.users[0].password); + ownerUser.status.should.equal('active'); + newUser.email.should.equal(exportData.data.users[1].email); + existingUser.email.should.equal(exportData.data.users[2].email); + + // Newly created users should have a status of locked + newUser.status.should.equal('locked'); + // The already existing user should still have a status of active + existingUser.status.should.equal('active'); + + // Newly created users should have created_at/_by and updated_at/_by set to when they were imported + newUser.created_by.should.equal(ownerUser.id); + newUser.created_at.should.not.equal(exportData.data.users[1].created_at); + newUser.updated_by.should.equal(ownerUser.id); + newUser.updated_at.should.not.equal(exportData.data.users[1].updated_at); + + rolesUsers.length.should.equal(5, 'There should be 5 role relations'); + + _.each(rolesUsers, function (roleUser) { + if (roleUser.user_id === ownerUser.id) { + roleUser.role_id.should.equal(4, 'Original user should be an owner'); + } + if (roleUser.user_id === newUser.id) { + roleUser.role_id.should.equal(1, 'New user should be an admin'); + } + if (roleUser.user_id === existingUser.id) { + roleUser.role_id.should.equal(1, 'Existing user was an admin'); + } + }); + + done(); + }).catch(done); + }); + + it('imports posts & tags with correct authors, owners etc', function (done) { + var fetchImported = Promise.join( + knex('users').select(), + knex('posts').select(), + knex('tags').select() + ); + + fetchImported.then(function (importedData) { + var users, ownerUser, newUser, existingUser, + posts, post1, post2, post3, + tags, tag1, tag2, tag3; + + // General data checks + should.exist(importedData); + importedData.length.should.equal(3, 'Did not get data successfully'); + + // Test the users and roles + users = importedData[0]; + posts = importedData[1]; + tags = importedData[2]; + + // Grab the users + // the owner user is first + ownerUser = users[0]; + // the other two users should have the imported data, but they get inserted in different orders + newUser = _.find(users, function (user) { + return user.name === exportData.data.users[1].name; + }); + existingUser = _.find(users, function (user) { + return user.name === exportData.data.users[2].name; + }); + post1 = _.find(posts, function (post) { + return post.slug === exportData.data.posts[0].slug; + }); + post2 = _.find(posts, function (post) { + return post.slug === exportData.data.posts[1].slug; + }); + post3 = _.find(posts, function (post) { + return post.slug === exportData.data.posts[2].slug; + }); + tag1 = _.find(tags, function (tag) { + return tag.slug === exportData.data.tags[0].slug; + }); + tag2 = _.find(tags, function (tag) { + return tag.slug === exportData.data.tags[1].slug; + }); + tag3 = _.find(tags, function (tag) { + return tag.slug === exportData.data.tags[2].slug; + }); + + // Check the authors are correct + post1.author_id.should.equal(newUser.id); + post2.author_id.should.equal(existingUser.id); + post3.author_id.should.equal(ownerUser.id); + + // Created by should be what was in the import file + post1.created_by.should.equal(ownerUser.id); + post2.created_by.should.equal(existingUser.id); + post3.created_by.should.equal(ownerUser.id); + + // Updated by gets set to the current user + post1.updated_by.should.equal(ownerUser.id); + post2.updated_by.should.equal(ownerUser.id); + post3.updated_by.should.equal(ownerUser.id); + + // Published by should be what was in the import file + post1.published_by.should.equal(newUser.id); + post2.published_by.should.equal(existingUser.id); + post3.published_by.should.equal(ownerUser.id); + + // Created by should be what was in the import file + tag1.created_by.should.equal(ownerUser.id); + tag2.created_by.should.equal(newUser.id); + tag3.created_by.should.equal(existingUser.id); + + // Updated by gets set to the current user + tag1.updated_by.should.equal(ownerUser.id); + tag2.updated_by.should.equal(ownerUser.id); + tag3.updated_by.should.equal(ownerUser.id); + + done(); + }).catch(done); }); }); });