test/unit/services.project-content.js
import test from 'ava';
import sinon from 'sinon';
import { client, projectContentService } from '../../src';
test.before('start server', () => {
client.apiBaseUrl = 'https://somesite.Clinical6.com';
});
test.after('server shut down', () => {});
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('GET', `${client.apiBaseUrl}/api/v2/site_start/labs`,
[200, { 'Content-Type': 'application/json' }, JSON.stringify({
data: [{
id: 1,
name: 'New Lab'
}, {
id: 2,
name: 'New Lab'
}, {
id: 3,
name: 'New Lab'
}, {
id: 4,
name: 'New Lab Test'
}
]
})]);
t.context.server.respondWith('POST', `${client.apiBaseUrl}/api/v2/site_start/labs`,
[200, { 'Content-Type': 'application/json' }, JSON.stringify({
data: {
id: 4,
name: 'New Lab'
}
})]);
t.context.server.respondWith('GET', `${client.apiBaseUrl}/api/v2/site_start/labs/1`,
[200, { 'Content-Type': 'application/json' }, JSON.stringify({
data: {
id: 1,
name: 'New Lab'
}
})]);
t.context.server.respondWith('GET', `${client.apiBaseUrl}/api/v2/site_start/labs/1/lab_directors`,
[200, { 'Content-Type': 'application/json' }, JSON.stringify({
data: [{
first_name: 'Pat2',
last_name: 'Cooper',
license_number: '09876543',
cv_effective_date: null,
cv: null
}
]
})]);
t.context.server.respondWith('POST', `${client.apiBaseUrl}/api/v2/site_start/labs/1/lab_directors`,
[201, { 'Content-Type': 'application/json' }, JSON.stringify({
data: {
first_name: 'Yevtsye',
last_name: 'Ferrer',
license_number: '55551234',
cv_effective_date: null,
cv: null
}
})]);
t.context.server.respondWith('GET', `${client.apiBaseUrl}/api/v2/site_start/labs/1/lab_directors/1`,
[200, { 'Content-Type': 'application/json' }, JSON.stringify({
data: {
first_name: 'Pat2',
last_name: 'Cooper',
license_number: '09876543',
cv_effective_date: null,
cv: null
}
})]);
t.context.server.respondWith('PUT', `${client.apiBaseUrl}/api/v2/site_start/labs/1/lab_directors/2`,
[200, { 'Content-Type': 'application/json' }, JSON.stringify({
data: {
first_name: 'Yevtsye',
last_name: 'Ferrer',
license_number: '88888888',
cv_effective_date: null,
cv: null
}
})]);
});
test.afterEach(t => t.context.server.restore());
// ProjectContentService.get method
/**
* @test {ProjectContentService.get}
*/
test('[unit] ProjectContentService.get should exist', (t) => {
t.truthy(projectContentService.get);
});
/**
* @test {ProjectContentService.get}
*/
test.serial('[unit] ProjectContentService.get should throw an error when there is no authToken', (t) => {
client.authToken = undefined;
const expectedError = 'ProjectContentService.get error: requires authToken'
+ ' and version is not defined'
+ ' and ownerType is not defined';
t.throws(() => projectContentService.get(), expectedError);
});
/**
* @test {ProjectContentService.get}
*/
test('[unit] ProjectContentService.get should throw an error when version is not defined', (t) => {
const expectedError = 'ProjectContentService.get error: version is not defined'
+ ' and ownerType is not defined';
t.throws(() => projectContentService.get(), expectedError);
});
/**
* @test {ProjectContentService.get}
*/
test('[unit] ProjectContentService.get should throw an error when ownerType is not defined', (t) => {
const expectedError = 'ProjectContentService.get error: ownerType is not defined';
t.throws(() => projectContentService.get('v2'), expectedError);
});
/**
* @test {ProjectContentService.get}
*/
// test('[unit] ProjectContentService.get should throw an error when owner is not defined', (t) => {
// const expectedError = 'ProjectContentService.get error: owner is not defined';
// t.throws(() => projectContentService.get('v2', 'ownerType'), expectedError);
// });
/**
* @test {ProjectContentService.get}
*/
test('[unit] ProjectContentService.get should return a promise', async (t) => {
t.truthy(await projectContentService.get('v2', 'site_start/labs', 1, 'lab_directors').then);
});
// -api/version/ownerType/owner
// /**
// * @test {ProjectContentService.get}
// */
// test('[unit] ProjectContentService.get should make a properly formatted GET request without contentType or an id param', async (t) => {
// await projectContentService.get('v2', 'site_start/labs');
// const request = t.context.server.requests[0];
// t.is(request.method, 'GET');
// t.is(request.url, `${client.apiBaseUrl}/api/v2/site_start/labs`);
// t.is(request.requestHeaders.Accept, 'application/json');
// t.is(request.requestHeaders['Content-Type'], 'application/json;charset=utf-8');
// });
/**
* @test {ProjectContentService.get}
*/
test('[unit] ProjectContentService.get should receive a valid response for a get request without contentType or an id param', async (t) => {
const response = await projectContentService.get('v2', 'site_start/labs');
t.truthy(response);
t.is(response.data.length, 4);
t.is(response.data[0].id, 1);
t.is(response.data[0].name, 'New Lab');
t.is(response.data[1].id, 2);
t.is(response.data[1].name, 'New Lab');
t.is(response.data[2].id, 3);
t.is(response.data[2].name, 'New Lab');
t.is(response.data[3].id, 4);
t.is(response.data[3].name, 'New Lab Test');
});
// // -api/version/ownerType/owner/id/contentType
// /**
// * @test {ProjectContentService.get}
// */
// test('[unit] ProjectContentService.get should make a properly formatted GET request with an id param', async (t) => {
// await projectContentService.get('v2', 'site_start/labs', 1, 'lab_directors');
// const request = t.context.server.requests[0];
// t.is(request.method, 'GET');
// t.is(request.url, `${client.apiBaseUrl}/api/v2/site_start/labs/1/lab_directors`);
// t.is(request.requestHeaders.Accept, 'application/json');
// t.is(request.requestHeaders['Content-Type'], 'application/json;charset=utf-8');
// });
/**
* @test {ProjectContentService.get}
*/
test('[unit] ProjectContentService.get should receive a valid response for a get request with an id param', async (t) => {
const response = await projectContentService.get('v2', 'site_start/labs', 1, 'lab_directors');
t.truthy(response);
t.is(response.data.length, 1);
t.is(response.data[0].first_name, 'Pat2');
t.is(response.data[0].last_name, 'Cooper');
t.is(response.data[0].license_number, '09876543');
t.is(response.data[0].cv_effective_date, null);
t.is(response.data[0].cv, null);
});
// // -api/version/ownerType/owner/objectId
// /**
// * @test {ProjectContentService.get}
// */
// test('[unit] ProjectContentService.get should make a properly formatted GET request with version, ownerType, owner, and objectId', async (t) => {
// await projectContentService.get('v2', 'site_start/labs', 1);
// const request = t.context.server.requests[0];
// t.is(request.method, 'GET');
// t.is(request.url, `${client.apiBaseUrl}/api/v2/site_start/labs/1`);
// t.is(request.requestHeaders.Accept, 'application/json');
// t.is(request.requestHeaders['Content-Type'], 'application/json;charset=utf-8');
// });
/**
* @test {ProjectContentService.get}
*/
test('[unit] ProjectContentService.get should receive a valid response for a get request with version, ownerType, owner, and objectId', async (t) => {
const response = await projectContentService.get('v2', 'site_start/labs', 1);
t.truthy(response);
t.is(response.data.id, 1);
t.is(response.data.name, 'New Lab');
});
// // -api/version/ownerType/owner/id/contentType/objectId
// /**
// * @test {ProjectContentService.get}
// */
// test('[unit] ProjectContentService.get should make a properly formatted GET request with all params', async (t) => {
// await projectContentService.get('v2', 'site_start/labs', 1, 'lab_directors', 1);
// const request = t.context.server.requests[0];
// t.is(request.method, 'GET');
// t.is(request.url, `${client.apiBaseUrl}/api/v2/site_start/labs/1/lab_directors/1`);
// t.is(request.requestHeaders.Accept, 'application/json');
// t.is(request.requestHeaders['Content-Type'], 'application/json;charset=utf-8');
// });
/**
* @test {ProjectContentService.get}
*/
test('[unit] ProjectContentService.get should receive a valid response for a get request with all params', async (t) => {
const response = await projectContentService.get('v2', 'site_start/labs', 1, 'lab_directors', 1);
t.truthy(response);
t.is(response.data.first_name, 'Pat2');
t.is(response.data.last_name, 'Cooper');
t.is(response.data.license_number, '09876543');
t.is(response.data.cv_effective_date, null);
t.is(response.data.cv, null);
});
// ProjectContentService.insert method
/**
* @test {ProjectContentService.insert}
*/
test('[unit] ProjectContentService.insert should exist method', (t) => {
t.truthy(projectContentService.insert);
});
/**
* @test {ProjectContentService.insert}
*/
test.serial('[unit] ProjectContentService.insert should throw an error when there is no authToken', (t) => {
client.authToken = undefined;
const expectedError = 'ProjectContentService.insert error: requires authToken'
+ ' and version is not defined'
+ ' and ownerType is not defined'
+ ' and data is not defined';
t.throws(() => projectContentService.insert(), expectedError);
});
/**
* @test {ProjectContentService.insert}
*/
test('[unit] ProjectContentService.insert should throw an error when version is not defined', (t) => {
const expectedError = 'ProjectContentService.insert error: version is not defined'
+ ' and ownerType is not defined'
+ ' and data is not defined';
t.throws(() => projectContentService.insert(), expectedError);
});
/**
* @test {ProjectContentService.insert}
*/
test('[unit] ProjectContentService.insert should throw an error when ownerType is not defined', (t) => {
const expectedError = 'ProjectContentService.insert error: ownerType is not defined'
+ ' and data is not defined';
t.throws(() => projectContentService.insert('v2'), expectedError);
});
/**
* @test {ProjectContentService.insert}
*/
test('[unit] ProjectContentService.insert should throw an error when owner is not defined', (t) => {
const expectedError = 'ProjectContentService.insert error: data is not defined';
t.throws(() => projectContentService.insert('v2', 'ownerType'), expectedError);
});
/**
* @test {ProjectContentService.insert}
*/
test('[unit] ProjectContentService.insert should return a promise', async (t) => {
t.truthy(await projectContentService.insert('v2', 'site_start/labs', 1, 'lab_directors', {}).then);
});
// /**
// * @test {ProjectContentService.insert}
// */
// test('[unit] ProjectContentService.insert should make a properly formatted POST request with the id param and no action param', async (t) => {
// const data = {
// first_name: 'Yevtsye',
// last_name: 'Ferrer',
// license_number: '55551234',
// effective_date: '2025/01/30',
// };
// await projectContentService.insert('v2', 'site_start/labs', 1, 'lab_directors', data);
// const request = t.context.server.requests[0];
// t.is(request.method, 'POST');
// t.is(request.url, `${client.apiBaseUrl}/api/v2/site_start/labs/1/lab_directors`);
// t.is(request.requestHeaders.Accept, 'application/json');
// t.is(request.requestHeaders['Content-Type'], 'application/json;charset=utf-8');
// t.is(request.requestBody, JSON.stringify({
// data: {
// first_name: 'Yevtsye',
// last_name: 'Ferrer',
// license_number: '55551234',
// effective_date: '2025/01/30',
// },
// }));
// });
/**
* @test {ProjectContentService.insert}
*/
test('[unit] ProjectContentService.insert should receive a valid response for a POST request with the id param and no action param', async (t) => {
const data = {
data: {
first_name: 'Yevtsye',
last_name: 'Ferrer',
license_number: '55551234',
effective_date: '2025/01/30',
},
};
const response = await projectContentService.insert('v2', 'site_start/labs', 1, 'lab_directors', data);
t.truthy(response);
t.is(response.first_name, 'Yevtsye');
t.is(response.last_name, 'Ferrer');
t.is(response.license_number, '55551234');
t.is(response.cv_effective_date, null);
t.is(response.cv, null);
});
// /**
// * @test {ProjectContentService.insert}
// */
// test('[unit] ProjectContentService.insert should make a properly formatted POST request without contentType, id, and action params', async (t) => {
// const data = { name: 'New Lab' };
// await projectContentService.insert('v2', 'site_start/labs', null, '', data);
// const request = t.context.server.requests[0];
// t.is(request.method, 'POST');
// t.is(request.url, `${client.apiBaseUrl}/api/v2/site_start/labs`);
// t.is(request.requestHeaders.Accept, 'application/json');
// t.is(request.requestHeaders['Content-Type'], 'application/json;charset=utf-8');
// t.is(request.requestBody, JSON.stringify({ data: { name: 'New Lab' } }));
// });
/**
* @test {ProjectContentService.insert}
*/
test('[unit] ProjectContentService.insert should receive a valid response for a POST request without contentType, id, and action params', async (t) => {
const data = { name: 'New Lab' };
const response = await projectContentService.insert('v2', 'site_start/labs', null, '', data);
t.truthy(response);
t.is(response.id, 4);
t.is(response.name, 'New Lab');
});
// ProjectContentService.update method
/**
* @test {ProjectContentService.update}
*/
test('[unit] ProjectContentService.update should exist method', (t) => {
t.truthy(projectContentService.update);
});
/**
* @test {ProjectContentService.update}
*/
test.serial('[unit] ProjectContentService.update should throw an error when there is no authToken', (t) => {
client.authToken = undefined;
const expectedError = 'ProjectContentService.update error: requires authToken'
+ ' and version is not defined'
+ ' and ownerType is not defined'
+ ' and owner is not defined'
+ ' and data is not defined';
t.throws(() => projectContentService.update(), expectedError);
});
/**
* @test {ProjectContentService.update}
*/
test('[unit] ProjectContentService.update should throw an error when version is not defined', (t) => {
const expectedError = 'ProjectContentService.update error: version is not defined'
+ ' and ownerType is not defined'
+ ' and owner is not defined'
+ ' and data is not defined';
t.throws(() => projectContentService.update(), expectedError);
});
/**
* @test {ProjectContentService.update}
*/
test('[unit] ProjectContentService.update should throw an error when ownerType is not defined', (t) => {
const expectedError = 'ProjectContentService.update error: ownerType is not defined'
+ ' and owner is not defined'
+ ' and data is not defined';
t.throws(() => projectContentService.update('v2'), expectedError);
});
/**
* @test {ProjectContentService.update}
*/
test('[unit] ProjectContentService.update should throw an error when owner is not defined', (t) => {
const expectedError = 'ProjectContentService.update error: owner is not defined'
+ ' and data is not defined';
t.throws(() => projectContentService.update('v2', 'ownerType'), expectedError);
});
/**
* @test {ProjectContentService.update}
*/
test('[unit] ProjectContentService.update should throw an error when data is not defined', (t) => {
const expectedError = 'ProjectContentService.update error: data is not defined';
t.throws(() => projectContentService.update('v2', 'ownerType', 1, 'contentType', 1), expectedError);
});
/**
* @test {ProjectContentService.update}
*/
test('[unit] ProjectContentService.update should return a promise', async (t) => {
t.truthy(await projectContentService.update('v2', 'site_start/labs', 1, 'lab_directors', 2, {}).then);
});
// /**
// * @test {ProjectContentService.update}
// */
// test('[unit] ProjectContentService.update should make a properly formatted PUT request', async (t) => {
// const data = {
// first_name: 'Yevtsye',
// last_name: 'Ferrer',
// license_number: '88888888',
// effective_date: '2025/01/30',
// };
// await projectContentService.update('v2', 'site_start/labs', 1, 'lab_directors', 2, data);
// const request = t.context.server.requests[0];
// t.is(request.method, 'PUT');
// t.is(request.url, `${client.apiBaseUrl}/api/v2/site_start/labs/1/lab_directors/2`);
// t.is(request.requestHeaders.Accept, 'application/json');
// t.is(request.requestHeaders['Content-Type'], 'application/json;charset=utf-8');
// t.is(request.requestBody, JSON.stringify({
// data: {
// first_name: 'Yevtsye',
// last_name: 'Ferrer',
// license_number: '88888888',
// effective_date: '2025/01/30',
// },
// }));
// });
/**
* @test {ProjectContentService.update}
*/
test('[unit] ProjectContentService.update should receive a valid response for a PUT request', async (t) => {
const data = {
first_name: 'Yevtsye',
last_name: 'Ferrer',
license_number: '88888888',
effective_date: '2025/01/30',
};
const response = await projectContentService.update('v2', 'site_start/labs', 1, 'lab_directors', 2, data);
t.truthy(response);
t.is(response.first_name, 'Yevtsye');
t.is(response.last_name, 'Ferrer');
t.is(response.license_number, '88888888');
t.is(response.cv_effective_date, null);
t.is(response.cv, null);
});