test/unit/helpers.consultation-participant.js
import test from 'ava';
import nock from 'nock';
import {
client,
ConsultationParticipant,
} from '../../src';
test.before('start server', (t) => {
client.apiBaseUrl = 'https://somesite.Clinical6.com';
client.authToken = 'valid_token';
t.context.updateResponse = {
data: {
id: '1',
type: 'video_consultation_participants',
attributes: {
created_at: '2018-07-26T02:48:37Z',
updated_at: '2018-07-26T02:48:37Z'
},
relationships: {
video_consultation: {
data: {
id: '1',
type: 'video_consultations'
}
},
participant: {
data: {
id: '33',
type: 'mobile_users'
}
}
}
},
included: [
{
id: '1',
type: 'video_consultations',
attributes: {
name: 'General Consultation',
start_at: '2018-07-26T02:48:08Z',
end_at: null,
status: null,
confirmed_at: null,
deleted_at: null,
created_at: '2018-07-26T02:48:37Z',
updated_at: '2018-07-26T02:48:37Z'
},
relationships: {
video_consultation_participants: {
data: [
{
id: '1',
type: 'video_consultation_participants'
}
]
}
}
},
{
id: '33',
type: 'mobile_users',
attributes: {
uuid: 'f22462a2-4a0d-4e8b-8762-9b677284d290',
account_name: 'dummy_33',
email: 'user103@fake.com',
created_at: '2018-07-26T02:48:37Z',
updated_at: '2018-07-26T02:48:37Z',
invitation_sent_at: null,
invitation_accepted_at: null,
disabled: false,
disabled_at: null,
password_expired_at: '2018-10-24T02:48:37Z'
},
relationships: {
devices: {
data: []
},
user_role: {
data: null
},
profile: {
data: {
id: '103',
type: 'profiles'
}
},
language: {
data: {
id: '1',
type: 'languages'
}
},
patient: {
data: null
},
threads: {
data: []
},
site_member: {
data: null
},
overall_status: {
data: null
}
}
}
]
};
t.context.insertResponse = {
data: {
id: '1',
type: 'video_consultation_participants',
attributes: {
created_at: '2018-07-26T02:48:37Z',
updated_at: '2018-07-26T02:48:37Z'
},
relationships: {
video_consultation: {
data: {
id: '1',
type: 'video_consultations'
}
},
participant: {
data: {
id: '33',
type: 'mobile_users'
}
}
}
},
included: [
{
id: '1',
type: 'video_consultations',
attributes: {
name: 'General Consultation',
start_at: '2018-07-26T02:48:08Z',
end_at: null,
status: null,
confirmed_at: null,
deleted_at: null,
created_at: '2018-07-26T02:48:37Z',
updated_at: '2018-07-26T02:48:37Z'
},
relationships: {
video_consultation_participants: {
data: [
{
id: '1',
type: 'video_consultation_participants'
}
]
}
}
},
{
id: '33',
type: 'mobile_users',
attributes: {
uuid: 'f22462a2-4a0d-4e8b-8762-9b677284d290',
account_name: 'dummy_33',
email: 'user103@fake.com',
created_at: '2018-07-26T02:48:37Z',
updated_at: '2018-07-26T02:48:37Z',
invitation_sent_at: null,
invitation_accepted_at: null,
disabled: false,
disabled_at: null,
password_expired_at: '2018-10-24T02:48:37Z'
},
relationships: {
devices: {
data: []
},
user_role: {
data: null
},
profile: {
data: {
id: '103',
type: 'profiles'
}
},
language: {
data: {
id: '1',
type: 'languages'
}
},
patient: {
data: null
},
threads: {
data: []
},
site_member: {
data: null
},
overall_status: {
data: null
}
}
}
]
};
});
test.beforeEach((t) => {
client.cache = 'never';
client.authToken = 'valid_token';
t.context.storage = client.storageUtility;
t.context.consultationJsonApi = {
id: 1,
type: 'video_consultation_participants',
attributes: {
created_at: null,
updated_at: null,
},
relationships: {
video_consultation: {
data: {
id: 1,
type: 'video_consultations'
}
},
participant: {
data: {
id: 33,
type: 'mobile_users'
}
}
}
};
t.context.consultationJson = {
id: 1,
type: 'video_consultation_participants',
created_at: null,
updated_at: null,
relationships: {
video_consultation: {
data: {
id: 1,
type: 'video_consultations'
}
},
participant: {
data: {
id: 33,
type: 'mobile_users'
}
}
}
};
t.context.consultation = new ConsultationParticipant(t.context.consultationJsonApi);
});
/**
* @test {ConsultationParticipant}
*/
test('[unit] ConsultationParticipant should handle consultation data with a normal json format', (t) => {
const { consultationJson } = t.context;
const consultation = new ConsultationParticipant(consultationJson);
t.is(consultation.id, 1);
t.is(consultation.type, 'video_consultation_participants');
});
/**
* @test {ConsultationParticipant}
*/
test('[unit] ConsultationParticipant should handle consultation data with json api format', (t) => {
const { consultationJsonApi } = t.context;
const consultation = new ConsultationParticipant({ data: consultationJsonApi });
t.is(consultation.id, 1);
t.is(consultation.type, 'video_consultation_participants');
});
/**
* @test {ConsultationParticipant}
*/
test('[unit] ConsultationParticipant should generate json api format when converted to string', (t) => {
const { consultationJsonApi } = t.context;
let consultation = new ConsultationParticipant({ data: consultationJsonApi });
let json = consultation.toJSON();
t.deepEqual(json, consultationJsonApi);
consultation = new ConsultationParticipant({ data: consultationJsonApi });
json = consultation.toJSON();
t.deepEqual(json, consultationJsonApi);
});
/**
* @test {ConsultationParticipant.delete}
*/
test('[unit] ConsultationParticipant.delete should successfully delete a cohort assignment', async (t) => {
const { consultation } = t.context;
consultation.id = 5;
let request = {};
nock(client.apiBaseUrl).delete(`/v3/video_consultation_participants/${consultation.id}`).reply(function (uri, requestBody) {
request = this.req;
request.requestBody = requestBody;
return [200, ''];
});
const response = await consultation.delete();
t.is(request.path, `/v3/video_consultation_participants/${consultation.id}`);
t.is(request.headers.accept, 'application/json');
t.is(request.headers['content-type'], 'application/json');
t.is(request.headers.authorization, 'Token token=valid_token');
t.falsy(response);
});
// ConsultationParticipant.save
/**
* @test {ConsultationParticipant.save}
*/
test('[unit] ConsultationParticipant.save should successfully insert a consultation with a consultation object when id does not exist', async (t) => {
const { consultationJsonApi, insertResponse } = t.context;
const json = JSON.parse(JSON.stringify(consultationJsonApi));
delete json.id;
const consultation = new ConsultationParticipant({ data: json });
let request = {};
nock(client.apiBaseUrl).post(`/v3/video_consultation_participants`).reply(function (uri, requestBody) {
request = this.req;
request.requestBody = requestBody;
return [201, insertResponse];
});
const response = await consultation.save();
t.is(request.path, `/v3/video_consultation_participants`);
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, 1);
t.is(response.type, 'video_consultation_participants');
});
/**
* @test {ConsultationParticipant.save}
*/
test('[unit] ConsultationParticipant.save should successfully update a consultation with a consultation object when id exists', async (t) => {
const { consultationJsonApi, updateResponse } = t.context;
const consultation = new ConsultationParticipant({ data: consultationJsonApi });
let request = {};
nock(client.apiBaseUrl).patch(`/v3/video_consultation_participants/${consultation.id}`).reply(function (uri, requestBody) {
request = this.req;
request.requestBody = requestBody;
return [200, updateResponse];
});
const response = await consultation.save();
t.is(request.path, `/v3/video_consultation_participants/${consultation.id}`);
t.is(request.headers.accept, 'application/json');
t.deepEqual(request.requestBody, { data: consultationJsonApi });
t.is(request.headers['content-type'], 'application/json');
t.is(request.headers.authorization, 'Token token=valid_token');
t.is(response.id, 1);
t.is(response.type, 'video_consultation_participants');
});