public void Get_AddTownShouldReturnAddTownForm()
        {
            //Arrange
            var controller = new AdminTownsController(this.townService.Object);

            //Act
            var result = controller.Add();

            //Assert
            result.Should().BeOfType <ViewResult>();
        }
        public void Post_AddTownShouldRedirectToAllTownsWithCorrectData()
        {
            //Arrange
            var controller = new AdminTownsController(this.townService.Object);

            this.townService.Setup(t => t.TownExistsByName(It.IsAny <string>()))
            .Returns(false);

            this.PrepareTempData();

            controller.TempData = this.tempData.Object;

            //Act
            var result = controller.Add(this.GetAddTownForm());

            //Assert
            result.Should().BeOfType <RedirectToActionResult>();
            this.customMessage.Should().Be(string.Format(WebConstants.Message.TownAdded, TownName));
        }
        public void Post_AddTownShouldReturnAddTownFormForInvalidModelState()
        {
            //Arrange
            var controller = new AdminTownsController(this.townService.Object);

            controller.ModelState.AddModelError(string.Empty, "Error");

            //Act
            var result = controller.Add(this.GetAddTownForm());

            //Assert
            result.Should().BeOfType <ViewResult>();
            var model = result.As <ViewResult>().Model;

            model.Should().BeOfType <AddTownFormModel>();
            var form = model.As <AddTownFormModel>();

            form.Name.Should().Be(TownName);
        }
        public void Post_AddTownShouldReturnAddTownFormForAlreadyExistingTown()
        {
            //Arrange
            var controller = new AdminTownsController(this.townService.Object);

            this.townService.Setup(t => t.TownExistsByName(It.IsAny <string>()))
            .Returns(true);

            //Act
            var result = controller.Add(this.GetAddTownForm());

            //Assert
            result.Should().BeOfType <ViewResult>();
            var errors = controller.ModelState.Root.Errors;

            errors.Any(e => e.ErrorMessage == string.Format(WebConstants.Message.EntityAlreadyExist, nameof(WebConstants.Entity.Town)));
            var model = result.As <ViewResult>().Model;

            model.Should().BeOfType <AddTownFormModel>();
            var form = model.As <AddTownFormModel>();

            form.Name.Should().Be(TownName);
        }