public async Task <Tuple <LinkEnquires, Exception> > SaveRequestWith(
            string linkReferenceNumber,
            string consentManagerId,
            string consentManagerUserId,
            string patientReferenceNumber,
            IEnumerable <string> careContextReferenceNumbers)
        {
            var dateTimeStamp      = DateTime.Now.ToUniversalTime().ToString(Constants.DateTimeFormat);
            var linkedCareContexts = careContextReferenceNumbers
                                     .Select(referenceNumber => new CareContext(referenceNumber)).ToList();
            var linkRequest = new LinkEnquires(
                patientReferenceNumber,
                linkReferenceNumber,
                consentManagerId,
                consentManagerUserId,
                dateTimeStamp,
                linkedCareContexts);

            try
            {
                await linkPatientContext.LinkEnquires.AddAsync(linkRequest).ConfigureAwait(false);

                await linkPatientContext.SaveChangesAsync().ConfigureAwait(false);

                return(new Tuple <LinkEnquires, Exception>(linkRequest, null));
            }
            catch (Exception exception)
            {
                Log.Fatal(exception, exception.StackTrace);
                return(new Tuple <LinkEnquires, Exception>(null, exception));
            }
        }
Example #2
0
        private async void ThrowErrorOnSaveOfSamePrimaryKeyLinkEnquires()
        {
            var faker = TestBuilders.Faker();
            var linkReferenceNumber   = faker.Random.Hash();
            var dbContext             = PatientContext();
            var linkPatientRepository = new LinkPatientRepository(dbContext);
            var linkedCareContext     = new List <CareContext> {
                new CareContext(faker.Random.Word())
            };
            var linkRequest = new LinkEnquires(faker.Random.Hash(),
                                               linkReferenceNumber,
                                               faker.Random.Hash(),
                                               faker.Random.Hash(),
                                               faker.Random.Hash(),
                                               linkedCareContext);
            await linkPatientRepository.SaveRequestWith(
                linkRequest.LinkReferenceNumber,
                linkRequest.ConsentManagerId,
                linkRequest.ConsentManagerUserId,
                linkRequest.PatientReferenceNumber,
                new[] { faker.Random.Word() });

            var(_, error) = await linkPatientRepository.SaveRequestWith(
                linkRequest.LinkReferenceNumber,
                linkRequest.ConsentManagerId,
                linkRequest.ConsentManagerUserId,
                linkRequest.PatientReferenceNumber,
                new[] { faker.Random.Word() });

            error.Should().NotBeNull();
            dbContext.Database.EnsureDeleted();
        }
Example #3
0
        private async Task <bool> SaveLinkedAccounts(LinkEnquires linkEnquires)
        {
            var linkedAccount = await linkPatientRepository.Save(
                linkEnquires.ConsentManagerUserId,
                linkEnquires.PatientReferenceNumber,
                linkEnquires.LinkReferenceNumber,
                linkEnquires.CareContexts.Select(context => context.CareContextNumber).ToList())
                                .ConfigureAwait(false);

            return(linkedAccount.HasValue);
        }
        private async void SuccessLinkPatientForValidOtp()
        {
            const string programRefNo                   = "129";
            var          sessionId                      = TestBuilders.Faker().Random.Hash();
            var          otpToken                       = TestBuilders.Faker().Random.Number().ToString();
            var          patientLinkRequest             = new LinkConfirmationRequest(otpToken, sessionId);
            ICollection <CareContext> linkedCareContext = new[] { new CareContext(programRefNo) };
            var testLinkRequest = new LinkEnquires(testPatient.Identifier, sessionId,
                                                   TestBuilders.Faker().Random.Hash(), TestBuilders.Faker().Random.Hash()
                                                   , It.IsAny <string>(), linkedCareContext);
            var testLinkedAccounts = new LinkedAccounts(testLinkRequest.PatientReferenceNumber,
                                                        testLinkRequest.LinkReferenceNumber,
                                                        testLinkRequest.ConsentManagerUserId, It.IsAny <string>(), new[] { programRefNo }.ToList());

            patientVerification.Setup(e => e.Verify(sessionId, otpToken))
            .ReturnsAsync((OtpMessage)null);
            linkRepository.Setup(e => e.GetPatientFor(sessionId))
            .ReturnsAsync(new Tuple <LinkEnquires, Exception>(testLinkRequest, null));
            patientRepository.Setup(x => x.PatientWithAsync(testPatient.Identifier))
            .ReturnsAsync(Option.Some(testPatient));
            linkRepository.Setup(x => x.Save(testLinkRequest.ConsentManagerUserId,
                                             testLinkRequest.PatientReferenceNumber,
                                             testLinkRequest.LinkReferenceNumber,
                                             new[] { programRefNo }))
            .ReturnsAsync(Option.Some(testLinkedAccounts));
            var expectedLinkResponse = new PatientLinkConfirmationRepresentation(
                new LinkConfirmationRepresentation(
                    testPatient.Identifier,
                    $"{testPatient.Name}",
                    new[] { new CareContextRepresentation("129", "National Cancer program") }));

            var(response, cmId, _) = await linkPatient.VerifyAndLinkCareContext(patientLinkRequest);

            patientVerification.Verify();
            linkRepository.Verify();
            guidGenerator.Verify();
            response.Patient.ReferenceNumber.Should().BeEquivalentTo(expectedLinkResponse.Patient.ReferenceNumber);
            response.Patient.Display.Should().BeEquivalentTo(expectedLinkResponse.Patient.Display);
        }
        private async void ReturnOtpExpired()
        {
            var sessionId          = TestBuilders.Faker().Random.Hash();
            var otpToken           = TestBuilders.Faker().Random.Number().ToString();
            var dateTimeStamp      = DateTime.Now.ToUniversalTime().ToString(Constants.DateTimeFormat);
            var testOtpMessage     = new OtpMessage(ResponseType.OtpExpired, "Otp Expired");
            var patientLinkRequest = new LinkConfirmationRequest(otpToken, sessionId);
            var linkEnquires       = new LinkEnquires("", "", "ncg", "",
                                                      dateTimeStamp, new List <CareContext>());
            var expectedErrorResponse =
                new ErrorRepresentation(new Error(ErrorCode.OtpExpired, testOtpMessage.Message));

            linkRepository.Setup(e => e.GetPatientFor(sessionId))
            .ReturnsAsync(new Tuple <LinkEnquires, Exception>(linkEnquires, null));
            patientVerification.Setup(e => e.Verify(sessionId, otpToken))
            .ReturnsAsync(testOtpMessage);

            var(_, cmId, error) = await linkPatient.VerifyAndLinkCareContext(patientLinkRequest);

            patientVerification.Verify();
            error.Should().BeEquivalentTo(expectedErrorResponse);
        }