test/unit/helpers.entry.js
import test from 'ava';
import nock from 'nock';
import {
client,
Entry,
EntryTemplate,
User,
} from '../../src';
test.before('start server', (t) => {
client.apiBaseUrl = 'https://somesite.Clinical6.com';
t.context.insertResponseEntries53 = {
data: {
id: '7',
type: 'ediary__entries',
attributes: {
created_at: '2017-06-27T20:32:07Z',
updated_at: '2017-06-27T20:32:07Z',
date: '2018-06-02'
},
relationships: {
entry_group: {
data: {
id: '8',
type: 'ediary__entry_groups'
}
},
template: {
data: {
id: '7',
type: 'ediary__entry_templates'
}
},
captured_value_group: {
data: null
},
owner: {
data: {
id: '22',
type: 'mobile_users'
}
},
status: {
data: null
}
}
},
included: [
{
id: '7',
type: 'ediary__entry_templates',
attributes: {
category: 'automatic',
created_at: '2017-06-27T20:32:07Z',
updated_at: '2017-06-27T20:32:07Z'
},
relationships: {
entry_group: {
data: {
id: '8',
type: 'ediary__entry_groups'
}
},
flow_process: {
data: {
id: '23',
type: 'data_collection__flow_processes'
}
}
}
},
{
id: '22',
type: 'mobile_users',
attributes: {
uuid: '51edc9a9-6e07-4ffd-a22a-8a620f45ac99',
account_name: 'dummy_21',
email: 'user55@fake.com',
encryption_key: null,
created_at: '2017-06-27T20:32:07Z',
updated_at: '2017-06-27T20:32:07Z',
verified_at: null,
invitation_sent_at: null,
invitation_accepted_at: null
},
relationships: {
devices: {
data: []
}
}
}
]
};
t.context.insertResponseEntriesPompe = {
data: {
id: '7',
type: 'ediary__entries',
attributes: {
created_at: '2017-06-27T20:32:07Z',
updated_at: '2017-06-27T20:32:07Z',
date: '2018-06-02'
},
relationships: {
entry_group: {
data: {
id: '8',
type: 'ediary__entry_groups'
}
},
template: {
data: {
id: '7',
type: 'ediary__entry_templates'
}
},
captured_value_group: {
data: null
},
owner: {
data: {
id: '22',
type: 'mobile_users'
}
},
status: {
data: null
}
}
},
included: [
{
id: '7',
type: 'ediary__entry_templates',
attributes: {
category: 'automatic',
created_at: '2017-06-27T20:32:07Z',
updated_at: '2017-06-27T20:32:07Z'
},
relationships: {
entry_group: {
data: {
id: '8',
type: 'ediary__entry_groups'
}
},
flow_process: {
data: {
id: '23',
type: 'data_collection__flow_processes'
}
}
}
},
{
id: '22',
type: 'mobile_users',
attributes: {
uuid: '51edc9a9-6e07-4ffd-a22a-8a620f45ac99',
account_name: 'dummy_21',
email: 'user55@fake.com',
encryption_key: null,
created_at: '2017-06-27T20:32:07Z',
updated_at: '2017-06-27T20:32:07Z',
verified_at: null,
invitation_sent_at: null,
invitation_accepted_at: null
},
relationships: {
devices: {
data: []
}
}
}
]
};
});
test.after('server shut down', () => {});
test.beforeEach((t) => {
client.cache = 'never';
client.authToken = 'valid_token';
t.context.entryJsonApi = {
id: 19,
type: 'ediary__entries',
attributes: {
created_at: '2017-06-27T17:58:10Z',
date: '2017-06-17',
updated_at: '2017-06-27T21:35:48Z'
},
relationships: {
entry_group: {
data: {
id: '401',
type: 'ediary__entry_groups'
}
},
template: {
data: {
id: '401',
type: 'ediary__entry_templates'
}
},
captured_value_group: {
data: {
id: '151',
type: 'data_collection__captured_value_groups'
}
},
owner: {
data: {
id: '400',
type: 'mobile_users'
}
},
status: {
data: {
id: '738',
type: 'statuses'
}
}
}
};
t.context.entry = new Entry(t.context.entryJsonApi);
});
// Entry helper class
/**
* @test {Entry.constructor}
*/
test('[unit] Entry.constructor should handle entry data with json api format', (t) => {
const { entry } = t.context;
t.is(entry.id, 19);
t.is(entry.type, 'ediary__entries');
t.is(entry.createdAt, '2017-06-27T17:58:10Z');
t.is(entry.updatedAt, '2017-06-27T21:35:48Z');
t.is(entry.date, '2017-06-17');
});
/**
* @test {Entry.constructor}
*/
test('[unit] Entry.constructor should generate json api format when converted to string', (t) => {
const { entry, entryJsonApi } = t.context;
t.is(JSON.stringify(entry), JSON.stringify(entryJsonApi));
});
/**
* @test {Entry.save}
*/
test('[unit] Entry.save should exist', (t) => {
const { entry } = t.context;
t.truthy(entry.save);
});
/**
* @test {Entry.save}
*/
test('[unit] Entry.save should call EDiaryService.addEntry to make a POST request', async (t) => {
const { insertResponseEntries53 } = t.context;
let request = {};
nock(client.apiBaseUrl).post(`/v3/ediary/entries`).reply(function (uri, requestBody) {
request = this.req;
request.requestBody = requestBody;
return [200, insertResponseEntries53];
});
const requestJsonApi = {
data: {
type: 'ediary__entries',
attributes: {
date: '2018-06-02'
},
relationships: {
template: {
data: {
id: 12,
type: 'ediary__entry_templates'
}
},
owner: {
data: {
id: 400,
type: 'mobile_users'
}
}
}
}
};
const entry = new Entry({ date: '2018-06-02' });
entry.owner = new User({ id: 400 });
entry.template = new EntryTemplate({ id: 12 });
// entry.date = '2018-06-02';
const response = await entry.save();
t.is(request.path, `/v3/ediary/entries`);
t.is(request.headers.accept, 'application/json');
t.deepEqual(request.requestBody, requestJsonApi);
t.is(request.headers['content-type'], 'application/json');
t.is(request.headers.authorization, 'Token token=valid_token');
t.truthy(response);
t.is(response.constructor.name, 'Entry');
t.is(response.id, 7);
t.is(response.createdAt, '2017-06-27T20:32:07Z');
t.is(response.updatedAt, '2017-06-27T20:32:07Z');
t.is(response.date, '2018-06-02');
// t.is(response.entryGroup.constructor.name, 'EntryGroup');
t.is(response.entryGroup.id, '8');
// t.is(response.flow.constructor.name, 'Flow');
t.is(response.flow.id, '23');
t.is(response.owner.constructor.name, 'User');
t.is(response.owner.id, 22);
});
/**
* @test {Entry.save}
*/
test('[unit] Entry.save should successfully save (pompe example)', async (t) => {
let request = {};
nock(client.apiBaseUrl).post(`/v3/ediary/entries`).reply(function (uri, requestBody) {
request = this.req;
request.requestBody = requestBody;
return [200, {
data: [
{
id: '16',
type: 'ediary__entries',
attributes: {
created_at: '2017-06-26T15:19:06Z',
updated_at: '2017-06-26T15:19:06Z',
date: '2018-07-01'
},
relationships: {
entry_group: {
data: {
id: '1',
type: 'ediary__entry_groups'
}
},
template: {
data: {
id: '1',
type: 'ediary__entry_templates'
}
},
captured_value_group: {
data: null
},
owner: {
data: {
id: '41',
type: 'mobile_users'
}
},
status: {
data: null
}
}
},
{
id: '4',
type: 'ediary__entries',
attributes: {
created_at: '2017-06-22T23:03:44Z',
updated_at: '2017-06-22T23:03:44Z',
date: '2018-06-18'
},
relationships: {
entry_group: {
data: {
id: '1',
type: 'ediary__entry_groups'
}
},
template: {
data: null
},
captured_value_group: {
data: null
},
owner: {
data: {
id: '41',
type: 'mobile_users'
}
},
status: {
data: null
}
}
},
{
id: '5',
type: 'ediary__entries',
attributes: {
created_at: '2017-06-22T23:04:25Z',
updated_at: '2017-06-22T23:04:25Z',
date: '2018-06-18'
},
relationships: {
entry_group: {
data: {
id: '1',
type: 'ediary__entry_groups'
}
},
template: {
data: null
},
captured_value_group: {
data: null
},
owner: {
data: {
id: '41',
type: 'mobile_users'
}
},
status: {
data: null
}
}
},
{
id: '8',
type: 'ediary__entries',
attributes: {
created_at: '2017-06-22T23:39:19Z',
updated_at: '2017-06-22T23:39:19Z',
date: '2018-06-11'
},
relationships: {
entry_group: {
data: {
id: '1',
type: 'ediary__entry_groups'
}
},
template: {
data: null
},
captured_value_group: {
data: null
},
owner: {
data: {
id: '41',
type: 'mobile_users'
}
},
status: {
data: null
}
}
},
{
id: '7',
type: 'ediary__entries',
attributes: {
created_at: '2017-06-22T23:23:19Z',
updated_at: '2017-06-22T23:23:19Z',
date: '2018-06-07'
},
relationships: {
entry_group: {
data: {
id: '1',
type: 'ediary__entry_groups'
}
},
template: {
data: null
},
captured_value_group: {
data: null
},
owner: {
data: {
id: '41',
type: 'mobile_users'
}
},
status: {
data: null
}
}
},
{
id: '3',
type: 'ediary__entries',
attributes: {
created_at: '2017-06-22T22:44:41Z',
updated_at: '2017-06-22T22:44:41Z',
date: '2018-06-05'
},
relationships: {
entry_group: {
data: {
id: '1',
type: 'ediary__entry_groups'
}
},
template: {
data: null
},
captured_value_group: {
data: null
},
owner: {
data: {
id: '41',
type: 'mobile_users'
}
},
status: {
data: null
}
}
},
{
id: '2',
type: 'ediary__entries',
attributes: {
created_at: '2017-06-22T22:39:35Z',
updated_at: '2017-06-22T22:39:35Z',
date: '2018-06-04'
},
relationships: {
entry_group: {
data: {
id: '1',
type: 'ediary__entry_groups'
}
},
template: {
data: null
},
captured_value_group: {
data: null
},
owner: {
data: {
id: '41',
type: 'mobile_users'
}
},
status: {
data: null
}
}
},
{
id: '1',
type: 'ediary__entries',
attributes: {
created_at: '2017-06-15T17:01:33Z',
updated_at: '2017-06-15T17:01:33Z',
date: '2018-06-03'
},
relationships: {
entry_group: {
data: {
id: '1',
type: 'ediary__entry_groups'
}
},
template: {
data: null
},
captured_value_group: {
data: null
},
owner: {
data: {
id: '41',
type: 'mobile_users'
}
},
status: {
data: null
}
}
},
{
id: '6',
type: 'ediary__entries',
attributes: {
created_at: '2017-06-22T23:20:55Z',
updated_at: '2017-06-22T23:20:55Z',
date: '2018-06-01'
},
relationships: {
entry_group: {
data: {
id: '1',
type: 'ediary__entry_groups'
}
},
template: {
data: null
},
captured_value_group: {
data: null
},
owner: {
data: {
id: '41',
type: 'mobile_users'
}
},
status: {
data: null
}
}
},
{
id: '19',
type: 'ediary__entries',
attributes: {
created_at: '2017-06-27T17:58:10Z',
updated_at: '2017-06-27T21:35:48Z',
date: '2017-06-17'
},
relationships: {
entry_group: {
data: {
id: '1',
type: 'ediary__entry_groups'
}
},
template: {
data: {
id: '1',
type: 'ediary__entry_templates'
}
},
captured_value_group: {
data: {
id: '151',
type: 'data_collection__captured_value_groups'
}
},
owner: {
data: {
id: '41',
type: 'mobile_users'
}
},
status: {
data: {
id: '738',
type: 'statuses'
}
}
}
},
{
id: '18',
type: 'ediary__entries',
attributes: {
created_at: '2017-06-26T16:27:25Z',
updated_at: '2017-06-27T21:35:05Z',
date: '2017-06-15'
},
relationships: {
entry_group: {
data: {
id: '1',
type: 'ediary__entry_groups'
}
},
template: {
data: {
id: '1',
type: 'ediary__entry_templates'
}
},
captured_value_group: {
data: {
id: '150',
type: 'data_collection__captured_value_groups'
}
},
owner: {
data: {
id: '41',
type: 'mobile_users'
}
},
status: {
data: {
id: '706',
type: 'statuses'
}
}
}
},
{
id: '17',
type: 'ediary__entries',
attributes: {
created_at: '2017-06-26T16:19:03Z',
updated_at: '2017-06-27T21:34:46Z',
date: '2017-06-14'
},
relationships: {
entry_group: {
data: {
id: '1',
type: 'ediary__entry_groups'
}
},
template: {
data: {
id: '1',
type: 'ediary__entry_templates'
}
},
captured_value_group: {
data: {
id: '149',
type: 'data_collection__captured_value_groups'
}
},
owner: {
data: {
id: '41',
type: 'mobile_users'
}
},
status: {
data: {
id: '729',
type: 'statuses'
}
}
}
},
{
id: '15',
type: 'ediary__entries',
attributes: {
created_at: '2017-06-23T16:10:44Z',
updated_at: '2017-06-23T17:11:39Z',
date: '2017-06-10'
},
relationships: {
entry_group: {
data: {
id: '1',
type: 'ediary__entry_groups'
}
},
template: {
data: null
},
captured_value_group: {
data: {
id: '91',
type: 'data_collection__captured_value_groups'
}
},
owner: {
data: {
id: '41',
type: 'mobile_users'
}
},
status: {
data: {
id: '182',
type: 'statuses'
}
}
}
},
{
id: '14',
type: 'ediary__entries',
attributes: {
created_at: '2017-06-23T15:52:33Z',
updated_at: '2017-06-23T15:52:33Z',
date: '2017-06-09'
},
relationships: {
entry_group: {
data: {
id: '1',
type: 'ediary__entry_groups'
}
},
template: {
data: null
},
captured_value_group: {
data: null
},
owner: {
data: {
id: '41',
type: 'mobile_users'
}
},
status: {
data: null
}
}
}
],
included: [
{
id: '1',
type: 'ediary__entry_templates',
attributes: {
category: 'automatic',
created_at: '2017-06-14T23:46:26Z',
updated_at: '2017-06-14T23:46:26Z'
},
relationships: {
entry_group: {
data: {
id: '1',
type: 'ediary__entry_groups'
}
},
flow_process: {
data: {
id: '6',
type: 'data_collection__flow_processes'
}
}
}
},
{
id: '41',
type: 'mobile_users',
attributes: {
uuid: 'b9308458-4011-409f-9604-cf1700919738',
account_name: '095780',
email: null,
encryption_key: null,
created_at: '2017-05-19T17:24:13Z',
updated_at: '2017-06-27T21:39:01Z',
verified_at: null,
invitation_sent_at: null,
invitation_accepted_at: null
},
relationships: {
devices: {
data: [
{
id: '4',
type: 'devices'
},
{
id: '5',
type: 'devices'
},
{
id: '37',
type: 'devices'
}
]
}
}
},
{
id: '151',
type: 'data_collection__captured_value_groups',
attributes: {
submitted_at: '2017-06-27T21:35:48Z',
created_at: '2017-06-27T21:35:48Z',
updated_at: '2017-06-27T21:35:48Z',
owner_type: 'User'
},
relationships: {
owner: {
data: {
id: '41',
type: 'mobile_users'
}
},
creator: {
data: {
id: '41',
type: 'mobile_users'
}
},
flow_process: {
data: {
id: '7',
type: 'data_collection__flow_processes'
}
},
captured_values: {
data: [
{
id: '593',
type: 'data_collection__captured_values'
},
{
id: '594',
type: 'data_collection__captured_values'
},
{
id: '595',
type: 'data_collection__captured_values'
},
{
id: '596',
type: 'data_collection__captured_values'
},
{
id: '597',
type: 'data_collection__captured_values'
},
{
id: '598',
type: 'data_collection__captured_values'
},
{
id: '599',
type: 'data_collection__captured_values'
},
{
id: '600',
type: 'data_collection__captured_values'
}
]
}
}
},
{
id: '738',
type: 'statuses',
attributes: {
value: 'completed'
},
relationships: {
owner: {
data: {
id: '41',
type: 'mobile_users'
}
},
statusable: {
data: {
id: '19',
type: 'ediary__entries'
}
}
}
},
{
id: '150',
type: 'data_collection__captured_value_groups',
attributes: {
submitted_at: '2017-06-27T21:35:05Z',
created_at: '2017-06-27T21:35:05Z',
updated_at: '2017-06-27T21:35:05Z',
owner_type: 'User'
},
relationships: {
owner: {
data: {
id: '41',
type: 'mobile_users'
}
},
creator: {
data: {
id: '41',
type: 'mobile_users'
}
},
flow_process: {
data: {
id: '7',
type: 'data_collection__flow_processes'
}
},
captured_values: {
data: [
{
id: '585',
type: 'data_collection__captured_values'
},
{
id: '586',
type: 'data_collection__captured_values'
},
{
id: '587',
type: 'data_collection__captured_values'
},
{
id: '588',
type: 'data_collection__captured_values'
},
{
id: '589',
type: 'data_collection__captured_values'
},
{
id: '590',
type: 'data_collection__captured_values'
},
{
id: '591',
type: 'data_collection__captured_values'
},
{
id: '592',
type: 'data_collection__captured_values'
}
]
}
}
},
{
id: '706',
type: 'statuses',
attributes: {
value: 'completed'
},
relationships: {
owner: {
data: {
id: '41',
type: 'mobile_users'
}
},
statusable: {
data: {
id: '18',
type: 'ediary__entries'
}
}
}
},
{
id: '149',
type: 'data_collection__captured_value_groups',
attributes: {
submitted_at: '2017-06-27T21:34:46Z',
created_at: '2017-06-27T21:34:46Z',
updated_at: '2017-06-27T21:34:46Z',
owner_type: 'User'
},
relationships: {
owner: {
data: {
id: '41',
type: 'mobile_users'
}
},
creator: {
data: {
id: '41',
type: 'mobile_users'
}
},
flow_process: {
data: {
id: '7',
type: 'data_collection__flow_processes'
}
},
captured_values: {
data: [
{
id: '577',
type: 'data_collection__captured_values'
},
{
id: '578',
type: 'data_collection__captured_values'
},
{
id: '579',
type: 'data_collection__captured_values'
},
{
id: '580',
type: 'data_collection__captured_values'
},
{
id: '581',
type: 'data_collection__captured_values'
},
{
id: '582',
type: 'data_collection__captured_values'
},
{
id: '583',
type: 'data_collection__captured_values'
},
{
id: '584',
type: 'data_collection__captured_values'
}
]
}
}
},
{
id: '729',
type: 'statuses',
attributes: {
value: 'completed'
},
relationships: {
owner: {
data: {
id: '41',
type: 'mobile_users'
}
},
statusable: {
data: {
id: '17',
type: 'ediary__entries'
}
}
}
},
{
id: '91',
type: 'data_collection__captured_value_groups',
attributes: {
submitted_at: '2017-06-23T17:11:39Z',
created_at: '2017-06-23T17:11:39Z',
updated_at: '2017-06-23T17:11:39Z',
owner_type: 'User'
},
relationships: {
owner: {
data: {
id: '41',
type: 'mobile_users'
}
},
creator: {
data: {
id: '41',
type: 'mobile_users'
}
},
flow_process: {
data: {
id: '7',
type: 'data_collection__flow_processes'
}
},
captured_values: {
data: [
{
id: '124',
type: 'data_collection__captured_values'
},
{
id: '125',
type: 'data_collection__captured_values'
},
{
id: '126',
type: 'data_collection__captured_values'
},
{
id: '127',
type: 'data_collection__captured_values'
},
{
id: '128',
type: 'data_collection__captured_values'
},
{
id: '129',
type: 'data_collection__captured_values'
},
{
id: '130',
type: 'data_collection__captured_values'
},
{
id: '131',
type: 'data_collection__captured_values'
}
]
}
}
},
{
id: '182',
type: 'statuses',
attributes: {
value: 'completed'
},
relationships: {
owner: {
data: {
id: '41',
type: 'mobile_users'
}
},
statusable: {
data: {
id: '15',
type: 'ediary__entries'
}
}
}
}
]
}];
});
const requestJsonApi = {
data: {
type: 'ediary__entries',
attributes: {
date: '2018-06-04'
},
relationships: {
template: {
data: {
id: 8,
type: 'ediary__entry_templates'
}
},
owner: {
data: {
id: 41,
type: 'mobile_users'
}
}
}
}
};
const myEntry = new Entry({ date: '2018-06-04' });
myEntry.owner = new User({ id: 41 });
myEntry.template = new EntryTemplate({ id: 8 });
const response = await myEntry.save();
t.is(request.path, `/v3/ediary/entries`);
t.is(request.headers.accept, 'application/json');
t.deepEqual(request.requestBody, requestJsonApi);
t.is(request.headers['content-type'], 'application/json');
t.is(request.headers.authorization, 'Token token=valid_token');
t.truthy(response);
const entry = response[9];
t.is(entry.constructor.name, 'Entry');
t.is(entry.id, 19);
t.is(entry.createdAt, '2017-06-27T17:58:10Z');
t.is(entry.updatedAt, '2017-06-27T21:35:48Z');
t.is(entry.date, '2017-06-17');
t.is(entry.flowDataGroup.constructor.name, 'FlowDataGroup');
t.is(entry.flowDataGroup.id, 151);
t.is(entry.owner.constructor.name, 'User');
t.is(entry.owner.id, 41);
});