test/unit/helpers.bulk-import.js
import test from 'ava';
import nock from 'nock';
import {
client,
BulkImport,
} from '../../src';
test.before('start server', (t) => {
client.apiBaseUrl = 'https://somesite.Clinical6.com';
client.authToken = 'valid_token';
t.context.insertResponse = {
data: {
id: '5ef4ded5-ab1f-4d73-a842-7366c8efbc9a',
type: 'import_wizard__bulk_imports',
attributes: {
separator: '|',
platform_model: 'Trials::Site'
},
relationships: {
generic_file: {
data: {
id: '1',
type: 'generic_files'
}
},
status: {
data: {
id: 'e08f121d-6918-4038-b752-f447207600cd',
type: 'job_status'
}
}
}
},
included: [
{
id: '1',
type: 'generic_files',
attributes: {
name: 'import_wizard.csv',
public: false,
visible_until: null,
created_at: '2018-09-18T21:35:06Z',
updated_at: '2018-09-18T21:35:06Z'
}
},
{
id: 'e08f121d-6918-4038-b752-f447207600cd',
type: 'job_status',
attributes: {
status: 'pending',
started_at: null,
completed_at: null
}
}
]
};
});
test.beforeEach((t) => {
client.cache = 'never';
client.authToken = 'valid_token';
t.context.storage = client.storageUtility;
t.context.bulkImportJsonApi = {
type: 'import_wizard__bulk_imports',
attributes: {
platform_model: 'Trials::Site',
separator: '|',
created_at: null,
updated_at: null
},
relationships: {
generic_file: {
data: {
id: 1,
type: 'generic_files'
}
}
}
};
t.context.bulkImportJson = {
platform_model: 'Trials::Site',
separator: '|',
relationships: {
generic_file: {
data: {
id: 1,
type: 'generic_files'
}
}
}
};
t.context.bulkImport = new BulkImport(t.context.bulkImportJsonApi);
});
/**
* @test {BulkImport}
*/
test('[unit] BulkImport should handle bulkImport data with a normal json format', (t) => {
const { bulkImportJson } = t.context;
const bulkImport = new BulkImport(bulkImportJson);
t.is(bulkImport.type, 'import_wizard__bulk_imports');
t.is(bulkImport.platformModel, 'Trials::Site');
t.is(bulkImport.separator, '|');
});
/**
* @test {BulkImport}
*/
test('[unit] BulkImport should handle bulkImport data with json api format', (t) => {
const { bulkImportJsonApi } = t.context;
const bulkImport = new BulkImport({ data: bulkImportJsonApi });
t.is(bulkImport.type, 'import_wizard__bulk_imports');
t.is(bulkImport.platformModel, 'Trials::Site');
t.is(bulkImport.separator, '|');
});
/**
* @test {BulkImport}
*/
test('[unit] BulkImport should generate json api format when converted to string', (t) => {
const { bulkImportJsonApi } = t.context;
let bulkImport = new BulkImport({ data: bulkImportJsonApi });
let json = bulkImport.toJSON();
t.deepEqual(json, bulkImportJsonApi);
bulkImport = new BulkImport({ data: bulkImportJsonApi });
json = bulkImport.toJSON();
t.deepEqual(json, bulkImportJsonApi);
});
// BulkImport.save
/**
* @test {BulkImport.save}
*/
test('[unit] BulkImport.save should successfully insert a bulkImport with a bulkImport object when id does not exist', async (t) => {
const { bulkImportJsonApi, insertResponse } = t.context;
const json = JSON.parse(JSON.stringify(bulkImportJsonApi));
delete json.id;
const bulkImport = new BulkImport({ data: json });
let request = {};
nock(client.apiBaseUrl).post(`/v3/import_wizard/bulk_imports`).reply(function (uri, requestBody) {
request = this.req;
request.requestBody = requestBody;
return [201, insertResponse];
});
const response = await bulkImport.save();
t.is(request.path, `/v3/import_wizard/bulk_imports`);
t.is(request.headers.accept, 'application/json');
t.deepEqual(request.requestBody, { data: json });
t.is(request.headers['content-type'], 'application/json');
t.is(request.headers.authorization, 'Token token=valid_token');
t.is(response.id, 5);
t.is(response.type, 'import_wizard__bulk_imports');
t.is(response.platformModel, 'Trials::Site');
t.is(response.separator, '|');
});