public async Task UpdateEpaRecord()
        {
            // 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 = "1234567890",
                Learner      = learner,
                Standard     = standard,
                EpaDetails   = epaDetails
            };

            var expectedResponse = new List <UpdateEpaResponse>
            {
                new UpdateEpaResponse {
                    EpaReference = "1234567890"
                }
            };

            _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, Has.Count.EqualTo(0));
            Assert.That(actual.First().EpaReference, Is.EqualTo(expectedResponse.First().EpaReference));
        }
        public async Task UpdateEpaRecordsExample()
        {
            const string filePath = @"CsvFiles\updateEpaRecords.csv";

            IEnumerable <UpdateEpaRequest> epaRecordsToUpdate;

            using (TextReader textReader = File.OpenText(filePath))
            {
                using (CsvReader csv = new CsvReader(textReader))
                {
                    csv.Configuration.HeaderValidated   = null;
                    csv.Configuration.MissingFieldFound = null;
                    csv.Configuration.RegisterClassMap(new CsvClassMaps.UpdateEpaRequestMap());
                    epaRecordsToUpdate = csv.GetRecords <UpdateEpaRequest>().ToList();
                }
            }

            // Let's pretend the first and last apprentices have now passed their EPA
            epaRecordsToUpdate.First().EpaDetails.Epas.First().EpaOutcome = "Pass";
            epaRecordsToUpdate.First().EpaDetails.Epas.First().EpaDate = DateTime.UtcNow;
            epaRecordsToUpdate.Last().EpaDetails.Epas.First().EpaOutcome = "Pass";
            epaRecordsToUpdate.Last().EpaDetails.Epas.First().EpaDate = DateTime.UtcNow;

            // NOTE: The External API performs validation, however it is a good idea to check beforehand.
            bool invalidDataSupplied = epaRecordsToUpdate.Any(c => !c.IsValid(out _));

            if (invalidDataSupplied)
            {
                throw new InvalidOperationException("The supplied CSV file contains invalid data. Please correct and then try again.");
            }
            else
            {
                var response = (await _EpaApiClient.UpdateEpaRecords(epaRecordsToUpdate)).ToList();

                // NOTE: You may want to deal with good & bad records separately
                var goodEpaRecords = response.Where(c => c.EpaReference != null && !c.ValidationErrors.Any());
                var badEpaRecords  = response.Except(goodEpaRecords);

                Console.WriteLine($"Good Certificates: {goodEpaRecords.Count()}, Bad Certificates: {badEpaRecords.Count()} ");
            }
        }
        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
                });
            }
        }