Manual Reference Source Test

test/unit/helpers.bulk-import.js

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

test.before('start server', (t) => {
  client.apiBaseUrl = 'https://somesite.Clinical6.com';
  client.authToken = 'valid_token';

  t.context.insertResponse = {
    data: {
      id: '5ef4ded5-ab1f-4d73-a842-7366c8efbc9a',
      type: 'import_wizard__bulk_imports',
      attributes: {
        separator: '|',
        platform_model: 'Trials::Site'
      },
      relationships: {
        generic_file: {
          data: {
            id: '1',
            type: 'generic_files'
          }
        },
        status: {
          data: {
            id: 'e08f121d-6918-4038-b752-f447207600cd',
            type: 'job_status'
          }
        }
      }
    },
    included: [
      {
        id: '1',
        type: 'generic_files',
        attributes: {
          name: 'import_wizard.csv',
          public: false,
          visible_until: null,
          created_at: '2018-09-18T21:35:06Z',
          updated_at: '2018-09-18T21:35:06Z'
        }
      },
      {
        id: 'e08f121d-6918-4038-b752-f447207600cd',
        type: 'job_status',
        attributes: {
          status: 'pending',
          started_at: null,
          completed_at: null
        }
      }
    ]
  };
});

test.beforeEach((t) => {
  client.cache = 'never';
  client.authToken = 'valid_token';

  t.context.storage = client.storageUtility;
  t.context.bulkImportJsonApi = {
    type: 'import_wizard__bulk_imports',
    attributes: {
      platform_model: 'Trials::Site',
      separator: '|',
      created_at: null,
      updated_at: null
    },
    relationships: {
      generic_file: {
        data: {
          id: 1,
          type: 'generic_files'
        }
      }
    }
  };
  t.context.bulkImportJson = {
    platform_model: 'Trials::Site',
    separator: '|',
    relationships: {
      generic_file: {
        data: {
          id: 1,
          type: 'generic_files'
        }
      }
    }
  };
  t.context.bulkImport = new BulkImport(t.context.bulkImportJsonApi);
});

/**
 * @test {BulkImport}
 */
test('[unit] BulkImport should handle bulkImport data with a normal json format', (t) => {
  const { bulkImportJson } = t.context;
  const bulkImport = new BulkImport(bulkImportJson);
  t.is(bulkImport.type, 'import_wizard__bulk_imports');
  t.is(bulkImport.platformModel, 'Trials::Site');
  t.is(bulkImport.separator, '|');
});

/**
 * @test {BulkImport}
 */
test('[unit] BulkImport should handle bulkImport data with json api format', (t) => {
  const { bulkImportJsonApi } = t.context;
  const bulkImport = new BulkImport({ data: bulkImportJsonApi });
  t.is(bulkImport.type, 'import_wizard__bulk_imports');
  t.is(bulkImport.platformModel, 'Trials::Site');
  t.is(bulkImport.separator, '|');
});

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

  bulkImport = new BulkImport({ data: bulkImportJsonApi });
  json = bulkImport.toJSON();
  t.deepEqual(json, bulkImportJsonApi);
});


// BulkImport.save
/**
 * @test {BulkImport.save}
 */
test('[unit] BulkImport.save should successfully insert a bulkImport with a bulkImport object when id does not exist', async (t) => {
  const { bulkImportJsonApi, insertResponse } = t.context;
  const json = JSON.parse(JSON.stringify(bulkImportJsonApi));
  delete json.id;
  const bulkImport = new BulkImport({ data: json });
  let request = {};
  nock(client.apiBaseUrl).post(`/v3/import_wizard/bulk_imports`).reply(function (uri, requestBody) {
    request = this.req;
    request.requestBody = requestBody;
    return [201, insertResponse];
  });
  const response = await bulkImport.save();

  t.is(request.path, `/v3/import_wizard/bulk_imports`);
  t.is(request.headers.accept, 'application/json');
  t.deepEqual(request.requestBody, { data: json });
  t.is(request.headers['content-type'], 'application/json');
  t.is(request.headers.authorization, 'Token token=valid_token');
  t.is(response.id, 5);
  t.is(response.type, 'import_wizard__bulk_imports');
  t.is(response.platformModel, 'Trials::Site');
  t.is(response.separator, '|');
});