public async Task When_UpdatingEpaRecord_CallsInternalApi_Then_ReturnEpaResponseWithResponseCode200( [Frozen] Mock <IHeaderInfo> headerInfo, [Frozen] Mock <IApiClient> apiClient, UpdateEpaRequest request, IEnumerable <UpdateEpaResponse> response, EpaController sut) { //Arrange apiClient.Setup(client => client.UpdateEpas(It.Is <IEnumerable <UpdateBatchEpaRequest> >(s => s.First().UkPrn == headerInfo.Object.Ukprn && s.First().EpaReference == request.EpaReference && s.First().RequestId == request.RequestId && s.First().Learner == request.Learner && s.First().LearningDetails == request.LearningDetails && s.First().Standard == request.Standard && s.First().EpaDetails == request.EpaDetails))).ReturnsAsync(response); //Act var result = await sut.UpdateEpaRecords(new List <UpdateEpaRequest> { request }) as ObjectResult; //Assert result.StatusCode.Should().Be((int)HttpStatusCode.OK); var model = result.Value as IEnumerable <UpdateEpaResponse>; model.Should().BeEquivalentTo(response); }
public async Task UpdateEpaRecord_CertificateExists() { // arrange var learner = Builder <Models.Certificates.Learner> .CreateNew().Build(); var standard = Builder <Models.Certificates.Standard> .CreateNew().Build(); var epaRecord1 = Builder <EpaRecord> .CreateNew().With(er => er.EpaOutcome = "Fail").With(er => er.EpaDate = DateTime.Now.AddDays(-2)).Build(); var epaRecord2 = Builder <EpaRecord> .CreateNew().With(er => er.EpaOutcome = "Pass").With(er => er.EpaDate = DateTime.Now).Build(); var epaDetails = Builder <EpaDetails> .CreateNew().With(ed => ed.Epas = new List <EpaRecord> { epaRecord1, epaRecord2 }).Build(); var epaRequest = new UpdateEpaRequest { EpaReference = "CERTIFICATE EXISTS", Learner = learner, Standard = standard, EpaDetails = epaDetails }; var expectedValidationErrors = new List <string> { "Certificate already exists, cannot update EPA record" }; var expectedResponse = new List <UpdateEpaResponse> { new UpdateEpaResponse { EpaReference = null, ValidationErrors = expectedValidationErrors } }; _MockHttp.When(HttpMethod.Put, $"{apiBaseAddress}/api/v1/epa") .Respond(HttpStatusCode.OK, "application/json", JsonConvert.SerializeObject(expectedResponse)); // act var actual = await _ApiClient.UpdateEpaRecords(new List <UpdateEpaRequest> { epaRequest }); // assert Assert.That(actual, Has.Count.EqualTo(1)); Assert.That(actual.First().ValidationErrors, Is.EqualTo(expectedResponse.First().ValidationErrors)); Assert.That(actual.First().EpaReference, Is.Null); }
public async Task When_UpdatingEpaRecord_WithTooManyRequestsInBatch_CallsInternalApi_Then_ReturnApiResponseWithResponseCode403( UpdateEpaRequest request, EpaController sut) { //Arrange var requests = new List <UpdateEpaRequest>(); for (var i = 0; i < 26; i++) { requests.Add(request); } //Act var result = await sut.UpdateEpaRecords(requests) as ObjectResult; //Assert result.StatusCode.Should().Be((int)HttpStatusCode.Forbidden); ((ApiResponse)result.Value).Message.Should().Be("Batch limited to 25 requests"); }
public async Task UpdateEpaRecordsExample() { // NOTE: You will need to know the Epa Reference string epaReference = "1234567890"; long uln = 1234567890; string firstName = "Fred"; string lastName = "Blogs"; int standardCode = 1; string standardReference = "ST0127"; string epaOutcome = "Pass"; DateTime epaDate = DateTime.UtcNow; // Let's pretend the apprentice has now passed their EPA UpdateEpaRequest updatedEpa = new UpdateEpaRequest { EpaReference = epaReference, Learner = new Learner { Uln = uln, GivenNames = firstName, FamilyName = lastName }, Standard = new Standard { StandardCode = standardCode, StandardReference = standardReference }, EpaDetails = new EpaDetails { Epas = new List <EpaRecord> { new EpaRecord { EpaOutcome = epaOutcome, EpaDate = epaDate } } } }; if (updatedEpa.IsValid(out _)) { // NOTE: The External API performs validation, however it is a good idea to check beforehand await _EpaApiClient.UpdateEpaRecords(new List <UpdateEpaRequest> { updatedEpa }); } }