Manual Reference Source Test

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