Manual Reference Source Test

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