public async Task TestCase_DeleteWithNonExistID() { var context = fixture.GetCurrentDataContext(); ExerciseItemsController control = new ExerciseItemsController(context); var deleterst = control.Delete(999); Assert.NotNull(deleterst); Assert.IsType <NotFoundResult>(deleterst.Result); await context.DisposeAsync(); }
public async Task TestCase_CRUD() { var context = fixture.GetCurrentDataContext(); ExerciseItemsController control = new ExerciseItemsController(context); var userclaim = DataSetupUtility.GetClaimForUser(DataSetupUtility.UserA); control.ControllerContext = new ControllerContext() { HttpContext = new DefaultHttpContext() { User = userclaim } }; // Step 1. Read all var rsts = control.Get(); var rstscnt = await rsts.CountAsync(); var existcnt = context.ExerciseItems.Count(); Assert.Equal(existcnt, rstscnt); // Step 2. Create one know ledge item var ki = new ExerciseItem() { ExerciseType = ExerciseItemType.Question, Content = "New Test 1 Content", }; ki.Answer = new ExerciseItemAnswer { Content = "New Answer" }; ki.Tags.Add(new ExerciseTag() { TagTerm = DataSetupUtility.Tag1, }); var rst = await control.Post(ki); Assert.NotNull(rst); var rst2 = Assert.IsType <CreatedODataResult <ExerciseItem> >(rst); Assert.Equal(rst2.Entity.Content, ki.Content); var firstid = rst2.Entity.ID; Assert.True(firstid > 0); objectsCreated.Add(firstid); // Check the answer var answerctrl = new ExerciseItemAnswersController(context); var answergetrst = answerctrl.Get(firstid); Assert.NotNull(answergetrst); var answergetrstresult = Assert.IsType <SingleResult <ExerciseItemAnswer> >(answergetrst); var answerobj = answergetrstresult.Queryable.ToList().ElementAtOrDefault(0); Assert.Equal(ki.Answer.Content, answerobj.Content); // Check the tag var exertagctrl = new ExerciseTagsController(context); var exertaggetrst = exertagctrl.Get(); Assert.NotNull(exertaggetrst); var exertagobj = exertaggetrst.ToList().Find(p => p.RefID == firstid); Assert.NotNull(exertagobj); Assert.Equal(DataSetupUtility.Tag1, exertagobj.TagTerm); // Step 3. Read all - 1 rsts = control.Get(); rstscnt = await rsts.CountAsync(); Assert.Equal(existcnt + 1, rstscnt); // Step 3a. Read single var singlerst = control.Get(firstid); var singleresult = Assert.IsType <SingleResult <ExerciseItem> >(singlerst); var readitem = singleresult.Queryable.ToList().ElementAtOrDefault(0); Assert.NotNull(readitem); Assert.Equal(firstid, readitem.ID); Assert.Equal(ki.ExerciseType, readitem.ExerciseType); 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 <ExerciseTag>(); } readitem.Tags.Add(new ExerciseTag { RefID = firstid, TagTerm = DataSetupUtility.Tag2 }); 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.ExerciseItems.Where(p => p.ID == firstid).ToList <ExerciseItem>(); Assert.NotEmpty(dbkis); Assert.Equal(readitem.Content, dbkis[0].Content); // Check content only! var dbtags = context.ExerciseTags.Where(p => p.RefID == firstid).ToList <ExerciseTag>(); Assert.NotEmpty(dbtags); Assert.Equal(2, dbtags.Count); Assert.True(dbtags.Find(p => p.TagTerm == DataSetupUtility.Tag1) != null); Assert.True(dbtags.Find(p => p.TagTerm == DataSetupUtility.Tag2) != null); // Step 4a. Change the tags again readitem.Tags.Clear(); readitem.Tags.Add(new ExerciseTag { RefID = firstid, TagTerm = DataSetupUtility.Tag2 }); rstPut = await control.Put(firstid, readitem); Assert.NotNull(rstPut); // Due to the fact that updated result is empty // Check the result in database directly dbtags = context.ExerciseTags.Where(p => p.RefID == firstid).ToList <ExerciseTag>(); Assert.NotEmpty(dbtags); Assert.Single(dbtags); Assert.True(dbtags.Find(p => p.TagTerm == DataSetupUtility.Tag1) == null); Assert.True(dbtags.Find(p => p.TagTerm == DataSetupUtility.Tag2) != null); var tagviewcontrol = new ExerciseItemWithTagViewsController(context); var tagviewgetrst = tagviewcontrol.Get(); Assert.NotNull(tagviewgetrst); // Step 5. Change the object via PATCH var delta = new Delta <ExerciseItem>(); delta.UpdatableProperties.Clear(); delta.UpdatableProperties.Add("Content"); readitem.Content += "Changed for PATCH"; delta.TrySetPropertyValue("Content", readitem.Content); var patchrst = control.Patch(firstid, delta); dbkis = context.ExerciseItems.Where(p => p.ID == firstid).ToList <ExerciseItem>(); Assert.NotEmpty(dbkis); Assert.Equal(readitem.Content, dbkis[0].Content); // Check content only! // Step 6. Delete the object var delrst = control.Delete(firstid); Assert.NotNull(delrst); dbkis = context.ExerciseItems.Where(p => p.ID == firstid).ToList <ExerciseItem>(); Assert.Empty(dbkis); await context.DisposeAsync(); }