public void A220_GetByArgs_All_Paging() { using var agentTester = AgentTester.CreateWaf <Startup>(); var r = agentTester.Test <EmployeeAgent, EmployeeBaseCollectionResult>() .ExpectStatusCode(HttpStatusCode.OK) .Run(a => a.GetByArgsAsync(new EmployeeArgs { IsIncludeTerminated = true }, PagingArgs.CreateSkipAndTake(1, 2))); var v = r.Value; Assert.IsNotNull(v); Assert.IsNotNull(v.Result); Assert.AreEqual(2, v.Result.Count); Assert.AreEqual(new string[] { "Jones", "Smith" }, v.Result.Select(x => x.LastName).ToArray()); // Query again with etag and ensure not modified. agentTester.Test <EmployeeAgent, EmployeeBaseCollectionResult>() .ExpectStatusCode(HttpStatusCode.NotModified) .Run(a => a.GetByArgsAsync(new EmployeeArgs { IsIncludeTerminated = true }, PagingArgs.CreateSkipAndTake(1, 2), new WebApiRequestOptions { ETag = r.Response !.Headers !.ETag !.Tag }));
public void A120_Get_Found_WithAddress() { using var agentTester = AgentTester.CreateWaf <Startup>(); agentTester.Test <EmployeeAgent, Employee?>() .ExpectStatusCode(HttpStatusCode.OK) .IgnoreChangeLog() .IgnoreETag() .ExpectValue(_ => new Employee { Id = 4.ToGuid(), Email = "*****@*****.**", FirstName = "Waylon", LastName = "Smithers", Gender = "M", Birthday = new DateTime(1952, 02, 21), StartDate = new DateTime(2001, 01, 22), PhoneNo = "(428) 893 2793", Address = new Address { Street1 = "8365 851 PL NE", City = "Redmond", State = "WA", PostCode = "98052" }, EmergencyContacts = new EmergencyContactCollection { new EmergencyContact { Id = 401.ToGuid(), FirstName = "Michael", LastName = "Manners", PhoneNo = "(234) 297 9834", Relationship = "FRD" } } }) .Run(a => a.GetAsync(4.ToGuid())); }
public void B110_Create() { using var agentTester = AgentTester.CreateWaf <Startup>(); var v = new Person { FirstName = "Jill", LastName = "Smith", Gender = "F", Birthday = new DateTime(1955, 10, 28) }; // Create value. v = agentTester.Test <PersonAgent, Person>() .ExpectStatusCode(HttpStatusCode.Created) .ExpectChangeLogCreated() .ExpectETag() .ExpectUniqueKey() .ExpectValue(_ => v) .ExpectEvent("Company.AppName.Person", "Created") .Run(a => a.CreateAsync(v)).Value !; // Check the value was created properly. agentTester.Test <PersonAgent, Person?>() .ExpectStatusCode(HttpStatusCode.OK) .ExpectValue(_ => v) .Run(a => a.GetAsync(v.Id)); }
public void A120_Update() { using var agentTester = AgentTester.CreateWaf <Startup>(); var r = agentTester.Test <ContactAgent, Contact>() .ExpectStatusCode(HttpStatusCode.OK) .ExpectValue((t) => new Contact { Id = 1.ToGuid(), FirstName = "Jenny", LastName = "Cuthbert" }) .Run(a => a.GetAsync(1.ToGuid())); Assert.NotNull(r.Response.Headers?.ETag?.Tag); var etag = r.Response.Headers?.ETag?.Tag; var v = r.Value; v.LastName += "X"; r = agentTester.Test <ContactAgent, Contact>() .ExpectStatusCode(HttpStatusCode.OK) .ExpectValue((t) => v) .ExpectEvent("Demo.Contact.00000001-0000-0000-0000-000000000000", "Update") .Run(a => a.UpdateAsync(v, 1.ToGuid())); Assert.NotNull(r.Response.Headers?.ETag?.Tag); Assert.AreNotEqual(etag, r.Response.Headers?.ETag?.Tag); }
public void D130_Patch() { using var agentTester = AgentTester.CreateWaf <Startup>(); // Get an existing value. var id = 2.ToGuid(); var v = agentTester.Test <PersonAgent, Person?>() .ExpectStatusCode(HttpStatusCode.OK) .Run(a => a.GetAsync(id)).Value !; // Make some changes to the data. v.LastName = "Smithers"; // Update the value. v = agentTester.Test <PersonAgent, Person>() .ExpectStatusCode(HttpStatusCode.OK) .ExpectChangeLogUpdated() .ExpectETag(v.ETag) .ExpectUniqueKey() .ExpectValue(_ => v) .ExpectEvent($"Company.AppName.Person", "Updated") .Run(a => a.PatchAsync(WebApiPatchOption.MergePatch, $"{{ \"lastName\": \"{v.LastName}\" }}", id, new WebApiRequestOptions { ETag = v.ETag })).Value !; // Check the value was updated properly. agentTester.Test <PersonAgent, Person?>() .ExpectStatusCode(HttpStatusCode.OK) .ExpectValue(_ => v) .Run(a => a.GetAsync(id)); }
public void E110_Delete() { using var agentTester = AgentTester.CreateWaf <Startup>(); var id = 3.ToGuid(); // Get an existing value. agentTester.Test <PerformanceReviewAgent, PerformanceReview?>() .ExpectStatusCode(HttpStatusCode.OK) .Run(a => a.GetAsync(id)); // Delete value. agentTester.Test <PerformanceReviewAgent>() .ExpectStatusCode(HttpStatusCode.NoContent) .ExpectEvent($"my.hr.performancereview", "deleted") .Run(a => a.DeleteAsync(id)); // Check value no longer exists. agentTester.Test <PerformanceReviewAgent, PerformanceReview?>() .ExpectStatusCode(HttpStatusCode.NotFound) .Run(a => a.GetAsync(id)); // Delete again (should still be successful as a Delete is idempotent); note there should be no corresponding event as nothing actually happened. agentTester.Test <PerformanceReviewAgent>() .ExpectStatusCode(HttpStatusCode.NoContent) .Run(a => a.DeleteAsync(id)); }
public void B110_Create() { using var agentTester = AgentTester.CreateWaf <Startup>(); var v = new PerformanceReview { Date = new DateTime(2020, 06, 15, 0, 0, 0, DateTimeKind.Utc), Outcome = "ME", Notes = "Solid performance :-)", Reviewer = "*****@*****.**", }; // Create value. v = agentTester.Test <PerformanceReviewAgent, PerformanceReview>() .ExpectStatusCode(HttpStatusCode.Created) .ExpectChangeLogCreated() .ExpectETag() .ExpectUniqueKey() .ExpectValue(_ => v, "EmployeeId") .ExpectEvent("my.hr.performancereview", "created") .Run(a => a.CreateAsync(v, 3.ToGuid())).Value !; Assert.AreEqual(3.ToGuid(), v.EmployeeId); // Check the value was created properly. agentTester.Test <PerformanceReviewAgent, PerformanceReview?>() .ExpectStatusCode(HttpStatusCode.OK) .ExpectValue(_ => v) .Run(a => a.GetAsync(v.Id)); }
public void C130_Update() { using var agentTester = AgentTester.CreateWaf <Startup>(); // Get an existing value. var id = 3.ToGuid(); var v = agentTester.Test <PerformanceReviewAgent, PerformanceReview?>() .ExpectStatusCode(HttpStatusCode.OK) .Run(a => a.GetAsync(id)).Value !; // Make some changes to the data. v.Notes += "X"; // Update the value. v = agentTester.Test <PerformanceReviewAgent, PerformanceReview>() .ExpectStatusCode(HttpStatusCode.OK) .ExpectChangeLogUpdated() .ExpectETag(v.ETag) .ExpectUniqueKey() .ExpectValue(_ => v) .ExpectEvent($"my.hr.performancereview", "updated") .Run(a => a.UpdateAsync(v, id)).Value !; // Check the value was updated properly. agentTester.Test <PerformanceReviewAgent, PerformanceReview?>() .ExpectStatusCode(HttpStatusCode.OK) .ExpectValue(_ => v) .Run(a => a.GetAsync(id)); }
public void E110_Delete() { using var agentTester = AgentTester.CreateWaf <Startup>(); // Check value exists. var id = 4.ToGuid(); agentTester.Test <PersonAgent, Person?>() .ExpectStatusCode(HttpStatusCode.OK) .Run(a => a.GetAsync(id)); // Delete value. agentTester.Test <PersonAgent>() .ExpectStatusCode(HttpStatusCode.NoContent) .ExpectEvent($"Company.AppName.Person", "Deleted") .Run(a => a.DeleteAsync(id)); // Check value no longer exists. agentTester.Test <PersonAgent, Person?>() .ExpectStatusCode(HttpStatusCode.NotFound) .Run(a => a.GetAsync(id)); // Delete again (should still be successful as a Delete is idempotent); but no event should be raised. agentTester.Test <PersonAgent>() .ExpectStatusCode(HttpStatusCode.NoContent) .Run(a => a.DeleteAsync(id)); }
public void C130_Update() { using var agentTester = AgentTester.CreateWaf <Startup>(); // Get an existing value. var id = 2.ToGuid(); var v = agentTester.Test <PersonAgent, Person?>() .ExpectStatusCode(HttpStatusCode.OK) .Run(a => a.GetAsync(id)).Value !; // Make some changes to the data. v.FirstName += "X"; v.LastName += "Y"; // Update the value. v = agentTester.Test <PersonAgent, Person>() .ExpectStatusCode(HttpStatusCode.OK) .ExpectChangeLogUpdated() .ExpectETag(v.ETag) .ExpectUniqueKey() .ExpectValue(_ => v) .ExpectEvent($"Company.AppName.Person", "Updated") .Run(a => a.UpdateAsync(v, id)).Value !; // Check the value was updated properly. agentTester.Test <PersonAgent, Person?>() .ExpectStatusCode(HttpStatusCode.OK) .ExpectValue(_ => v) .Run(a => a.GetAsync(id)); }
public void A150_GetAll() { using var agentTester = AgentTester.CreateWaf <Startup>(); var r = agentTester.Test <ContactAgent, ContactCollectionResult>() .ExpectStatusCode(HttpStatusCode.OK) .Run(a => a.GetAllAsync()); Assert.NotNull(r.Response.Headers?.ETag?.Tag); var etag = r.Response.Headers?.ETag?.Tag; r = agentTester.Test <ContactAgent, ContactCollectionResult>() .ExpectStatusCode(HttpStatusCode.OK) .Run(a => a.GetAllAsync()); Assert.NotNull(r.Response.Headers?.ETag?.Tag); Assert.AreEqual(etag, r.Response.Headers?.ETag?.Tag); var v = r.Value.Result[0]; v.LastName += "X"; // Update and ensure that the etag has changed as a result. var r2 = agentTester.Test <ContactAgent, Contact>() .ExpectStatusCode(HttpStatusCode.OK) .ExpectValue((t) => v) .Run(a => a.UpdateAsync(v, v.Id)); r = agentTester.Test <ContactAgent, ContactCollectionResult>() .ExpectStatusCode(HttpStatusCode.OK) .Run(a => a.GetAllAsync()); Assert.NotNull(r2.Response.Headers?.ETag?.Tag); Assert.AreNotEqual(etag, r2.Response.Headers?.ETag?.Tag); }
public void A110_Get_NotFound() { using var agentTester = AgentTester.CreateWaf <Startup>(); agentTester.Test <PersonAgent, Person?>() .ExpectStatusCode(HttpStatusCode.NotFound) .Run(a => a.GetAsync(404.ToGuid())); }
public void A120_Get_Deleted() { using var agentTester = AgentTester.CreateWaf <Startup>(); var r = agentTester.Test <ContactAgent, Contact>() .ExpectStatusCode(HttpStatusCode.NotFound) .Run(a => a.GetAsync(2.ToGuid())); }
public void A130_Update_Deleted() { using var agentTester = AgentTester.CreateWaf <Startup>(); var r = agentTester.Test <ContactAgent, Contact>() .ExpectStatusCode(HttpStatusCode.NotFound) .Run(a => a.UpdateAsync(new Contact { Id = 2.ToGuid(), FirstName = "Jenny", LastName = "Cuthbert" }, 2.ToGuid())); }
public void A160_Get_IncludeFields() { using var agentTester = AgentTester.CreateWaf <Startup>(); var r = agentTester.Test <EmployeeAgent, Employee?>() .ExpectStatusCode(HttpStatusCode.OK) .Run(a => a.GetAsync(1.ToGuid(), new WebApiRequestOptions().Include(new string[] { "firstName", "lastName" }))); Assert.NotNull(r); Assert.AreEqual("{\"firstName\":\"Wendy\",\"lastName\":\"Jones\"}", r.Content); }
public void A130_GetNamed() { using var agentTester = AgentTester.CreateWaf <Startup>(); var r = agentTester.Test <ReferenceDataAgent>() .ExpectStatusCode(HttpStatusCode.OK) .Run(a => a.GetNamedAsync(new string[] { "Gender" })); Assert.NotNull(r.Content); Assert.AreEqual(3, JObject.Parse("{ \"content\":" + r.Content + "}")["content"]?.Children().Children().Count()); }
public void A210_GetByEmployeeId_NotFound() { using var agentTester = AgentTester.CreateWaf <Startup>(); var v = agentTester.Test <PerformanceReviewAgent, PerformanceReviewCollectionResult>() .ExpectStatusCode(HttpStatusCode.OK) .Run(a => a.GetByEmployeeIdAsync(4.ToGuid())).Value !; Assert.IsNotNull(v); Assert.IsNotNull(v.Result); Assert.AreEqual(0, v.Result.Count); }
public void A110_GendersAll() { using var agentTester = AgentTester.CreateWaf <Startup>(); var v = agentTester.Test <ReferenceDataAgent, GenderCollection>() .ExpectStatusCode(HttpStatusCode.OK) .Run(a => a.GenderGetAllAsync()).Value; Assert.IsNotNull(v); Assert.AreEqual(3, v.Count); Assert.AreEqual(new string[] { "F", "M", "N" }, v.Select(x => x.Code).ToArray()); }
public void A220_GetByEmployeeId_Last() { using var agentTester = AgentTester.CreateWaf <Startup>(); var v = agentTester.Test <PerformanceReviewAgent, PerformanceReviewCollectionResult>() .ExpectStatusCode(HttpStatusCode.OK) .Run(a => a.GetByEmployeeIdAsync(2.ToGuid(), PagingArgs.CreateSkipAndTake(0, 1))).Value !; Assert.IsNotNull(v); Assert.IsNotNull(v.Result); Assert.AreEqual(1, v.Result.Count); Assert.AreEqual(new string[] { "Work quality low." }, v.Result.Select(x => x.Notes).ToArray()); }
public void A150_Get_IncludeRefDataText() { using var agentTester = AgentTester.CreateWaf <Startup>(); var v = agentTester.Test <EmployeeAgent, Employee?>() .ExpectStatusCode(HttpStatusCode.OK) .Run(a => a.GetAsync(1.ToGuid(), new WebApiRequestOptions { IncludeRefDataText = true })).Value !; Assert.NotNull(v); Assert.AreEqual("Female", v.GenderText); }
public void A210_GetByArgs_All() { using var agentTester = AgentTester.CreateWaf <Startup>(); var v = agentTester.Test <PersonAgent, PersonCollectionResult>() .ExpectStatusCode(HttpStatusCode.OK) .Run(a => a.GetByArgsAsync(null)).Value !; Assert.IsNotNull(v); Assert.IsNotNull(v.Result); Assert.AreEqual(4, v.Result.Count); Assert.AreEqual(new string[] { "Browne", "Jones", "Smith", "Smithers" }, v.Result.Select(x => x.LastName).ToArray()); }
public void A200_RaiseEvent_EventOutboxFailure() { using var agentTester = AgentTester.CreateWaf <Startup>(); var r = agentTester.Test <ContactAgent>() .ExpectStatusCode(HttpStatusCode.InternalServerError) .Run(a => a.RaiseEventAsync(true)); var db = new Beef.Demo.Business.Data.Database(agentTester.WebApplicationFactory.Services.GetService <IConfiguration>()["ConnectionStrings:BeefDemo"]); var count = db.SqlStatement("SELECT COUNT(*) FROM [Demo].[EventOutboxData] WHERE [Subject] = 'Contact' and [Action] = 'Made'").ScalarAsync <int>().GetAwaiter().GetResult(); Assert.AreEqual(0, count); }
public void D110_Patch_NotFound() { using var agentTester = AgentTester.CreateWaf <Startup>(); // Get an existing value. var v = agentTester.Test <PersonAgent, Person?>() .ExpectStatusCode(HttpStatusCode.OK) .Run(a => a.GetAsync(2.ToGuid())).Value !; // Try patching with an invalid identifier. agentTester.Test <PersonAgent, Person>() .ExpectStatusCode(HttpStatusCode.NotFound) .Run(a => a.PatchAsync(WebApiPatchOption.MergePatch, "{ \"lastName\": \"Smithers\" }", 404.ToGuid())); }
public void C110_Update_NotFound() { using var agentTester = AgentTester.CreateWaf <Startup>(); // Get an existing value. var v = agentTester.Test <PersonAgent, Person?>() .ExpectStatusCode(HttpStatusCode.OK) .Run(a => a.GetAsync(2.ToGuid())).Value !; // Try updating with an invalid identifier. agentTester.Test <PersonAgent, Person>() .ExpectStatusCode(HttpStatusCode.NotFound) .Run(a => a.UpdateAsync(v, 404.ToGuid())); }
public void A140_UpdateAndCheckEventOutboxDequeue() { using var agentTester = AgentTester.CreateWaf <Startup>(); var r = agentTester.Test <ContactAgent, Contact>() .ExpectStatusCode(HttpStatusCode.OK) .ExpectValue((t) => new Contact { Id = 1.ToGuid(), FirstName = "Jenny", LastName = "Cuthbert", Status = "P" }) .Run(a => a.GetAsync(1.ToGuid())); Assert.NotNull(r.Response.Headers?.ETag?.Tag); var etag = r.Response.Headers?.ETag?.Tag; var db = new Beef.Demo.Business.Data.Database(agentTester.WebApplicationFactory.Services.GetService <IConfiguration>()["ConnectionStrings:BeefDemo"]); db.SqlStatement("DELETE FROM [Demo].[EventOutbox]").NonQueryAsync().GetAwaiter().GetResult(); var v = r.Value; v.LastName += "X"; r = agentTester.Test <ContactAgent, Contact>() .ExpectStatusCode(HttpStatusCode.OK) .ExpectValue((t) => v) .ExpectEvent("Demo.Contact.00000001-0000-0000-0000-000000000000", "Update") .Run(a => a.UpdateAsync(v, 1.ToGuid())); Assert.NotNull(r.Response.Headers?.ETag?.Tag); Assert.AreNotEqual(etag, r.Response.Headers?.ETag?.Tag); // Make sure the event is sent from the outbox. var count = db.SqlStatement("SELECT COUNT(*) FROM [Demo].[EventOutbox]").ScalarAsync <int>().GetAwaiter().GetResult(); Assert.AreEqual(1, count); for (int i = 0; i < 10; i++) { count = db.SqlStatement("SELECT COUNT(*) FROM [Demo].[EventOutbox] WHERE [DequeuedDate] IS NULL").ScalarAsync <int>().GetAwaiter().GetResult(); if (count == 0) { return; } System.Threading.Thread.Sleep(1000); } Assert.Fail("It would appear that the event was not dequeued by the hosted service."); }
public void A210_GetByArgs_All_Paging() { using var agentTester = AgentTester.CreateWaf <Startup>(); var v = agentTester.Test <EmployeeAgent, EmployeeBaseCollectionResult>() .ExpectStatusCode(HttpStatusCode.OK) .Run(a => a.GetByArgsAsync(new EmployeeArgs { IsIncludeTerminated = true }, PagingArgs.CreateSkipAndTake(1, 2))).Value; Assert.IsNotNull(v); Assert.IsNotNull(v.Result); Assert.AreEqual(2, v.Result.Count); Assert.AreEqual(new string[] { "Jones", "Smith" }, v.Result.Select(x => x.LastName).ToArray()); }
public void A220_GetByArgs_FirstName() { using var agentTester = AgentTester.CreateWaf <Startup>(); var v = agentTester.Test <EmployeeAgent, EmployeeBaseCollectionResult>() .ExpectStatusCode(HttpStatusCode.OK) .Run(a => a.GetByArgsAsync(new EmployeeArgs { FirstName = "*a*" })).Value; Assert.IsNotNull(v); Assert.IsNotNull(v.Result); Assert.AreEqual(2, v.Result.Count); Assert.AreEqual(new string[] { "Browne", "Smithers" }, v.Result.Select(x => x.LastName).ToArray()); }
public void A230_GetByArgs_LastName_IncludeTerminated() { using var agentTester = AgentTester.CreateWaf <Startup>(); var v = agentTester.Test <EmployeeAgent, EmployeeBaseCollectionResult>() .ExpectStatusCode(HttpStatusCode.OK) .Run(a => a.GetByArgsAsync(new EmployeeArgs { LastName = "s*", IsIncludeTerminated = true })).Value; Assert.IsNotNull(v); Assert.IsNotNull(v.Result); Assert.AreEqual(2, v.Result.Count); Assert.AreEqual(new string[] { "Smith", "Smithers" }, v.Result.Select(x => x.LastName).ToArray()); }
public void C130_Update() { using var agentTester = AgentTester.CreateWaf <Startup>(); // Get an existing value. var id = 4.ToGuid(); var v = agentTester.Test <EmployeeAgent, Employee?>() .ExpectStatusCode(HttpStatusCode.OK) .Run(a => a.GetAsync(id)).Value !; // Make some changes to the data. v.FirstName += "X"; v.LastName += "Y"; v.Address !.Street2 = "Street 2"; v.EmergencyContacts ![0].FirstName += "Y";
public void A250_GetByArgs_Empty() { using var agentTester = AgentTester.CreateWaf <Startup>(); var v = agentTester.Test <PersonAgent, PersonCollectionResult>() .ExpectStatusCode(HttpStatusCode.OK) .Run(a => a.GetByArgsAsync(new PersonArgs { LastName = "s*", FirstName = "b*", Genders = new List <string> { "F" } })).Value !; Assert.IsNotNull(v); Assert.IsNotNull(v.Result); Assert.AreEqual(0, v.Result.Count); }