using System; using Xunit; using Newtonsoft.Json.Linq; using FluentAssertions; namespace raven_integration { public class WidgetCrud { /// /// Test all CRUD routes for a widget /// [Fact] public async void CRUD() { /* { "id": 0, "name": "string", "dollarAmount": 0, "active": true, "roles": 0 } */ //CREATE dynamic w1 = new JObject(); w1.name = Util.Uniquify("First Test WIDGET"); w1.dollarAmount = 1.11m; w1.active = true; w1.usertype = 1; w1.notes = "The quick brown fox jumped over the six lazy dogs!"; w1.customFields = Util.WidgetRequiredCustomFieldsJsonString(); //Tags dynamic dTagsArray = new JArray(); dTagsArray.Add("Red Tag"); dTagsArray.Add("ORANGE IS THE NEW BLACK"); dTagsArray.Add("yellow"); dTagsArray.Add("green"); dTagsArray.Add("blue"); dTagsArray.Add("indigo"); dTagsArray.Add("VIOLET Tag"); w1.tags = dTagsArray; ApiResponse r1 = await Util.PostAsync("widget", await Util.GetTokenAsync("superuser", "l3tm3in"), w1.ToString()); Util.ValidateDataReturnResponseOk(r1); long w1Id = r1.ObjectResponse["data"]["id"].Value(); ((long)r1.ObjectResponse["data"]["serial"]).Should().NotBe(0); dynamic w2 = new JObject(); w2.name = Util.Uniquify("Second Test WIDGET"); w2.dollarAmount = 2.22m; w2.active = true; w2.usertype = 1; w2.notes = "What is the frequency Kenneth?"; w2.tags = dTagsArray; w2.customFields = Util.WidgetRequiredCustomFieldsJsonString(); ApiResponse r2 = await Util.PostAsync("widget", await Util.GetTokenAsync("superuser", "l3tm3in"), w2.ToString()); Util.ValidateDataReturnResponseOk(r2); long w2Id = r2.ObjectResponse["data"]["id"].Value(); //RETRIEVE //Get one ApiResponse r3 = await Util.GetAsync("widget/" + w2Id.ToString(), await Util.GetTokenAsync("superuser", "l3tm3in")); Util.ValidateDataReturnResponseOk(r3); r3.ObjectResponse["data"]["name"].Value().Should().Be(w2.name.ToString()); r3.ObjectResponse["data"]["notes"].Value().Should().Be(w2.notes.ToString()); var returnedTags = ((JArray)r3.ObjectResponse["data"]["tags"]); returnedTags.Count.Should().Be(7); //UPDATE //PUT //update w2id w2.name = Util.Uniquify("UPDATED VIA PUT SECOND TEST WIDGET"); w2.id = w2Id; w2.serial = 123456L; w2.concurrency = r2.ObjectResponse["data"]["concurrency"].Value(); ApiResponse PUTTestResponse = await Util.PutAsync("widget", await Util.GetTokenAsync("superuser", "l3tm3in"), w2.ToString()); Util.ValidateHTTPStatusCode(PUTTestResponse, 200); //check PUT worked ApiResponse checkPUTWorked = await Util.GetAsync("widget/" + w2Id.ToString(), await Util.GetTokenAsync("superuser", "l3tm3in")); Util.ValidateNoErrorInResponse(checkPUTWorked); checkPUTWorked.ObjectResponse["data"]["name"].Value().Should().Be(w2.name.ToString()); checkPUTWorked.ObjectResponse["data"]["serial"].Value().Should().Be(123456L); uint concurrency = PUTTestResponse.ObjectResponse["data"]["concurrency"].Value(); //DELETE ApiResponse DELETETestResponse = await Util.DeleteAsync("widget/" + w2Id.ToString(), await Util.GetTokenAsync("superuser", "l3tm3in")); Util.ValidateHTTPStatusCode(DELETETestResponse, 204); } /// /// Test not found /// [Fact] public async void GetNonExistentItemShouldError() { //Get non existant //Should return status code 404, api error code 2010 ApiResponse a = await Util.GetAsync("widget/999999", await Util.GetTokenAsync("superuser", "l3tm3in")); Util.ValidateResponseNotFound(a); } /// /// Test bad modelstate /// [Fact] public async void GetBadModelStateShouldError() { //Get non existant //Should return status code 400, api error code 2200 and a first target in details of "id" ApiResponse a = await Util.GetAsync("widget/2q2", await Util.GetTokenAsync("superuser", "l3tm3in")); Util.ValidateBadModelStateResponse(a, "id"); } /// /// Test server exception /// [Fact] public async void ServerExceptionShouldErrorPropertly() { //Get non existant //Should return status code 400, api error code 2200 and a first target in details of "id" ApiResponse a = await Util.GetAsync("widget/exception", await Util.GetTokenAsync("superuser", "l3tm3in")); Util.ValidateServerExceptionResponse(a); } /// /// Test server alt exception /// [Fact] public async void ServerAltExceptionShouldErrorPropertly() { //Get non existant //Should return status code 400, api error code 2200 and a first target in details of "id" ApiResponse a = await Util.GetAsync("widget/altexception", await Util.GetTokenAsync("superuser", "l3tm3in")); Util.ValidateServerExceptionResponse(a); } /// /// /// [Fact] public async void PutConcurrencyViolationShouldFail() { //CREATE dynamic w2 = new JObject(); w2.name = Util.Uniquify("PutConcurrencyViolationShouldFail"); w2.dollarAmount = 2.22m; w2.active = true; w2.usertype = 1; w2.notes = "blah"; w2.customFields = Util.WidgetRequiredCustomFieldsJsonString(); ApiResponse r2 = await Util.PostAsync("widget", await Util.GetTokenAsync("superuser", "l3tm3in"), w2.ToString()); Util.ValidateDataReturnResponseOk(r2); uint OriginalConcurrencyToken = r2.ObjectResponse["data"]["concurrency"].Value(); w2 = r2.ObjectResponse["data"]; //UPDATE //PUT w2.name = Util.Uniquify("PutConcurrencyViolationShouldFail UPDATE VIA PUT "); w2.concurrency = OriginalConcurrencyToken - 1;//bad token ApiResponse PUTTestResponse = await Util.PutAsync("widget/", await Util.GetTokenAsync("superuser", "l3tm3in"), w2.ToString()); Util.ValidateConcurrencyError(PUTTestResponse); } //================================================== }//eoc }//eons