Manual Reference Source Test

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');
});