test/unit/services.advertisement.js
import test from 'ava';
import sinon from 'sinon';
import {
client,
advertisementService,
} from '../../src';
test.before('start server', () => {
client.apiBaseUrl = 'https://somesite.Clinical6.com';
});
test.after('server shut down', () => {});
test.beforeEach((t) => {
client.authToken = 'valid_token';
t.context.server = sinon.fakeServer.create();
t.context.server.autoRespond = true;
t.context.server.respondWith('GET', `${client.apiBaseUrl}/api/v2/advertisements*`,
[200, { 'Content-Type': 'application/json' }, JSON.stringify({
json: {
status: 'ok',
advertisements: [{
action: 'No Action',
action_object: '',
content_id: 19,
id: 19,
title: 'ad1',
description: null,
image: {
image: {
url: '/assets/default/default-b62e7263fe5a6d7bd06d942b3702ac2f.png'
}
},
tags: []
}]
}
})]);
t.context.server.respondWith('GET', `${client.apiBaseUrl}/api/advertisements/settings`,
[200, { 'Content-Type': 'application/json' }, JSON.stringify({
json: {
status: 'ok',
advertisements: {
settings: {
transition_time: 1,
display_time: '10'
}
}
}
})]);
});
test.afterEach(t => t.context.server.restore());
// AdvertisementService.get
/**
* @test {AdvertisementService.get}
*/
test('[unit] AdvertisementService.get should have a get method', async (t) => {
await t.truthy(advertisementService.get);
});
/**
* @test {AdvertisementService.get}
*/
test.serial('[unit] AdvertisementService.get should throw an error when there is no authToken', async (t) => {
const pre = 'AdvertisementService.get error';
client.authToken = undefined;
await t.throws(() => advertisementService.get(), `${pre}: requires authToken`);
});
/**
* @test {AdvertisementService.get}
*/
test('[unit] AdvertisementService.get should return a promise', async (t) => {
await t.truthy(advertisementService.get().then);
});
/**
* @test {AdvertisementService.get}
*/
test('[unit] AdvertisementService.get should make a properly formatted GET request and receive a valid response', async (t) => {
const response = await advertisementService.get('123', ['tag1', 'tag2']);
// const { method, url, requestHeaders } = t.context.server.requests[0];
// await t.is(method, 'GET');
// await t.is(url, `${client.apiBaseUrl}/api/v2/advertisements?image_versions=123&tag_names%5B%5D=tag1&tag_names%5B%5D=tag2`);
// await t.is(requestHeaders.Accept, 'application/json');
// await t.is(requestHeaders['Content-Type'], 'application/json;charset=utf-8');
// await t.is(requestHeaders.Authorization, 'Token token=valid_token');
await t.truthy(response);
await t.is(response.length, 1);
await t.is(response[0].action, 'No Action');
await t.is(response[0].action_object, '');
await t.is(response[0].content_id, 19);
await t.is(response[0].image.url, '/assets/default/default-b62e7263fe5a6d7bd06d942b3702ac2f.png');
await t.is(response[0].title, 'ad1');
await t.is(response[0].description, null);
});
// AdvertisementService.getSettings
/**
* @test {AdvertisementService.getSettings}
*/
test('[unit] AdvertisementService.getSettings should have a getSettings method', async (t) => {
await t.truthy(advertisementService.getSettings);
});
/**
* @test {AdvertisementService.getSettings}
*/
test.serial('[unit] AdvertisementService.getSettings should throw an error when there is no authToken', (t) => {
const pre = 'AdvertisementService.getSettings error';
client.authToken = undefined;
t.throws(() => advertisementService.getSettings(), `${pre}: requires authToken`);
});
/**
* @test {AdvertisementService.getSettings}
*/
test('[unit] AdvertisementService.getSettings should return a promise', async (t) => {
await t.truthy(advertisementService.getSettings().then);
});
// /**
// * @test {AdvertisementService.getSettings}
// */
// test('[unit] AdvertisementService.getSettings should make a properly formatted get request', async (t) => {
// advertisementService.getSettings();
// const { method, url, requestHeaders } = t.context.server.requests[0];
// await t.is(method, 'GET');
// await t.is(url, `${client.apiBaseUrl}/api/advertisements/settings`);
// await t.is(requestHeaders.Accept, 'application/json');
// await t.is(requestHeaders['Content-Type'], 'application/json;charset=utf-8');
// await t.is(requestHeaders.Authorization, 'Token token=valid_token');
// });
/**
* @test {AdvertisementService.getSettings}
*/
test('[unit] AdvertisementService.getSettings should receive a valid response for a get request', async (t) => {
const response = await advertisementService.getSettings();
await t.truthy(response);
await t.is(response.json.status, 'ok');
await t.is(response.json.advertisements.settings.transition_time, 1);
await t.is(response.json.advertisements.settings.display_time, '10');
});