Manual Reference Source Test

test/unit/helpers.entry.js

import test from 'ava';
import nock from 'nock';
import {
  client,
  Entry,
  EntryTemplate,
  User,
} from '../../src';

test.before('start server', (t) => {
  client.apiBaseUrl = 'https://somesite.Clinical6.com';
  t.context.insertResponseEntries53 = {
    data: {
      id: '7',
      type: 'ediary__entries',
      attributes: {
        created_at: '2017-06-27T20:32:07Z',
        updated_at: '2017-06-27T20:32:07Z',
        date: '2018-06-02'
      },
      relationships: {
        entry_group: {
          data: {
            id: '8',
            type: 'ediary__entry_groups'
          }
        },
        template: {
          data: {
            id: '7',
            type: 'ediary__entry_templates'
          }
        },
        captured_value_group: {
          data: null
        },
        owner: {
          data: {
            id: '22',
            type: 'mobile_users'
          }
        },
        status: {
          data: null
        }
      }
    },
    included: [
      {
        id: '7',
        type: 'ediary__entry_templates',
        attributes: {
          category: 'automatic',
          created_at: '2017-06-27T20:32:07Z',
          updated_at: '2017-06-27T20:32:07Z'
        },
        relationships: {
          entry_group: {
            data: {
              id: '8',
              type: 'ediary__entry_groups'
            }
          },
          flow_process: {
            data: {
              id: '23',
              type: 'data_collection__flow_processes'
            }
          }
        }
      },
      {
        id: '22',
        type: 'mobile_users',
        attributes: {
          uuid: '51edc9a9-6e07-4ffd-a22a-8a620f45ac99',
          account_name: 'dummy_21',
          email: 'user55@fake.com',
          encryption_key: null,
          created_at: '2017-06-27T20:32:07Z',
          updated_at: '2017-06-27T20:32:07Z',
          verified_at: null,
          invitation_sent_at: null,
          invitation_accepted_at: null
        },
        relationships: {
          devices: {
            data: []
          }
        }
      }
    ]
  };
  t.context.insertResponseEntriesPompe = {
    data: {
      id: '7',
      type: 'ediary__entries',
      attributes: {
        created_at: '2017-06-27T20:32:07Z',
        updated_at: '2017-06-27T20:32:07Z',
        date: '2018-06-02'
      },
      relationships: {
        entry_group: {
          data: {
            id: '8',
            type: 'ediary__entry_groups'
          }
        },
        template: {
          data: {
            id: '7',
            type: 'ediary__entry_templates'
          }
        },
        captured_value_group: {
          data: null
        },
        owner: {
          data: {
            id: '22',
            type: 'mobile_users'
          }
        },
        status: {
          data: null
        }
      }
    },
    included: [
      {
        id: '7',
        type: 'ediary__entry_templates',
        attributes: {
          category: 'automatic',
          created_at: '2017-06-27T20:32:07Z',
          updated_at: '2017-06-27T20:32:07Z'
        },
        relationships: {
          entry_group: {
            data: {
              id: '8',
              type: 'ediary__entry_groups'
            }
          },
          flow_process: {
            data: {
              id: '23',
              type: 'data_collection__flow_processes'
            }
          }
        }
      },
      {
        id: '22',
        type: 'mobile_users',
        attributes: {
          uuid: '51edc9a9-6e07-4ffd-a22a-8a620f45ac99',
          account_name: 'dummy_21',
          email: 'user55@fake.com',
          encryption_key: null,
          created_at: '2017-06-27T20:32:07Z',
          updated_at: '2017-06-27T20:32:07Z',
          verified_at: null,
          invitation_sent_at: null,
          invitation_accepted_at: null
        },
        relationships: {
          devices: {
            data: []
          }
        }
      }
    ]
  };
});

test.after('server shut down', () => {});

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

  t.context.entryJsonApi = {
    id: 19,
    type: 'ediary__entries',
    attributes: {
      created_at: '2017-06-27T17:58:10Z',
      date: '2017-06-17',
      updated_at: '2017-06-27T21:35:48Z'
    },
    relationships: {
      entry_group: {
        data: {
          id: '401',
          type: 'ediary__entry_groups'
        }
      },
      template: {
        data: {
          id: '401',
          type: 'ediary__entry_templates'
        }
      },
      captured_value_group: {
        data: {
          id: '151',
          type: 'data_collection__captured_value_groups'
        }
      },
      owner: {
        data: {
          id: '400',
          type: 'mobile_users'
        }
      },
      status: {
        data: {
          id: '738',
          type: 'statuses'
        }
      }
    }
  };
  t.context.entry = new Entry(t.context.entryJsonApi);
});

// Entry helper class
/**
 * @test {Entry.constructor}
 */
test('[unit] Entry.constructor should handle entry data with json api format', (t) => {
  const { entry } = t.context;
  t.is(entry.id, 19);
  t.is(entry.type, 'ediary__entries');
  t.is(entry.createdAt, '2017-06-27T17:58:10Z');
  t.is(entry.updatedAt, '2017-06-27T21:35:48Z');
  t.is(entry.date, '2017-06-17');
});

/**
 * @test {Entry.constructor}
 */
test('[unit] Entry.constructor should generate json api format when converted to string', (t) => {
  const { entry, entryJsonApi } = t.context;
  t.is(JSON.stringify(entry), JSON.stringify(entryJsonApi));
});

/**
 * @test {Entry.save}
 */
test('[unit] Entry.save should exist', (t) => {
  const { entry } = t.context;
  t.truthy(entry.save);
});

/**
 * @test {Entry.save}
 */
test('[unit] Entry.save should call EDiaryService.addEntry to make a POST request', async (t) => {
  const { insertResponseEntries53 } = t.context;

  let request = {};
  nock(client.apiBaseUrl).post(`/v3/ediary/entries`).reply(function (uri, requestBody) {
    request = this.req;
    request.requestBody = requestBody;
    return [200, insertResponseEntries53];
  });

  const requestJsonApi = {
    data: {
      type: 'ediary__entries',
      attributes: {
        date: '2018-06-02'
      },
      relationships: {
        template: {
          data: {
            id: 12,
            type: 'ediary__entry_templates'
          }
        },
        owner: {
          data: {
            id: 400,
            type: 'mobile_users'
          }
        }
      }
    }
  };

  const entry = new Entry({ date: '2018-06-02' });
  entry.owner = new User({ id: 400 });
  entry.template = new EntryTemplate({ id: 12 });
  // entry.date = '2018-06-02';
  const response = await entry.save();

  t.is(request.path, `/v3/ediary/entries`);
  t.is(request.headers.accept, 'application/json');
  t.deepEqual(request.requestBody, requestJsonApi);
  t.is(request.headers['content-type'], 'application/json');
  t.is(request.headers.authorization, 'Token token=valid_token');

  t.truthy(response);
  t.is(response.constructor.name, 'Entry');
  t.is(response.id, 7);
  t.is(response.createdAt, '2017-06-27T20:32:07Z');
  t.is(response.updatedAt, '2017-06-27T20:32:07Z');
  t.is(response.date, '2018-06-02');
  // t.is(response.entryGroup.constructor.name, 'EntryGroup');
  t.is(response.entryGroup.id, '8');
  // t.is(response.flow.constructor.name, 'Flow');
  t.is(response.flow.id, '23');
  t.is(response.owner.constructor.name, 'User');
  t.is(response.owner.id, 22);
});


/**
 * @test {Entry.save}
 */
test('[unit] Entry.save should successfully save (pompe example)', async (t) => {
  let request = {};
  nock(client.apiBaseUrl).post(`/v3/ediary/entries`).reply(function (uri, requestBody) {
    request = this.req;
    request.requestBody = requestBody;
    return [200, {
      data: [
        {
          id: '16',
          type: 'ediary__entries',
          attributes: {
            created_at: '2017-06-26T15:19:06Z',
            updated_at: '2017-06-26T15:19:06Z',
            date: '2018-07-01'
          },
          relationships: {
            entry_group: {
              data: {
                id: '1',
                type: 'ediary__entry_groups'
              }
            },
            template: {
              data: {
                id: '1',
                type: 'ediary__entry_templates'
              }
            },
            captured_value_group: {
              data: null
            },
            owner: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            status: {
              data: null
            }
          }
        },
        {
          id: '4',
          type: 'ediary__entries',
          attributes: {
            created_at: '2017-06-22T23:03:44Z',
            updated_at: '2017-06-22T23:03:44Z',
            date: '2018-06-18'
          },
          relationships: {
            entry_group: {
              data: {
                id: '1',
                type: 'ediary__entry_groups'
              }
            },
            template: {
              data: null
            },
            captured_value_group: {
              data: null
            },
            owner: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            status: {
              data: null
            }
          }
        },
        {
          id: '5',
          type: 'ediary__entries',
          attributes: {
            created_at: '2017-06-22T23:04:25Z',
            updated_at: '2017-06-22T23:04:25Z',
            date: '2018-06-18'
          },
          relationships: {
            entry_group: {
              data: {
                id: '1',
                type: 'ediary__entry_groups'
              }
            },
            template: {
              data: null
            },
            captured_value_group: {
              data: null
            },
            owner: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            status: {
              data: null
            }
          }
        },
        {
          id: '8',
          type: 'ediary__entries',
          attributes: {
            created_at: '2017-06-22T23:39:19Z',
            updated_at: '2017-06-22T23:39:19Z',
            date: '2018-06-11'
          },
          relationships: {
            entry_group: {
              data: {
                id: '1',
                type: 'ediary__entry_groups'
              }
            },
            template: {
              data: null
            },
            captured_value_group: {
              data: null
            },
            owner: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            status: {
              data: null
            }
          }
        },
        {
          id: '7',
          type: 'ediary__entries',
          attributes: {
            created_at: '2017-06-22T23:23:19Z',
            updated_at: '2017-06-22T23:23:19Z',
            date: '2018-06-07'
          },
          relationships: {
            entry_group: {
              data: {
                id: '1',
                type: 'ediary__entry_groups'
              }
            },
            template: {
              data: null
            },
            captured_value_group: {
              data: null
            },
            owner: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            status: {
              data: null
            }
          }
        },
        {
          id: '3',
          type: 'ediary__entries',
          attributes: {
            created_at: '2017-06-22T22:44:41Z',
            updated_at: '2017-06-22T22:44:41Z',
            date: '2018-06-05'
          },
          relationships: {
            entry_group: {
              data: {
                id: '1',
                type: 'ediary__entry_groups'
              }
            },
            template: {
              data: null
            },
            captured_value_group: {
              data: null
            },
            owner: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            status: {
              data: null
            }
          }
        },
        {
          id: '2',
          type: 'ediary__entries',
          attributes: {
            created_at: '2017-06-22T22:39:35Z',
            updated_at: '2017-06-22T22:39:35Z',
            date: '2018-06-04'
          },
          relationships: {
            entry_group: {
              data: {
                id: '1',
                type: 'ediary__entry_groups'
              }
            },
            template: {
              data: null
            },
            captured_value_group: {
              data: null
            },
            owner: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            status: {
              data: null
            }
          }
        },
        {
          id: '1',
          type: 'ediary__entries',
          attributes: {
            created_at: '2017-06-15T17:01:33Z',
            updated_at: '2017-06-15T17:01:33Z',
            date: '2018-06-03'
          },
          relationships: {
            entry_group: {
              data: {
                id: '1',
                type: 'ediary__entry_groups'
              }
            },
            template: {
              data: null
            },
            captured_value_group: {
              data: null
            },
            owner: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            status: {
              data: null
            }
          }
        },
        {
          id: '6',
          type: 'ediary__entries',
          attributes: {
            created_at: '2017-06-22T23:20:55Z',
            updated_at: '2017-06-22T23:20:55Z',
            date: '2018-06-01'
          },
          relationships: {
            entry_group: {
              data: {
                id: '1',
                type: 'ediary__entry_groups'
              }
            },
            template: {
              data: null
            },
            captured_value_group: {
              data: null
            },
            owner: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            status: {
              data: null
            }
          }
        },
        {
          id: '19',
          type: 'ediary__entries',
          attributes: {
            created_at: '2017-06-27T17:58:10Z',
            updated_at: '2017-06-27T21:35:48Z',
            date: '2017-06-17'
          },
          relationships: {
            entry_group: {
              data: {
                id: '1',
                type: 'ediary__entry_groups'
              }
            },
            template: {
              data: {
                id: '1',
                type: 'ediary__entry_templates'
              }
            },
            captured_value_group: {
              data: {
                id: '151',
                type: 'data_collection__captured_value_groups'
              }
            },
            owner: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            status: {
              data: {
                id: '738',
                type: 'statuses'
              }
            }
          }
        },
        {
          id: '18',
          type: 'ediary__entries',
          attributes: {
            created_at: '2017-06-26T16:27:25Z',
            updated_at: '2017-06-27T21:35:05Z',
            date: '2017-06-15'
          },
          relationships: {
            entry_group: {
              data: {
                id: '1',
                type: 'ediary__entry_groups'
              }
            },
            template: {
              data: {
                id: '1',
                type: 'ediary__entry_templates'
              }
            },
            captured_value_group: {
              data: {
                id: '150',
                type: 'data_collection__captured_value_groups'
              }
            },
            owner: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            status: {
              data: {
                id: '706',
                type: 'statuses'
              }
            }
          }
        },
        {
          id: '17',
          type: 'ediary__entries',
          attributes: {
            created_at: '2017-06-26T16:19:03Z',
            updated_at: '2017-06-27T21:34:46Z',
            date: '2017-06-14'
          },
          relationships: {
            entry_group: {
              data: {
                id: '1',
                type: 'ediary__entry_groups'
              }
            },
            template: {
              data: {
                id: '1',
                type: 'ediary__entry_templates'
              }
            },
            captured_value_group: {
              data: {
                id: '149',
                type: 'data_collection__captured_value_groups'
              }
            },
            owner: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            status: {
              data: {
                id: '729',
                type: 'statuses'
              }
            }
          }
        },
        {
          id: '15',
          type: 'ediary__entries',
          attributes: {
            created_at: '2017-06-23T16:10:44Z',
            updated_at: '2017-06-23T17:11:39Z',
            date: '2017-06-10'
          },
          relationships: {
            entry_group: {
              data: {
                id: '1',
                type: 'ediary__entry_groups'
              }
            },
            template: {
              data: null
            },
            captured_value_group: {
              data: {
                id: '91',
                type: 'data_collection__captured_value_groups'
              }
            },
            owner: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            status: {
              data: {
                id: '182',
                type: 'statuses'
              }
            }
          }
        },
        {
          id: '14',
          type: 'ediary__entries',
          attributes: {
            created_at: '2017-06-23T15:52:33Z',
            updated_at: '2017-06-23T15:52:33Z',
            date: '2017-06-09'
          },
          relationships: {
            entry_group: {
              data: {
                id: '1',
                type: 'ediary__entry_groups'
              }
            },
            template: {
              data: null
            },
            captured_value_group: {
              data: null
            },
            owner: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            status: {
              data: null
            }
          }
        }
      ],
      included: [
        {
          id: '1',
          type: 'ediary__entry_templates',
          attributes: {
            category: 'automatic',
            created_at: '2017-06-14T23:46:26Z',
            updated_at: '2017-06-14T23:46:26Z'
          },
          relationships: {
            entry_group: {
              data: {
                id: '1',
                type: 'ediary__entry_groups'
              }
            },
            flow_process: {
              data: {
                id: '6',
                type: 'data_collection__flow_processes'
              }
            }
          }
        },
        {
          id: '41',
          type: 'mobile_users',
          attributes: {
            uuid: 'b9308458-4011-409f-9604-cf1700919738',
            account_name: '095780',
            email: null,
            encryption_key: null,
            created_at: '2017-05-19T17:24:13Z',
            updated_at: '2017-06-27T21:39:01Z',
            verified_at: null,
            invitation_sent_at: null,
            invitation_accepted_at: null
          },
          relationships: {
            devices: {
              data: [
                {
                  id: '4',
                  type: 'devices'
                },
                {
                  id: '5',
                  type: 'devices'
                },
                {
                  id: '37',
                  type: 'devices'
                }
              ]
            }
          }
        },
        {
          id: '151',
          type: 'data_collection__captured_value_groups',
          attributes: {
            submitted_at: '2017-06-27T21:35:48Z',
            created_at: '2017-06-27T21:35:48Z',
            updated_at: '2017-06-27T21:35:48Z',
            owner_type: 'User'
          },
          relationships: {
            owner: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            creator: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            flow_process: {
              data: {
                id: '7',
                type: 'data_collection__flow_processes'
              }
            },
            captured_values: {
              data: [
                {
                  id: '593',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '594',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '595',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '596',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '597',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '598',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '599',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '600',
                  type: 'data_collection__captured_values'
                }
              ]
            }
          }
        },
        {
          id: '738',
          type: 'statuses',
          attributes: {
            value: 'completed'
          },
          relationships: {
            owner: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            statusable: {
              data: {
                id: '19',
                type: 'ediary__entries'
              }
            }
          }
        },
        {
          id: '150',
          type: 'data_collection__captured_value_groups',
          attributes: {
            submitted_at: '2017-06-27T21:35:05Z',
            created_at: '2017-06-27T21:35:05Z',
            updated_at: '2017-06-27T21:35:05Z',
            owner_type: 'User'
          },
          relationships: {
            owner: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            creator: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            flow_process: {
              data: {
                id: '7',
                type: 'data_collection__flow_processes'
              }
            },
            captured_values: {
              data: [
                {
                  id: '585',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '586',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '587',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '588',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '589',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '590',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '591',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '592',
                  type: 'data_collection__captured_values'
                }
              ]
            }
          }
        },
        {
          id: '706',
          type: 'statuses',
          attributes: {
            value: 'completed'
          },
          relationships: {
            owner: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            statusable: {
              data: {
                id: '18',
                type: 'ediary__entries'
              }
            }
          }
        },
        {
          id: '149',
          type: 'data_collection__captured_value_groups',
          attributes: {
            submitted_at: '2017-06-27T21:34:46Z',
            created_at: '2017-06-27T21:34:46Z',
            updated_at: '2017-06-27T21:34:46Z',
            owner_type: 'User'
          },
          relationships: {
            owner: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            creator: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            flow_process: {
              data: {
                id: '7',
                type: 'data_collection__flow_processes'
              }
            },
            captured_values: {
              data: [
                {
                  id: '577',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '578',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '579',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '580',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '581',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '582',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '583',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '584',
                  type: 'data_collection__captured_values'
                }
              ]
            }
          }
        },
        {
          id: '729',
          type: 'statuses',
          attributes: {
            value: 'completed'
          },
          relationships: {
            owner: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            statusable: {
              data: {
                id: '17',
                type: 'ediary__entries'
              }
            }
          }
        },
        {
          id: '91',
          type: 'data_collection__captured_value_groups',
          attributes: {
            submitted_at: '2017-06-23T17:11:39Z',
            created_at: '2017-06-23T17:11:39Z',
            updated_at: '2017-06-23T17:11:39Z',
            owner_type: 'User'
          },
          relationships: {
            owner: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            creator: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            flow_process: {
              data: {
                id: '7',
                type: 'data_collection__flow_processes'
              }
            },
            captured_values: {
              data: [
                {
                  id: '124',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '125',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '126',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '127',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '128',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '129',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '130',
                  type: 'data_collection__captured_values'
                },
                {
                  id: '131',
                  type: 'data_collection__captured_values'
                }
              ]
            }
          }
        },
        {
          id: '182',
          type: 'statuses',
          attributes: {
            value: 'completed'
          },
          relationships: {
            owner: {
              data: {
                id: '41',
                type: 'mobile_users'
              }
            },
            statusable: {
              data: {
                id: '15',
                type: 'ediary__entries'
              }
            }
          }
        }
      ]
    }];
  });

  const requestJsonApi = {
    data: {
      type: 'ediary__entries',
      attributes: {
        date: '2018-06-04'
      },
      relationships: {
        template: {
          data: {
            id: 8,
            type: 'ediary__entry_templates'
          }
        },
        owner: {
          data: {
            id: 41,
            type: 'mobile_users'
          }
        }
      }
    }
  };

  const myEntry = new Entry({ date: '2018-06-04' });
  myEntry.owner = new User({ id: 41 });
  myEntry.template = new EntryTemplate({ id: 8 });
  const response = await myEntry.save();

  t.is(request.path, `/v3/ediary/entries`);
  t.is(request.headers.accept, 'application/json');
  t.deepEqual(request.requestBody, requestJsonApi);
  t.is(request.headers['content-type'], 'application/json');
  t.is(request.headers.authorization, 'Token token=valid_token');

  t.truthy(response);
  const entry = response[9];
  t.is(entry.constructor.name, 'Entry');
  t.is(entry.id, 19);
  t.is(entry.createdAt, '2017-06-27T17:58:10Z');
  t.is(entry.updatedAt, '2017-06-27T21:35:48Z');
  t.is(entry.date, '2017-06-17');
  t.is(entry.flowDataGroup.constructor.name, 'FlowDataGroup');
  t.is(entry.flowDataGroup.id, 151);
  t.is(entry.owner.constructor.name, 'User');
  t.is(entry.owner.id, 41);
});