public async Task CreateEpaRecordsExample()
        {
            long     uln               = 1234567890;
            string   firstName         = "Fred";
            string   lastName          = "Blogs";
            int      standardCode      = 1;
            string   standardReference = "ST0127";
            string   epaOutcome        = "Fail";
            DateTime epaDate           = DateTime.UtcNow;

            CreateEpaRequest newEpa = new CreateEpaRequest
            {
                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 (newEpa.IsValid(out _))
            {
                // NOTE: The External API performs validation, however it is a good idea to check beforehand
                await _EpaApiClient.CreateEpaRecords(new List <CreateEpaRequest> {
                    newEpa
                });
            }
        }
        public async Task CreateEpaRecordsExample()
        {
            const string filePath = @"CsvFiles\createEpaRecords.csv";

            IEnumerable <CreateEpaRequest> epaRecordsToCreate;

            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.CreateEpaRequestMap());
                    epaRecordsToCreate = csv.GetRecords <CreateEpaRequest>().ToList();
                }
            }

            // NOTE: The External API performs validation, however it is a good idea to check beforehand.
            bool invalidDataSupplied = epaRecordsToCreate.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.CreateEpaRecords(epaRecordsToCreate)).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 CreateEpaRecord()
        {
            // arrange
            var learner = Builder <Models.Certificates.Learner> .CreateNew().Build();

            var standard = Builder <Models.Certificates.Standard> .CreateNew().Build();

            var epaRecord = Builder <EpaRecord> .CreateNew().With(er => er.EpaOutcome = "Pass").Build();

            var epaDetails = Builder <EpaDetails> .CreateNew().With(ed => ed.Epas = new List <EpaRecord> {
                epaRecord
            }).Build();

            var epaRequest = new CreateEpaRequest
            {
                Learner    = learner,
                Standard   = standard,
                EpaDetails = epaDetails
            };

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

            _MockHttp.When(HttpMethod.Post, $"{apiBaseAddress}/api/v1/epa")
            .Respond(HttpStatusCode.OK, "application/json", JsonConvert.SerializeObject(expectedResponse));

            // act
            var actual = await _ApiClient.CreateEpaRecords(new List <CreateEpaRequest> {
                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));
        }