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);
});