test/unit/helpers.setting.js
import test from 'ava';
import sinon from 'sinon';
import {
client,
Setting,
} from '../../src';
// See tests.js for testing client creation
const settingJsonApi = {
id: 'log_active',
type: 'settings',
attributes: {
value: 'enabled'
}
};
const settingJson = {
id: 'log_active',
type: 'settings',
value: 'enabled'
};
test.before('start server', () => {
client.apiBaseUrl = 'https://somesetting.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('PATCH', `${client.apiBaseUrl}/v3/settings/*`,
[200, { 'Content-Type': 'application/json' }, JSON.stringify({
data: {
id: 'logo',
type: 'settings',
attributes: {
value: 'new logo url'
}
}
})]);
client.storageUtility.clear();
t.context.storage = client.storageUtility;
client.setting = new Setting({});
t.context.settingJsonApi = {
data: {
id: 'advertisements',
type: 'settings',
attributes: {
value: {
display_time: 5,
transition_time: 1
}
}
}
};
t.context.setting = new Setting(t.context.settingJsonApi);
});
test.afterEach(t => t.context.server.restore());
/**
* @test {Setting}
*/
test('[unit] Setting should handle setting data with a normal json format', (t) => {
const setting = new Setting(settingJson);
t.is(setting.id, 'log_active');
t.is(setting.type, 'settings');
t.is(setting.value, 'enabled');
});
/**
* @test {Setting}
*/
test('[unit] Setting should handle setting data with json api format', (t) => {
const setting = new Setting({ data: settingJsonApi });
t.is(setting.id, 'log_active');
t.is(setting.type, 'settings');
t.is(setting.value, 'enabled');
});
/**
* @test {Setting}
*/
test('[unit] Setting should handle setting data with the simple approach', (t) => {
const setting = new Setting('log_active', 'enabled');
t.is(setting.id, 'log_active');
t.is(setting.type, 'settings');
t.is(setting.value, 'enabled');
});
/**
* @test {Setting}
*/
test('[unit] Setting should generate json api format when converted to string', (t) => {
let setting = new Setting({ data: settingJsonApi });
t.deepEqual(setting.toJSON(), settingJsonApi);
setting = new Setting({ data: settingJsonApi });
t.deepEqual(setting.toJSON(), settingJsonApi);
});
/**
* @test {Setting.save}
*/
test('[unit] Setting.save should successfully update a setting with a setting object when id exists', async (t) => {
const setting = new Setting({ data: settingJsonApi });
const response = await setting.save();
// const request = t.context.server.requests[0];
// t.is(request.method, 'PATCH');
// t.is(request.url, `${client.apiBaseUrl}/v3/settings/${setting.id}`);
// t.is(request.requestHeaders.Accept, 'application/json');
// t.deepEqual(JSON.parse(request.requestBody), { data: settingJsonApi });
// t.is(request.requestHeaders['Content-Type'], 'application/json;charset=utf-8');
// t.is(request.requestHeaders.Authorization, 'Token token=valid_token');
t.is(response.id, 'logo');
t.is(response.type, 'settings');
});