Example #1
0
        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);
        }
Example #3
0
        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
                });
            }
        }