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