Manual Reference Source Test

test/unit/helpers.agreement-template-field.js

import test from 'ava';
import nock from 'nock';
import {
  client,
  AgreementTemplateField,
} 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';

  nock(client.apiBaseUrl)
    .delete(/\/v3\/agreement\/template_fields\/([0-9]*)$/)
    .reply(200, '');

  client.storageUtility.clear();
  t.context.storage = client.storageUtility;
  client.agreementTemplateField = new AgreementTemplateField({});

  t.context.agreementTemplateFieldJsonApi = {
    type: 'agreement__template_fields',
    attributes: {
      label: 'Label for field 1',
      field_name: 'template_field_1',
      required: false,
      default_value: 'DEFAULT_VALUE',
      attribute_name: 'template_field_1_attribute',
      signer_index: 1,
      source_type: 'mobile_user'
    },
    relationships: {
      agreement_template: {
        data: {
          type: 'agreement__templates',
          id: 1
        }
      }
    }
  };
  t.context.agreementTemplateFieldJson = {
    type: 'agreement__template_fields',
    label: 'Label for field 1',
    field_name: 'template_field_1',
    required: false,
    default_value: 'DEFAULT_VALUE',
    attribute_name: 'template_field_1_attribute',
    signer_index: 1,
    source_type: 'mobile_user',
    relationships: {
      agreement_template: {
        data: {
          type: 'agreement__templates',
          id: 1
        }
      }
    }
  };
  t.context.field = new AgreementTemplateField({ data: t.context.agreementTemplateFieldJsonApi });
});

// test.afterEach(t => t.context.server.restore());

/**
 * @test {AgreementTemplateField}
 */
test('[unit] AgreementTemplateField should handle agreementTemplateField data with a normal json format', (t) => {
  const { agreementTemplateFieldJson } = t.context;
  const agreementTemplateField = new AgreementTemplateField(agreementTemplateFieldJson);
  t.is(agreementTemplateField.type, 'agreement__template_fields');
  t.is(agreementTemplateField.label, 'Label for field 1');
  t.is(agreementTemplateField.fieldName, 'template_field_1');
  t.is(agreementTemplateField.required, false);
  t.is(agreementTemplateField.defaultValue, 'DEFAULT_VALUE');
  t.is(agreementTemplateField.attributeName, 'template_field_1_attribute');
  t.is(agreementTemplateField.signerIndex, 1);
  t.is(agreementTemplateField.sourceType, 'mobile_user');
  t.is(agreementTemplateField.agreementTemplate.id, 1);
  t.is(agreementTemplateField.agreementTemplate.type, 'agreement__templates');
});

/**
 * @test {AgreementTemplateField}
 */
test('[unit] AgreementTemplateField should handle AgreementTemplateField data with json api format', (t) => {
  const { agreementTemplateFieldJsonApi } = t.context;
  const agreementTemplateField = new AgreementTemplateField({ data: agreementTemplateFieldJsonApi });
  t.is(agreementTemplateField.type, 'agreement__template_fields');
  t.is(agreementTemplateField.label, 'Label for field 1');
  t.is(agreementTemplateField.fieldName, 'template_field_1');
  t.is(agreementTemplateField.required, false);
  t.is(agreementTemplateField.defaultValue, 'DEFAULT_VALUE');
  t.is(agreementTemplateField.attributeName, 'template_field_1_attribute');
  t.is(agreementTemplateField.signerIndex, 1);
  t.is(agreementTemplateField.sourceType, 'mobile_user');
  t.is(agreementTemplateField.agreementTemplate.id, 1);
  t.is(agreementTemplateField.agreementTemplate.type, 'agreement__templates');
});

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

  agreementTemplateField = new AgreementTemplateField({ data: agreementTemplateFieldJsonApi });
  t.deepEqual(agreementTemplateField.toJSON(), agreementTemplateFieldJsonApi);
});

// /**
//  * @test {AgreementTemplateField.delete}
//  */
// test('[unit] AgreementTemplateField.delete should successfully delete a field', async (t) => {
//   const { field } = t.context;
//   field.id = 5;
//   await field.delete();

//   const request = t.context.server.requests[0];
//   t.is(request.method, 'DELETE');
//   t.is(request.url, `${client.apiBaseUrl}/v3/agreement/template_fields/${field.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');
// });

/**
 * @test {AgreementTemplateField.save}
 */
test('[unit] AgreementTemplateField.save should successfully insert an agreementTemplateField with an agreementTemplateField object when id does not exist', async (t) => {
  const { agreementTemplateFieldJsonApi } = t.context;

  let requestBody = {};
  const server = nock(client.apiBaseUrl)
    .post('/v3/agreement/template_fields', (body) => {
      requestBody = body;
      return { data: json };
    })
    .reply(201, {
      data: {
        id: 1,
        type: 'agreement__template_fields',
        attributes: {
          source_type: 'mobile_user'
        }
      }
    });

  const json = JSON.parse(JSON.stringify(agreementTemplateFieldJsonApi));
  delete json.id;
  const agreementTemplateField = new AgreementTemplateField({ data: json });
  const response = await agreementTemplateField.save();

  t.deepEqual(requestBody, { data: json });
  server.done();


  // const request = t.context.server.requests[0];
  // t.is(request.method, 'POST');
  // t.is(request.url, `${client.apiBaseUrl}/v3/agreement/template_fields`);
  // 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, 1);
  t.is(response.type, 'agreement__template_fields');
  t.is(response.sourceType, 'mobile_user');
});