Example #1
0
        private async void ReturnNoPatientFoundErrorWhenVerifiedIdentifierIs(IEnumerable <Identifier> identifiers)
        {
            var patientDiscovery = new PatientDiscovery(
                matchingRepository.Object,
                discoveryRequestRepository.Object,
                linkPatientRepository.Object,
                patientRepository.Object,
                logger.Object);
            var consentManagerUserId = Faker().Random.String();
            var expectedError        = new ErrorRepresentation(new Error(ErrorCode.NoPatientFound, "No patient found"));
            var patientRequest       = new PatientEnquiry(consentManagerUserId,
                                                          identifiers,
                                                          new List <Identifier>(),
                                                          null,
                                                          HipLibrary.Patient.Model.Gender.M,
                                                          2019);
            var discoveryRequest = new DiscoveryRequest(patientRequest, Faker().Random.String(), RandomString(),
                                                        DateTime.Now);

            linkPatientRepository.Setup(e => e.GetLinkedCareContexts(consentManagerUserId))
            .ReturnsAsync(new Tuple <IEnumerable <LinkedAccounts>, Exception>(new List <LinkedAccounts>(), null));

            var(discoveryResponse, error) = await patientDiscovery.PatientFor(discoveryRequest);

            discoveryResponse.Should().BeNull();
            error.Should().BeEquivalentTo(expectedError);
        }
Example #2
0
        private async void ShouldGetMultiplePatientsFoundErrorWhenSameUnverifiedIdentifiersAlsoMatch()
        {
            var patientDiscovery = new PatientDiscovery(
                matchingRepository.Object,
                discoveryRequestRepository.Object,
                linkPatientRepository.Object,
                patientRepository.Object,
                logger.Object);
            var expectedError =
                new ErrorRepresentation(new Error(ErrorCode.MultiplePatientsFound, "Multiple patients found"));
            var          patientReferenceNumber = Faker().Random.String();
            var          consentManagerUserId   = Faker().Random.String();
            const ushort yearOfBirth            = 2019;
            var          gender = Faker().PickRandom <HipLibrary.Patient.Model.Gender>();
            var          name   = Faker().Name.FullName();
            var          verifiedIdentifiers   = new[] { new Identifier(IdentifierType.MOBILE, Faker().Phone.PhoneNumber()) };
            var          unverifiedIdentifiers = new[] { new Identifier(IdentifierType.MR, patientReferenceNumber) };
            var          patientRequest        = new PatientEnquiry(consentManagerUserId,
                                                                    verifiedIdentifiers,
                                                                    unverifiedIdentifiers,
                                                                    name,
                                                                    gender,
                                                                    yearOfBirth);
            var discoveryRequest = new DiscoveryRequest(patientRequest, Faker().Random.String(), RandomString(),
                                                        DateTime.Now);

            linkPatientRepository.Setup(e => e.GetLinkedCareContexts(consentManagerUserId))
            .ReturnsAsync(new Tuple <IEnumerable <LinkedAccounts>, Exception>(new List <LinkedAccounts>(), null));

            matchingRepository
            .Setup(repo => repo.Where(discoveryRequest))
            .Returns(Task.FromResult(new List <HipLibrary.Patient.Model.Patient>
            {
                new HipLibrary.Patient.Model.Patient
                {
                    Identifier  = patientReferenceNumber,
                    YearOfBirth = yearOfBirth,
                    Gender      = gender,
                    Name        = name
                },
                new HipLibrary.Patient.Model.Patient
                {
                    Identifier  = patientReferenceNumber,
                    YearOfBirth = yearOfBirth,
                    Gender      = gender,
                    Name        = name
                }
            }.AsQueryable()));

            var(discoveryResponse, error) = await patientDiscovery.PatientFor(discoveryRequest);

            discoveryResponse.Should().BeNull();
            error.Should().BeEquivalentTo(expectedError);
        }
 public PatientEnquiryResponse UnregisteredPatientEnquiry(PatientEnquiry enquiry)
 {
     try
     {
         return(this._consultationDA.UnregisteredPatientEnquiry(enquiry));
     }
     catch (Exception ex)
     {
         throw;
     }
     finally
     {
         //Log
     }
 }
        private async void PatientRepositoryWhereQuery_ReturnsAnHIPPatientWithSearchedNameInstedOfFoundName_WhenPatientFoundInOpenMrs()
        {
            const string patientSearchedName = "patient name";
            Gender?      patientGender       = Gender.F;

            ushort?patientYob     = 1981;
            var    patientEnquiry =
                new PatientEnquiry(
                    "id", verifiedIdentifiers: null, unverifiedIdentifiers: null,
                    patientSearchedName, patientGender, patientYob);
            var request = new DiscoveryRequest(patientEnquiry, "requestId", "transactionId", DateTime.Now);
            var repo    = new OpenMrsPatientMatchingRepository(patientDal.Object);

            var patient = repo.Where(request).Result.Single();

            patient.Name.Should().Be(patientSearchedName);
        }
        private async void PatientRepositoryWhereQuery_InvokesPatientDalWithExpectedParameters()
        {
            const string  patientName   = "patient name";
            Gender?       patientGender = Gender.F;
            OpenMrsGender?openMrsGender = OpenMrsGender.Female;

            ushort?patientYob     = 1981;
            var    patientEnquiry =
                new PatientEnquiry(
                    "id", verifiedIdentifiers: null, unverifiedIdentifiers: null,
                    patientName, patientGender, patientYob);
            var request = new DiscoveryRequest(patientEnquiry, "requestId", "transactionId", DateTime.Now);
            var repo    = new OpenMrsPatientMatchingRepository(patientDal.Object);

            var result = repo.Where(request);

            patientDal.Verify(x => x.LoadPatientsAsync(patientName, openMrsGender, patientYob.ToString()), Times.Once);
        }
        public async Task <ActionResult> UnRegPatientEnquiry(PatientEnquiry enquiry)
        {
            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri(ConfigurationManager.AppSettings["BaseUrl"]);
                client.DefaultRequestHeaders.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                var json                = JsonConvert.SerializeObject(enquiry);
                var content             = new StringContent(json, Encoding.UTF8, "application/json");
                HttpResponseMessage Res = await client.PostAsync("api/ConsultationAPI/GetUnregisteredPatientEnquiry", content);

                if (Res.IsSuccessStatusCode)
                {
                    var objPatientEnquiryResponse = JsonConvert.DeserializeObject <PatientEnquiryResponse>(Res.Content.ReadAsStringAsync().Result);
                    return(View("PatientEnquiryResponse", objPatientEnquiryResponse));
                }
            }
            return(View("PatientEnquiryResponse"));
        }
Example #7
0
        private async void ShouldReturnPatientForAlreadyLinkedPatient()
        {
            var patientDiscovery = new PatientDiscovery(
                matchingRepository.Object,
                discoveryRequestRepository.Object,
                linkPatientRepository.Object,
                patientRepository.Object,
                logger.Object);
            var phoneNumber           = Faker().Phone.PhoneNumber();
            var verifiedIdentifiers   = new[] { new Identifier(IdentifierType.MOBILE, phoneNumber) };
            var unverifiedIdentifiers = new[] { new Identifier(IdentifierType.MR, Faker().Random.String()) };
            var patientId             = Faker().Random.String();
            var name          = Faker().Name.FullName();
            var alreadyLinked =
                new CareContextRepresentation(Faker().Random.Uuid().ToString(), Faker().Random.String());
            var unlinkedCareContext =
                new CareContextRepresentation(Faker().Random.Uuid().ToString(), Faker().Random.String());
            var expectedPatient = new PatientEnquiryRepresentation(
                patientId,
                name,
                new[] { unlinkedCareContext },
                new[] { Match.ConsentManagerUserId.ToString() });
            var transactionId  = Faker().Random.String();
            var patientRequest = new PatientEnquiry(patientId,
                                                    verifiedIdentifiers,
                                                    unverifiedIdentifiers,
                                                    name,
                                                    HipLibrary.Patient.Model.Gender.M,
                                                    2019);
            var discoveryRequest  = new DiscoveryRequest(patientRequest, RandomString(), transactionId, DateTime.Now);
            var sessionId         = Faker().Random.Hash();
            var linkedCareContext = new[] { alreadyLinked.ReferenceNumber };
            var testLinkAccounts  = new LinkedAccounts(patientId,
                                                       sessionId,
                                                       Faker().Random.Hash(),
                                                       It.IsAny <string>(),
                                                       linkedCareContext.ToList());
            var testPatient =
                new HipLibrary.Patient.Model.Patient
            {
                PhoneNumber  = phoneNumber,
                Identifier   = patientId,
                Gender       = Faker().PickRandom <HipLibrary.Patient.Model.Gender>(),
                Name         = name,
                CareContexts = new[]
                {
                    alreadyLinked,
                    unlinkedCareContext
                }
            };

            linkPatientRepository.Setup(e => e.GetLinkedCareContexts(patientId))
            .ReturnsAsync(new Tuple <IEnumerable <LinkedAccounts>, Exception>(
                              new List <LinkedAccounts> {
                testLinkAccounts
            },
                              null));
            patientRepository.Setup(x => x.PatientWith(testPatient.Identifier))
            .Returns(Option.Some(testPatient));

            var(discoveryResponse, error) = await patientDiscovery.PatientFor(discoveryRequest);

            discoveryResponse.Patient.Should().BeEquivalentTo(expectedPatient);
            discoveryRequestRepository.Verify(
                x => x.Add(It.Is <HipService.Discovery.Model.DiscoveryRequest>(
                               r => r.TransactionId == transactionId && r.ConsentManagerUserId == patientId)),
                Times.Once);
            error.Should().BeNull();
        }
Example #8
0
        private async void ShouldReturnAPatientWhenUnverifiedIdentifierIsNull()
        {
            var patientDiscovery = new PatientDiscovery(
                matchingRepository.Object,
                discoveryRequestRepository.Object,
                linkPatientRepository.Object,
                patientRepository.Object,
                logger.Object);
            var          referenceNumber      = Faker().Random.String();
            var          consentManagerUserId = Faker().Random.String();
            var          transactionId        = Faker().Random.String();
            var          name        = Faker().Name.FullName();
            const ushort yearOfBirth = 2019;
            var          phoneNumber = Faker().Phone.PhoneNumber();
            var          careContextRepresentations = new[]
            {
                new CareContextRepresentation(Faker().Random.String(), Faker().Random.String()),
                new CareContextRepresentation(Faker().Random.String(), Faker().Random.String())
            };
            var expectedPatient = new PatientEnquiryRepresentation(
                referenceNumber,
                name,
                careContextRepresentations,
                new List <string>
            {
                Match.Mobile.ToString(),
                Match.Name.ToString(),
                Match.Gender.ToString()
            });
            var verifiedIdentifiers = new[] { new Identifier(IdentifierType.MOBILE, phoneNumber) };
            var patientRequest      = new PatientEnquiry(consentManagerUserId,
                                                         verifiedIdentifiers,
                                                         null,
                                                         name,
                                                         HipLibrary.Patient.Model.Gender.M,
                                                         yearOfBirth);
            var discoveryRequest = new DiscoveryRequest(patientRequest, RandomString(), transactionId, DateTime.Now);

            linkPatientRepository.Setup(e => e.GetLinkedCareContexts(consentManagerUserId))
            .ReturnsAsync(new Tuple <IEnumerable <LinkedAccounts>, Exception>(new List <LinkedAccounts>(), null));
            matchingRepository
            .Setup(repo => repo.Where(discoveryRequest))
            .Returns(Task.FromResult(new List <HipLibrary.Patient.Model.Patient>
            {
                new HipLibrary.Patient.Model.Patient
                {
                    Gender       = HipLibrary.Patient.Model.Gender.M,
                    Identifier   = referenceNumber,
                    Name         = name,
                    CareContexts = careContextRepresentations,
                    PhoneNumber  = phoneNumber,
                    YearOfBirth  = yearOfBirth
                }
            }.AsQueryable()));

            var(discoveryResponse, error) = await patientDiscovery.PatientFor(discoveryRequest);

            discoveryResponse.Patient.Should().BeEquivalentTo(expectedPatient);
            discoveryRequestRepository.Verify(
                x => x.Add(It.Is <HipService.Discovery.Model.DiscoveryRequest>(
                               r => r.TransactionId == transactionId && r.ConsentManagerUserId == consentManagerUserId)),
                Times.Once);
            error.Should().BeNull();
        }