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)); } }
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(); }
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); }