Ghost/ghost/admin/tests/acceptance/members/import-test.js

115 lines
4.4 KiB
JavaScript
Raw Normal View History

import {Response} from 'miragejs';
import {authenticateSession} from 'ember-simple-auth/test-support';
import {click, currentURL, find, findAll} from '@ember/test-helpers';
import {expect} from 'chai';
import {fileUpload} from '../../helpers/file-upload';
import {setupApplicationTest} from 'ember-mocha';
import {setupMirage} from 'ember-cli-mirage/test-support';
import {visit} from '../../helpers/visit';
describe('Acceptance: Members import', function () {
let hooks = setupApplicationTest();
setupMirage(hooks);
beforeEach(async function () {
this.server.loadFixtures('configs');
let role = this.server.create('role', {name: 'Owner'});
this.server.create('user', {roles: [role]});
return await authenticateSession();
});
it('can open and close import modal', async function () {
await visit('/members');
await click('[data-test-button="members-actions"]');
await click('[data-test-link="import-csv"]');
expect(find('[data-test-modal="import-members"]'), 'members import modal').to.exist;
expect(currentURL()).to.equal('/members/import');
await click('[data-test-button="close-import-members"]');
expect(find('[data-test-modal="import-members"]'), 'members import modal').to.not.exist;
expect(currentURL()).to.equal('/members');
});
it('has working happy path for small import with no mapper changes and Stripe not connected', async function () {
await visit('/members/import');
const csv = `email,name,note,subscribed_to_emails,labels,created_at
testemail@example.com,Test Email,This is a test template for importing your members list to Ghost,true,"vip,promotion",2019-10-30T14:52:08.000Z
`;
await fileUpload(
'[data-test-fileinput="members-csv"]',
[csv],
{name: 'members.csv', type: 'text/csv'}
);
expect(find('[data-test-csv-file-mapping]'), 'csv file mapper').to.exist;
expect(find('[data-test-members-import-table]'), 'csv file mapper').to.exist;
expect(findAll('[data-test-members-import-mapper]').length, '# of mapper rows').to.equal(6);
expect(find('[data-test-button="perform-import"]')).to.contain.text(' 1 ');
await click('[data-test-button="perform-import"]');
expect(find('[data-test-modal="import-members"]')).to.contain.text('Import complete');
await click('[data-test-button="close-import-members"]');
expect(find('[data-test-modal="import-members"]')).to.not.exist;
});
it('can assign labels in import mapper', async function () {
const label1 = this.server.create('label');
await visit('/members/import');
const csv = `email,name,note,subscribed_to_emails,labels,created_at
testemail@example.com,Test Email,This is a test template for importing your members list to Ghost,true,"vip,promotion",2019-10-30T14:52:08.000Z
`;
await fileUpload(
'[data-test-fileinput="members-csv"]',
[csv],
{name: 'members.csv', type: 'text/csv'}
);
const labelInput = '[data-test-csv-file-mapping] .gh-member-label-input';
expect(find(labelInput), 'label input').to.exist;
const dropdownContentId = find(`${labelInput}`).getAttribute('aria-owns');
await click(`${labelInput}`);
expect(findAll(`#${dropdownContentId} li.ember-power-select-option`).length, '# of label options').to.equal(1);
// label input doesn't allow editing from the import modal
expect(findAll(`#${dropdownContentId} [data-test-edit-label]`).length, '# of label edit buttons').to.equal(0);
await click(find(`#${dropdownContentId} li.ember-power-select-option`));
expect(findAll(`${labelInput} .ember-power-select-multiple-options li`).length, '# of selected labels').to.equal(1);
expect(find(`${labelInput} .ember-power-select-multiple-options li`)).to.contain.text(label1.name);
let apiLabels = null;
this.server.post('/members/upload/', function ({labels}, request) {
const label = labels.create();
apiLabels = request.requestBody.get('labels');
return new Response(201, {}, {
meta: {
import_label: label,
stats: {imported: 1, invalid: []}
}
});
});
await click('[data-test-button="perform-import"]');
expect(apiLabels).to.equal(label1.name);
});
});