Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
 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));
 }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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));
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
        private bool IsAdditionNewDictionaryItem(EditDictionaryDto model)
        {
            var result = model.AddedOrEditedItem != null && !model.AddedOrEditedItem.Id.HasValue;

            return(result);
        }