test/unit/helpers.approver-assignment.js
import test from 'ava';
import nock from 'nock';
import {
client,
ApproverAssignment,
} from '../../src';
test.before('start server', (t) => {
client.apiBaseUrl = 'https://somesite.Clinical6.com';
client.authToken = 'valid_token';
t.context.updateResponse = {
data: {
id: '23',
type: 'consent__approver_assignments',
relationships: {
approver_group: {
data: {
id: '21',
type: 'consent__approver_groups'
}
},
approver: {
data: {
id: '30',
type: 'consent__approvers'
}
}
}
},
included: [
{
id: '21',
type: 'consent__approver_groups',
attributes: {
name: 'Approver Group 23',
created_at: '2018-05-04T18:47:01Z',
updated_at: '2018-05-04T18:47:01Z'
},
relationships: {
approver_assignments: {
data: [
{
id: '23',
type: 'consent__approver_assignments'
}
]
},
group_assignments: {
data: []
},
approvers: {
data: [
{
id: '30',
type: 'consent__approvers'
}
]
}
}
},
{
id: '30',
type: 'consent__approvers',
attributes: {
first_name: 'John',
last_name: 'Doe',
email: 'john@example.com',
title: null
},
relationships: {
approver_groups: {
data: [
{
id: '21',
type: 'consent__approver_groups'
}
]
},
consent_form_versions: {
data: []
}
}
}
]
};
t.context.insertResponse = {
data: {
id: '23',
type: 'consent__approver_assignments',
relationships: {
approver_group: {
data: {
id: '21',
type: 'consent__approver_groups'
}
},
approver: {
data: {
id: '30',
type: 'consent__approvers'
}
}
}
},
included: [
{
id: '21',
type: 'consent__approver_groups',
attributes: {
name: 'Approver Group 23',
created_at: '2018-05-04T18:47:01Z',
updated_at: '2018-05-04T18:47:01Z'
},
relationships: {
approver_assignments: {
data: [
{
id: '23',
type: 'consent__approver_assignments'
}
]
},
group_assignments: {
data: []
},
approvers: {
data: [
{
id: '30',
type: 'consent__approvers'
}
]
}
}
},
{
id: '30',
type: 'consent__approvers',
attributes: {
first_name: 'John',
last_name: 'Doe',
email: 'john@example.com',
title: null
},
relationships: {
approver_groups: {
data: [
{
id: '21',
type: 'consent__approver_groups'
}
]
},
consent_form_versions: {
data: []
}
}
}
]
};
});
test.beforeEach((t) => {
client.cache = 'never';
client.authToken = 'valid_token';
t.context.storage = client.storageUtility;
t.context.approverAssignmentJsonApi = {
id: 1,
type: 'consent__approver_assignments',
attributes: {}
};
t.context.approverAssignmentJson = {
id: 1,
type: 'consent__approver_assignments'
};
t.context.approverAssignment = new ApproverAssignment(t.context.approverAssignmentJsonApi);
});
/**
* @test {ApproverAssignment}
*/
test('[unit] ApproverAssignment should handle approverAssignment data with a normal json format', (t) => {
const { approverAssignmentJson } = t.context;
const approverAssignment = new ApproverAssignment(approverAssignmentJson);
t.is(approverAssignment.id, 1);
t.is(approverAssignment.type, 'consent__approver_assignments');
});
/**
* @test {ApproverAssignment}
*/
test('[unit] ApproverAssignment should handle approverAssignment data with json api format', (t) => {
const { approverAssignmentJsonApi } = t.context;
const approverAssignment = new ApproverAssignment({ data: approverAssignmentJsonApi });
t.is(approverAssignment.id, 1);
t.is(approverAssignment.type, 'consent__approver_assignments');
});
/**
* @test {ApproverAssignment}
*/
test('[unit] ApproverAssignment should generate json api format when converted to string', (t) => {
const { approverAssignmentJsonApi } = t.context;
let approverAssignment = new ApproverAssignment({ data: approverAssignmentJsonApi });
let json = approverAssignment.toJSON();
t.deepEqual(json, approverAssignmentJsonApi);
approverAssignment = new ApproverAssignment({ data: approverAssignmentJsonApi });
json = approverAssignment.toJSON();
t.deepEqual(json, approverAssignmentJsonApi);
});
/**
* @test {ApproverAssignment.delete}
*/
test('[unit] ApproverAssignment.delete should successfully delete a approver assignment', async (t) => {
const { approverAssignment } = t.context;
approverAssignment.id = 5;
let request = {};
nock(client.apiBaseUrl).delete(`/v3/consent/approver_assignments/${approverAssignment.id}`).reply(function (uri, requestBody) {
request = this.req;
request.requestBody = requestBody;
return [200, ''];
});
const response = await approverAssignment.delete();
t.is(request.path, `/v3/consent/approver_assignments/${approverAssignment.id}`);
t.is(request.headers.accept, 'application/json');
t.is(request.headers['content-type'], 'application/json');
t.is(request.headers.authorization, 'Token token=valid_token');
t.falsy(response);
});
// ApproverAssignment.save
/**
* @test {ApproverAssignment.save}
*/
test('[unit] ApproverAssignment.save should successfully insert a approverAssignment with a approverAssignment object when id does not exist', async (t) => {
const { approverAssignmentJsonApi, insertResponse } = t.context;
const json = JSON.parse(JSON.stringify(approverAssignmentJsonApi));
delete json.id;
const approverAssignment = new ApproverAssignment({ data: json });
let request = {};
nock(client.apiBaseUrl).post(`/v3/consent/approver_assignments`).reply(function (uri, requestBody) {
request = this.req;
request.requestBody = requestBody;
return [201, insertResponse];
});
const response = await approverAssignment.save();
t.is(request.path, `/v3/consent/approver_assignments`);
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, 23);
t.is(response.type, 'consent__approver_assignments');
});
/**
* @test {ApproverAssignment.save}
*/
test('[unit] ApproverAssignment.save should successfully update a approverAssignment with a approverAssignment object when id exists', async (t) => {
const { approverAssignmentJsonApi, updateResponse } = t.context;
const approverAssignment = new ApproverAssignment({ data: approverAssignmentJsonApi });
let request = {};
nock(client.apiBaseUrl).patch(`/v3/consent/approver_assignments/${approverAssignment.id}`).reply(function (uri, requestBody) {
request = this.req;
request.requestBody = requestBody;
return [200, updateResponse];
});
const response = await approverAssignment.save();
t.is(request.path, `/v3/consent/approver_assignments/${approverAssignment.id}`);
t.is(request.headers.accept, 'application/json');
t.deepEqual(request.requestBody, { data: approverAssignmentJsonApi });
t.is(request.headers['content-type'], 'application/json');
t.is(request.headers.authorization, 'Token token=valid_token');
t.is(response.id, 23);
t.is(response.type, 'consent__approver_assignments');
});