mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-03-11 02:12:21 -05:00
Added very basic unit test coverage to cover happy path import
refs https://github.com/TryGhost/Team/issues/916 - These tests are nowhere close to perfect of even good. They barely pass "good enough" watermark... it's a start for new tests to be added easier in the future once the features are developed around CSV improrter
This commit is contained in:
parent
633feccf8d
commit
218a1334bd
2 changed files with 105 additions and 0 deletions
3
ghost/members-importer/test/fixtures/single-column-with-header.csv
vendored
Normal file
3
ghost/members-importer/test/fixtures/single-column-with-header.csv
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
email
|
||||
jbloggs@example.com
|
||||
test@example.com
|
|
102
ghost/members-importer/test/importer.test.js
Normal file
102
ghost/members-importer/test/importer.test.js
Normal file
|
@ -0,0 +1,102 @@
|
|||
// Switch these lines once there are useful utils
|
||||
// const testUtils = require('./utils');
|
||||
require('./utils');
|
||||
|
||||
const path = require('path');
|
||||
const sinon = require('sinon');
|
||||
const MembersCSVImporter = require('..');
|
||||
|
||||
const csvPath = path.join(__dirname, '/fixtures/');
|
||||
|
||||
describe('Importer', function () {
|
||||
describe('process', function () {
|
||||
it('should import a CSV file', async function () {
|
||||
const defaultProduct = {
|
||||
id: 'default_product_id'
|
||||
};
|
||||
|
||||
const membersApi = {
|
||||
productRepository: {
|
||||
list: async () => {
|
||||
return {
|
||||
data: [defaultProduct]
|
||||
};
|
||||
}
|
||||
},
|
||||
members: {
|
||||
get: async () => {
|
||||
return null;
|
||||
},
|
||||
create: async (row) => {
|
||||
return row;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const knexStub = {
|
||||
transaction: sinon.stub().resolves({
|
||||
rollback: () => {},
|
||||
commit: () => {}
|
||||
})
|
||||
};
|
||||
|
||||
const LabelModelStub = {
|
||||
findOne: sinon.stub().resolves(null)
|
||||
};
|
||||
|
||||
const importer = new MembersCSVImporter({
|
||||
storagePath: csvPath,
|
||||
getTimezone: sinon.stub().returns('UTC'),
|
||||
getMembersApi: () => membersApi,
|
||||
sendEmail: sinon.stub(),
|
||||
isSet: sinon.stub(),
|
||||
addJob: sinon.stub(),
|
||||
knex: knexStub,
|
||||
urlFor: sinon.stub()
|
||||
});
|
||||
|
||||
const result = await importer.process({
|
||||
pathToCSV: `${csvPath}/single-column-with-header.csv`,
|
||||
headerMapping: {},
|
||||
importLabel: {
|
||||
name: 'test import'
|
||||
},
|
||||
user: {
|
||||
email: 'test@example.com'
|
||||
},
|
||||
LabelModel: LabelModelStub
|
||||
});
|
||||
|
||||
should.exist(result.meta);
|
||||
should.exist(result.meta.stats);
|
||||
should.exist(result.meta.stats.imported);
|
||||
result.meta.stats.imported.should.equal(2);
|
||||
|
||||
should.exist(result.meta.stats.invalid);
|
||||
should.equal(result.meta.import_label, null);
|
||||
});
|
||||
});
|
||||
|
||||
describe('prepare', function () {
|
||||
it('processes a basic valid import file for members', async function () {
|
||||
const membersImporter = new MembersCSVImporter({
|
||||
storagePath: csvPath,
|
||||
getTimezone: sinon.stub().returns('UTC'),
|
||||
getMembersApi: sinon.stub(),
|
||||
sendEmail: sinon.stub(),
|
||||
isSet: sinon.stub(),
|
||||
addJob: sinon.stub(),
|
||||
knex: sinon.stub(),
|
||||
urlFor: sinon.stub()
|
||||
});
|
||||
|
||||
const result = await membersImporter.prepare(`${csvPath}/single-column-with-header.csv`);
|
||||
|
||||
should.exist(result.id);
|
||||
result.id.should.match(/\/members-importer\/test\/fixtures\/Members Import/);
|
||||
|
||||
result.batches.should.equal(2);
|
||||
should.exist(result.metadata);
|
||||
});
|
||||
});
|
||||
});
|
Loading…
Add table
Reference in a new issue