Manual Reference Source Test

src/services/ConsultationService.js

import JsonApiService from './JsonApiService';
import Consultation from '../helpers/consult/Consultation';
import ConsultationParticipant from '../helpers/consult/ConsultationParticipant';
import { toJsonApiStub } from '../utilities/ClassUtility';
import {
  hasAttribute,
  hasToken,
  isRequired,
  isValid,
  validate,
} from '../utilities/ValidationUtility';

/**
 * Service handling Consultation calls with specific endpoints.
 */
class ConsultationService extends JsonApiService {
  /**
   * Call a POST request on the main obj.type expecting JSON API information.
   *
   * @param  {Consultation}             consultation        - Consultation to join
   * @param  {ConsultationParticipant}  participant         - Participant joining
   * @param  {String}                   [options]           - Modify the nature of the call and response
   * @param  {String}                   [options.url]       - Override the url for this call
   * @param  {String}                   [options.cacheMode] - Override the caching method for this call
   * @param  {Object}                   [options.meta]      - Pass and retrieve through reference meta data
   * @return {Promise}                                      - Promise with object
   *
   * @example
   * import { consultationService, Consultation, ConsultationParticipant } from 'clinical6';
   * const consultation = new Consultation({ ... });
   * const participant = new ConsultationParticipant({ ... });
   *
   * // You can update an awarded badge using the `updateAwardedBadge` method
   * const meta = {};
   * consultationService.join(consultation, participant, { meta });
   *
   * // You should use instead `consultation.join()`
   * consultation.join();  // join using the logged in user
   * // or
   * consultation.join(participant);
   */
  async join(consultation, participant, options = {}) {
    validate('ConsultationService.join',
      hasToken(),
      isRequired({ consultation, participant }),
      hasAttribute({ consultation, participant }, 'id'),
      isValid((!consultation || consultation instanceof Consultation), 'consultation is not a type of Consultation'),
      isValid((!participant || participant instanceof ConsultationParticipant), 'participant is not a type of ConsultationParticipant'));

    options.url = '/v3/video_consultation_join';

    const data = {
      type: 'video_consultation_join',
      attributes: {},
      relationships: {
        video_consultation: { data: toJsonApiStub(consultation) },
        video_consultation_participant: { data: toJsonApiStub(participant) }
      }
    };

    return super.insert(data, options);
  }
}

export default ConsultationService;