public void Edit_Post_Test() { var mockRepo = new Mock <DevCmsDb>(); mockRepo.SetupDbSetMock(db => db.Dictionaries, GetDictionaries()); var controller = new DictionariesController(mockRepo.Object); var model = new EditDictionaryDto { Name = "Sex2", Id = 1, AddedOrEditedItem = new EditDictionaryItemDto { Id = 1, Name = "Male2" } }; var result = controller.Edit(model); var viewResult = Assert.IsType <ViewResult>(result); mockRepo.Verify(db => db.SaveChanges(), Times.Once()); Assert.Equal("Sex2", mockRepo.Object.Dictionaries.First().Name); Assert.Equal("Male2", mockRepo.Object.Dictionaries.First().Items.First().Name); var resultModel = Assert.IsAssignableFrom <EditDictionaryDto>( viewResult.ViewData.Model); Assert.Equal("Sex2", resultModel.Name); Assert.Equal("Male2", resultModel.Items.First().Name); }
public void CreateDictionary_Test() { var mockRepo = new Mock <DevCmsDb>(); mockRepo.SetupDbSetMock(db => db.Dictionaries, GetDictionaries()); var model = new EditDictionaryDto { Name = "Test", Items = null }; var controller = new DictionariesController(mockRepo.Object); Assert.Equal(1, mockRepo.Object.Dictionaries.Count()); var result = controller.Index(model); var viewResult = Assert.IsType <ViewResult>(result); var resultModel = Assert.IsAssignableFrom <EditDictionaryDto>( viewResult.ViewData.Model); Assert.Equal("Edit", viewResult.ViewName); mockRepo.Verify(); mockRepo.Verify(db => db.SaveChanges(), Times.Once()); Assert.Equal(2, mockRepo.Object.Dictionaries.Count()); var newDictionary = mockRepo.Object.Dictionaries.Last(); Assert.Equal("Test", newDictionary.Name); Assert.Empty(resultModel.Items); }
public IActionResult Index(EditDictionaryDto model) { if (ModelState.IsValid) { var dictionary = new Dictionary { Name = model.Name }; _db.Dictionaries.Add(dictionary); _db.SaveChanges(); return(View(nameof(Edit), DtoHelper.GeEditDictionaryDto(dictionary))); } return(View(model)); }
public static EditDictionaryDto GeEditDictionaryDto(Dictionary dictionary) { var result = new EditDictionaryDto { Id = dictionary.Id, Name = dictionary.Name, Items = dictionary.Items.Select(i => new EditDictionaryItemDto { Id = i.Id, Name = i.Name }) }; return(result); }
public void Edit_Post_Test_InvalidDictionaryId() { var mockRepo = new Mock <DevCmsDb>(); mockRepo.SetupDbSetMock(db => db.Dictionaries, GetDictionaries()); var controller = new DictionariesController(mockRepo.Object); var model = new EditDictionaryDto { Name = "mmm", Id = 11, }; var result = controller.Edit(model); Assert.IsType <NotFoundResult>(result); }
public IActionResult Edit(EditDictionaryDto model) { // this mess exists because I wanted to have the only one endpoint to edit/create the attributes // and to edit the name of the content type // I can avoid it by using some RequireId attribute or by creating some another action like // CreateAttr /EditAttr, but I decided to use this approach if (IsAdditionNewDictionaryItem(model)) { ModelState["Name"].Errors.Clear(); var dictionary = _db.Dictionaries .Include(d => d.Items) .FirstOrDefault(t => t.Id == model.Id); if (dictionary == null) { return(NotFound()); } dictionary.Items.Add(new DictionaryItem { Name = model.AddedOrEditedItem.Name }); _db.SaveChanges(); ModelState.Clear(); model = DtoHelper.GeEditDictionaryDto(dictionary); } else if (ModelState.IsValid) { var dictionary = _db.Dictionaries .Include(d => d.Items) .FirstOrDefault(t => t.Id == model.Id); if (dictionary == null) { return(NotFound()); } dictionary.Name = model.Name; if (model.AddedOrEditedItem != null && model.AddedOrEditedItem.Id.HasValue) { var editedItem = dictionary.Items.First(at => at.Id == model.AddedOrEditedItem.Id); editedItem.Name = model.AddedOrEditedItem.Name; } _db.SaveChanges(); ModelState.Clear(); model = DtoHelper.GeEditDictionaryDto(dictionary); } return(View(model)); }
public void Edit_Post_Test_InvalidItemId() { var mockRepo = new Mock <DevCmsDb>(); mockRepo.SetupDbSetMock(db => db.Dictionaries, GetDictionaries()); var controller = new DictionariesController(mockRepo.Object); var model = new EditDictionaryDto { Name = "mmm", Id = 1, AddedOrEditedItem = new EditDictionaryItemDto { Id = 11, Name = "Item mmm" } }; Assert.Throws <InvalidOperationException>(() => controller.Edit(model)); mockRepo.Verify(db => db.SaveChanges(), Times.Never); }
public void Edit_Post_Test_AddItem_DictionaryNotFound() { var mockRepo = new Mock <DevCmsDb>(); mockRepo.SetupDbSetMock(db => db.Dictionaries, GetDictionaries()); var controller = new DictionariesController(mockRepo.Object); var model = new EditDictionaryDto { Id = 11, AddedOrEditedItem = new EditDictionaryItemDto//todo: not exist { Name = "Third" } }; controller.ModelState.AddModelError("Name", "Required"); var result = controller.Edit(model); Assert.IsType <NotFoundResult>(result); }
public void CreateDictionary_Test_InvalidModel() { var mockRepo = new Mock <DevCmsDb>(); mockRepo.SetupDbSetMock(db => db.Dictionaries, GetDictionaries()); var model = new EditDictionaryDto(); var controller = new DictionariesController(mockRepo.Object); controller.ModelState.AddModelError("Name", "Required"); Assert.Equal(1, mockRepo.Object.Dictionaries.Count()); var result = controller.Index(model); var viewResult = Assert.IsType <ViewResult>(result); var resultModel = Assert.IsAssignableFrom <EditDictionaryDto>(viewResult.ViewData.Model); mockRepo.Verify(); mockRepo.Verify(db => db.SaveChanges(), Times.Never); Assert.Equal(1, mockRepo.Object.Dictionaries.Count()); Assert.Null(resultModel.Name); }
public void Edit_Post_Test_AddItem() { var mockRepo = new Mock <DevCmsDb>(); mockRepo.SetupDbSetMock(db => db.Dictionaries, GetDictionaries()); var controller = new DictionariesController(mockRepo.Object); var model = new EditDictionaryDto { Id = 1, AddedOrEditedItem = new EditDictionaryItemDto { Name = "Unknown", } }; controller.ModelState.AddModelError("Name", "Required"); Assert.Single(controller.ModelState); Assert.Equal(2, mockRepo.Object.Dictionaries.First().Items.Count); var result = controller.Edit(model); var viewResult = Assert.IsType <ViewResult>(result); var resultModel = Assert.IsAssignableFrom <EditDictionaryDto>( viewResult.ViewData.Model); mockRepo.Verify(db => db.SaveChanges(), Times.Once); Assert.Empty(controller.ModelState); Assert.Equal(3, mockRepo.Object.Dictionaries.First().Items.Count); Assert.Equal(3, resultModel.Items.Count()); var items = mockRepo.Object.Dictionaries.First().Items.Where(a => a.Name == "Unknown"); Assert.Single(items); }
public void Edit_Post_Test_InvalidModelState() { var mockRepo = new Mock <DevCmsDb>(); mockRepo.SetupDbSetMock(db => db.Dictionaries, GetDictionaries()); var controller = new DictionariesController(mockRepo.Object); var model = new EditDictionaryDto { Id = 1, AddedOrEditedItem = new EditDictionaryItemDto { Id = 1, Name = "Item mmm" } }; controller.ModelState.AddModelError("Name", "Required"); controller.Edit(model); mockRepo.Verify(db => db.SaveChanges(), Times.Never); Assert.Equal("Sex", mockRepo.Object.Dictionaries.First().Name); Assert.Equal("Male", mockRepo.Object.Dictionaries.First().Items.First().Name); }
private bool IsAdditionNewDictionaryItem(EditDictionaryDto model) { var result = model.AddedOrEditedItem != null && !model.AddedOrEditedItem.Id.HasValue; return(result); }