Manual Reference Source Test

test/unit/helpers.agreement.js

import test from 'ava';
import {
  client,
  Agreement,
} from '../../src';

// See tests.js for testing client creation
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.agreementJsonApi = {
    id: 10,
    type: 'agreement__agreements',
    attributes: {
      common_id: '90e99217657b6d498f2d6c0b7bad1f80',
      status: 'OUT_FOR_SIGNATURE',
      completed_at: null,
      document_url: null,
      created_at: '2018-07-13T18:20:59Z',
      updated_at: '2018-07-13T18:20:59Z'
    },
    relationships: {
      agreement_template: {
        data: {
          id: 55,
          type: 'agreement__templates'
        }
      },
      mobile_user: {
        data: {
          id: 308,
          type: 'mobile_users'
        }
      },
      signatures: {
        data: [
          {
            id: 2,
            type: 'agreement__signatures'
          }
        ]
      }
    }
  };

  t.context.agreementJson = {
    id: 10,
    type: 'agreement__agreements',
    common_id: '90e99217657b6d498f2d6c0b7bad1f80',
    status: 'OUT_FOR_SIGNATURE',
    completed_at: null,
    document_url: null,
    created_at: '2018-07-13T18:20:59Z',
    updated_at: '2018-07-13T18:20:59Z',
    relationships: {
      agreement_template: {
        data: {
          id: 55,
          type: 'agreement__templates'
        }
      },
      mobile_user: {
        data: {
          id: 308,
          type: 'mobile_users'
        }
      },
      signatures: {
        data: [
          {
            id: 2,
            type: 'agreement__signatures'
          }
        ]
      }
    }
  };

  client.storageUtility.clear();
  t.context.storage = client.storageUtility;
  client.agreement = new Agreement({});
  t.context.agreement = new Agreement({ data: t.context.agreementJsonApi });
});

/**
 * @test {Agreement}
 */
test('[unit] Agreement should handle agreement data with a normal json format', (t) => {
  const { agreementJson } = t.context;
  const agreement = new Agreement(agreementJson);
  t.is(agreement.id, 10);
  t.is(agreement.type, 'agreement__agreements');
  t.is(agreement.commonId, '90e99217657b6d498f2d6c0b7bad1f80');
  t.is(agreement.status, 'OUT_FOR_SIGNATURE');
  t.is(agreement.completedAt, null);
  t.is(agreement.documentUrl, null);
  t.is(agreement.createdAt, '2018-07-13T18:20:59Z');
  t.is(agreement.updatedAt, '2018-07-13T18:20:59Z');
  t.is(agreement.agreementTemplate.id, 55);
  t.is(agreement.agreementTemplate.type, 'agreement__templates');
  t.is(agreement.mobileUser.id, 308);
  t.is(agreement.mobileUser.type, 'mobile_users');
  t.is(agreement.agreementSignatures.length, 1);
  t.is(agreement.agreementSignatures[0].id, 2);
  t.is(agreement.agreementSignatures[0].type, 'agreement__signatures');
});

/**
 * @test {Agreement}
 */
test('[unit] Agreement should handle agreement data with json api format', (t) => {
  const { agreementJsonApi } = t.context;
  const agreement = new Agreement({ data: agreementJsonApi });
  t.is(agreement.id, 10);
  t.is(agreement.type, 'agreement__agreements');
  t.is(agreement.commonId, '90e99217657b6d498f2d6c0b7bad1f80');
  t.is(agreement.status, 'OUT_FOR_SIGNATURE');
  t.is(agreement.completedAt, null);
  t.is(agreement.documentUrl, null);
  t.is(agreement.createdAt, '2018-07-13T18:20:59Z');
  t.is(agreement.updatedAt, '2018-07-13T18:20:59Z');
  t.is(agreement.agreementTemplate.id, 55);
  t.is(agreement.agreementTemplate.type, 'agreement__templates');
  t.is(agreement.mobileUser.id, 308);
  t.is(agreement.mobileUser.type, 'mobile_users');
  t.is(agreement.agreementSignatures.length, 1);
  t.is(agreement.agreementSignatures[0].id, 2);
  t.is(agreement.agreementSignatures[0].type, 'agreement__signatures');
});

/**
 * @test {Agreement}
 */
test('[unit] Agreement should generate json api format when converted to string', (t) => {
  const { agreementJsonApi } = t.context;
  let consentStrategy = new Agreement({ data: agreementJsonApi });
  t.deepEqual(consentStrategy.toJSON(), agreementJsonApi);

  consentStrategy = new Agreement({ data: agreementJsonApi });
  t.deepEqual(consentStrategy.toJSON(), agreementJsonApi);
});