test/unit/helpers.rule.js
import test from 'ava';
import sinon from 'sinon';
import {
client,
Rule,
} from '../../src';
// See tests.js for testing client creation
const ruleJsonApi = {
id: 93,
type: 'reminder__rules',
attributes: {
permanent_link: 'dummy_2645',
label: null,
created_at: '2017-09-10T19:18:32Z',
updated_at: '2017-09-10T19:18:32Z'
}
};
const ruleJson = {
id: 93,
type: 'reminder__rules',
permanent_link: 'dummy_2645',
label: null,
created_at: '2017-09-10T19:18:32Z',
updated_at: '2017-09-10T19:18:32Z'
};
test.before('start server', () => {
client.apiBaseUrl = 'https://somesite.Clinical6.com';
client.authToken = 'valid_token';
});
test.beforeEach((t) => {
client.cache = 'never';
client.authToken = 'valid_token';
t.context.server = sinon.fakeServer.create();
t.context.server.autoRespond = true;
t.context.server.respondWith('DELETE', `${client.apiBaseUrl}/v3/reminder/rules/*`,
[200, { 'Content-Type': 'application/json' }, JSON.stringify({ status: 'ok' })]);
t.context.server.respondWith('GET', `${client.apiBaseUrl}/v3/reminder/rules`,
[200, { 'Content-Type': 'application/json' }, JSON.stringify({
data: [
{
id: '11',
type: 'reminder__rules',
attributes: {
permanent_link: 'dummy_2254',
label: null,
created_at: '2017-09-10T19:21:12Z',
updated_at: '2017-09-10T19:21:12Z'
}
},
{
id: '12',
type: 'reminder__rules',
attributes: {
permanent_link: 'dummy_2255',
label: null,
created_at: '2017-09-10T19:21:12Z',
updated_at: '2017-09-10T19:21:12Z'
}
},
{
id: '13',
type: 'reminder__rules',
attributes: {
permanent_link: 'dummy_2256',
label: null,
created_at: '2017-09-10T19:21:12Z',
updated_at: '2017-09-10T19:21:12Z'
}
}
]
})]);
t.context.server.respondWith('GET', `${client.apiBaseUrl}/v3/reminder/rules/*`,
[200, { 'Content-Type': 'application/json' }, JSON.stringify({
data: {
id: '93',
type: 'reminder__rules',
attributes: {
permanent_link: 'dummy_909',
label: null,
created_at: '2017-09-10T19:18:32Z',
updated_at: '2017-09-10T19:18:32Z'
}
}
})]);
t.context.server.respondWith('POST', `${client.apiBaseUrl}/v3/reminder/rules`,
[201, { 'Content-Type': 'application/json' }, JSON.stringify({
data: {
id: '93',
type: 'reminder__rules',
attributes: {
permanent_link: 'dummy_2645',
label: null,
created_at: '2017-09-10T19:18:32Z',
updated_at: '2017-09-10T19:18:32Z'
}
}
})]);
t.context.storage = client.storageUtility;
client.rule = new Rule({});
t.context.ruleJsonApi = {
data: {
type: 'reminder__rules',
attributes: {
title: 'dummy_1065',
description: 'Demo Content info...',
redemption_points: 250
}
}
};
t.context.rule = new Rule(t.context.ruleJsonApi);
});
test.afterEach(t => t.context.server.restore());
/**
* @test {Rule}
*/
test('[unit] Rule should handle rule data with a normal json format', (t) => {
const rule = new Rule(ruleJson);
t.is(rule.id, 93);
t.is(rule.type, 'reminder__rules');
t.is(rule.createdAt, '2017-09-10T19:18:32Z');
t.is(rule.updatedAt, '2017-09-10T19:18:32Z');
t.is(rule.permanentLink, 'dummy_2645');
});
/**
* @test {Rule}
*/
test('[unit] Rule should handle rule data with json api format', (t) => {
const rule = new Rule({ data: ruleJsonApi });
t.is(rule.id, 93);
t.is(rule.type, 'reminder__rules');
t.is(rule.createdAt, '2017-09-10T19:18:32Z');
t.is(rule.updatedAt, '2017-09-10T19:18:32Z');
t.is(rule.permanentLink, 'dummy_2645');
});
/**
* @test {Rule}
*/
test('[unit] Rule should generate json api format when converted to string', (t) => {
let rule = new Rule({ data: ruleJsonApi });
t.deepEqual(rule.toJSON(), ruleJsonApi);
rule = new Rule({ data: ruleJsonApi });
t.deepEqual(rule.toJSON(), ruleJsonApi);
});
/**
* @test {Rule.delete}
*/
test('[unit] Rule.delete should successfully delete a rule', async (t) => {
const rule = new Rule({ data: ruleJsonApi });
const response = await rule.delete();
// const request = t.context.server.requests[0];
// t.is(request.method, 'DELETE');
// t.is(request.url, `${client.apiBaseUrl}/v3/reminder/rules/${rule.id}`);
// t.is(request.requestHeaders.Accept, 'application/json');
// t.is(request.requestHeaders['Content-Type'], 'application/json;charset=utf-8');
// t.is(request.requestHeaders.Authorization, 'Token token=valid_token');
t.truthy(response);
});
/**
* @test {Rule.save}
*/
test('[unit] Rule.save should successfully insert a rule with a rule object when id does not exist', async (t) => {
const json = JSON.parse(JSON.stringify(ruleJsonApi));
delete json.id;
const rule = new Rule({ data: json });
const response = await rule.save();
// const request = t.context.server.requests[0];
// t.is(request.method, 'POST');
// t.is(request.url, `${client.apiBaseUrl}/v3/reminder/rules`);
// t.is(request.requestHeaders.Accept, 'application/json');
// t.deepEqual(JSON.parse(request.requestBody), { data: json });
// t.is(request.requestHeaders['Content-Type'], 'application/json;charset=utf-8');
// t.is(request.requestHeaders.Authorization, 'Token token=valid_token');
t.is(response.id, 93);
t.is(response.type, 'reminder__rules');
});
// /**
// * @test {Rule.save}
// */
// test('[unit] Rule.save should successfully update a rule with a rule object when id exists', async (t) => {
// const rule = new Rule({ data: ruleJsonApi });
// const response = await rule.save();
// const request = t.context.server.requests[0];
// t.is(request.method, 'PATCH');
// t.is(request.url, `${client.apiBaseUrl}/v3/reminder/rules/${rule.id}`);
// t.is(request.requestHeaders.Accept, 'application/json');
// t.deepEqual(JSON.parse(request.requestBody), { data: ruleJsonApi });
// t.is(request.requestHeaders['Content-Type'], 'application/json;charset=utf-8');
// t.is(request.requestHeaders.Authorization, 'Token token=valid_token');
// t.is(response.id, 4);
// t.is(response.type, 'reminder__rules');
// });