Manual Reference Source Test

test/unit/helpers.permission.js

import test from 'ava';
import sinon from 'sinon';
import {
  client,
  Permission,
  Section,
  Role,
} from '../../src';

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/permissions/*`,
    [204, { 'Content-Type': 'application/json' }, JSON.stringify({})]);

  t.context.storage = client.storageUtility;
  client.permission = new Permission({});
  t.context.permissionJsonApi = {
    data: {
      id: '914',
      type: 'permissions',
      attributes: {
        enabled: false,
        scope_name: null
      }
    }
  };
  t.context.permission = new Permission(t.context.permissionJsonApi);
  // See tests.js for testing client creation
  t.context.permissionJsonApi = {
    id: 914,
    type: 'permissions',
    attributes: {
      enabled: false,
      scope_name: null
    },
    relationships: {
      user_role: {
        data: { id: 6, type: 'mobile_users' }
      },
      authorizable: {
        data: {
          id: 117,
          type: 'sections'
        }
      }
    }
  };

  t.context.permissionJson = {
    id: 914,
    type: 'permissions',
    enabled: false,
    relationships: {
      user_role: {
        data: { id: 6, type: 'mobile_users' }
      },
      authorizable: {
        data: {
          id: 117,
          type: 'sections'
        }
      }
    }
  };
});

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

/**
 * @test {Permission}
 */
test('[unit] Permission should handle permission data with a normal json format', (t) => {
  const { permissionJson } = t.context;
  const permission = new Permission(permissionJson);
  permission.role = new Role({ id: 6 });
  permission.authorizable = new Section({ id: 117 });
  t.is(permission.id, 914);
  t.is(permission.type, 'permissions');
  t.is(permission.enabled, false);
  t.is(permission.role.id, 6);
  t.is(permission.authorizable.id, 117);
  t.is(permission.authorizable.type, 'sections');
});

/**
 * @test {Permission}
 */
test('[unit] Permission should handle device data with json api format', (t) => {
  const { permissionJsonApi } = t.context;
  const permission = new Permission({ data: permissionJsonApi });
  permission.role = new Role({ id: 6 });
  permission.authorizable = new Section({ id: 117 });
  t.is(permission.type, 'permissions');
  t.is(permission.enabled, false);
  t.is(permission.role.id, 6);
  t.is(permission.authorizable.id, 117);
  t.is(permission.authorizable.type, 'sections');
});

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

  permission = new Permission({ data: permissionJsonApi });
  t.deepEqual(permission.toJSON(), permissionJsonApi);
});

/**
 * @test {Permission.delete}
 */
test('[unit] Permission.delete should successfully delete a permission', async (t) => {
  const { permissionJsonApi } = t.context;
  const permission = new Permission({ data: permissionJsonApi });
  const response = await permission.delete();

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