public async Task TestCase2() { var context = this.fixture.GetCurrentDataContext(); KnowledgeItemsController control = new KnowledgeItemsController(context); var dbkis = context.KnowledgeItems.ToList <KnowledgeItem>(); if (dbkis.Count <= 0) { var ki = new KnowledgeItem() { Category = KnowledgeItemCategory.Concept, Title = "Test 1", Content = "Test 1 Content", }; var rst = await control.Post(ki); Assert.NotNull(rst); var rst2 = Assert.IsType <CreatedODataResult <KnowledgeItem> >(rst); Assert.Equal(rst2.Entity.Title, ki.Title); Assert.Equal(rst2.Entity.Content, ki.Content); var firstid = rst2.Entity.ID; Assert.True(firstid > 0); objectsCreated.Add(firstid); } // Step 1. Read it again via OData way var httpContext = new DefaultHttpContext(); // or mock a `HttpContext` httpContext.Request.Path = "/api/KnowledgeItems"; httpContext.Request.QueryString = new QueryString("?$select=ID,Title"); httpContext.Request.Method = "GET"; var routeData = new RouteData(); routeData.Values.Add("odataPath", "KnowledgeItems"); routeData.Values.Add("action", "GET"); // Controller needs a controller context var controllerContext = new ControllerContext() { RouteData = routeData, HttpContext = httpContext, }; // Assign context to controller control = new KnowledgeItemsController(context) { ControllerContext = controllerContext, }; var rstOdata = control.Get(); Assert.NotNull(rstOdata); var rstOdata2 = (from dt in rstOdata select dt).ToList(); await context.DisposeAsync(); }
public async Task TestCase_CRUD() { var context = fixture.GetCurrentDataContext(); KnowledgeItemsController control = new KnowledgeItemsController(context); var userclaim = DataSetupUtility.GetClaimForUser(DataSetupUtility.UserA); control.ControllerContext = new ControllerContext() { HttpContext = new DefaultHttpContext() { User = userclaim } }; // Step 1. Read all - 0 var rsts = control.Get(); var rstscnt = await rsts.CountAsync(); var existcnt = context.KnowledgeItems.Count(); Assert.Equal(existcnt, rstscnt); // Step 2. Create one know ledge item var ki = new KnowledgeItem() { Category = KnowledgeItemCategory.Concept, Title = "New Test 1", Content = "New Test 1 Content", }; var rst = await control.Post(ki); Assert.NotNull(rst); var rst2 = Assert.IsType <CreatedODataResult <KnowledgeItem> >(rst); Assert.Equal(rst2.Entity.Title, ki.Title); Assert.Equal(rst2.Entity.Content, ki.Content); var firstid = rst2.Entity.ID; Assert.True(firstid > 0); objectsCreated.Add(firstid); // Step 3. Read all - 1 rsts = control.Get(); rstscnt = await rsts.CountAsync(); Assert.Equal(existcnt + 1, rstscnt); // Step 3a. Read single var getrst = control.Get(firstid); Assert.NotNull(getrst); var getrstresult = Assert.IsType <SingleResult <KnowledgeItem> >(getrst); var readitem = getrstresult.Queryable.ToList().ElementAtOrDefault(0); Assert.NotNull(readitem); Assert.Equal(firstid, readitem.ID); Assert.Equal(ki.Category, readitem.Category); Assert.Equal(ki.Title, readitem.Title); Assert.Equal(ki.Content, readitem.Content); // Step 4. Change the exist one by Put readitem.Content += "Updated by PUT"; if (readitem.Tags == null) { readitem.Tags = new List <KnowledgeTag>(); } readitem.Tags.Add(new KnowledgeTag { RefID = firstid, TagTerm = DataSetupUtility.Tag1 }); var rstPut = await control.Put(firstid, readitem); Assert.NotNull(rstPut); // Due to the fact that updated result is empty // Check the result in database directly var dbkis = context.KnowledgeItems.Where(p => p.ID == firstid).ToList <KnowledgeItem>(); Assert.NotEmpty(dbkis); Assert.Equal(readitem.Content, dbkis[0].Content); // Check content only! // Check the tags view var tagcontrol = new KnowledgeTagsController(context); var tagsread = tagcontrol.Get(); Assert.NotNull(tagsread); var tagsreadresult = tagsread.ToList(); var findtag = tagsreadresult.Find(p => p.RefID == firstid && p.TagTerm == DataSetupUtility.Tag1); Assert.NotNull(findtag); // Step 5. PATCH . var delta = new Delta <KnowledgeItem>(); delta.UpdatableProperties.Clear(); delta.UpdatableProperties.Add("Content"); readitem.Content += "Changed for PATCH"; delta.TrySetPropertyValue("Content", readitem.Content); var patchresult = await control.Patch(firstid, delta); Assert.NotNull(patchresult); dbkis = context.KnowledgeItems.Where(p => p.ID == firstid).ToList <KnowledgeItem>(); Assert.NotEmpty(dbkis); Assert.Equal(readitem.Content, dbkis[0].Content); // Check content only! // Step 5. Delete rst = await control.Delete(firstid); Assert.NotNull(rst); this.objectsCreated.Remove(firstid); rsts = control.Get(); rstscnt = await rsts.CountAsync(); Assert.Equal(existcnt, rstscnt); await context.DisposeAsync(); }
public async Task TestCase1() { var context = this.fixture.GetCurrentDataContext(); KnowledgeItemsController control = new KnowledgeItemsController(context); // Step 1. Read all - 0 var rsts = control.Get(); var rstscnt = await rsts.CountAsync(); Assert.Equal(0, rstscnt); // Step 2. Create one know ledge item var ki = new KnowledgeItem() { Category = KnowledgeItemCategory.Concept, Title = "Test 1", Content = "Test 1 Content", }; var rst = await control.Post(ki); Assert.NotNull(rst); var rst2 = Assert.IsType <CreatedODataResult <KnowledgeItem> >(rst); Assert.Equal(rst2.Entity.Title, ki.Title); Assert.Equal(rst2.Entity.Content, ki.Content); var firstid = rst2.Entity.ID; Assert.True(firstid > 0); objectsCreated.Add(firstid); // Step 3. Read all - 1 rsts = control.Get(); rstscnt = await rsts.CountAsync(); Assert.Equal(1, rstscnt); // Step 4. Change the exist one by Put rst2.Entity.Content += "Updated by PUT"; var rstPut = await control.Put(firstid, rst2.Entity); Assert.NotNull(rstPut); // Due to the fact that updated result is empty // Check the result in database directly var dbkis = context.KnowledgeItems.Where(p => p.ID == firstid).ToList <KnowledgeItem>(); Assert.NotEmpty(dbkis); Assert.Equal(rst2.Entity.Content, dbkis[0].Content); // Check content only! // PATCH test. // How to initialize the Delta // Step 5. Delete rst = await control.Delete(firstid); Assert.NotNull(rst); rsts = control.Get(); rstscnt = await rsts.CountAsync(); Assert.Equal(0, rstscnt); //// Step 9. Read it again via OData way //var httpContext = new DefaultHttpContext(); // or mock a `HttpContext` //httpContext.Request.Path = "/api/KnowledgeItems"; //httpContext.Request.QueryString = new QueryString("?$select=ID, Title"); //httpContext.Request.Method = "GET"; //var routeData = new RouteData(); //routeData.Values.Add("odataPath", "KnowledgeItems"); //routeData.Values.Add("action", "GET"); //// Controller needs a controller context //var controllerContext = new ControllerContext() //{ // RouteData = routeData, // HttpContext = httpContext, //}; //// Assign context to controller //control = new KnowledgeItemsController(context) //{ // ControllerContext = controllerContext, //}; //rsts = control.Get(); //Assert.NotNull(rsts); await context.DisposeAsync(); }