public void CreatePost_WithExistingJournalName_ShouldReturnView()
        {
            // Arrange
            Mock <IJournalService> journalService = new Mock <IJournalService>();

            journalService
            .Setup(s => s.Exists(It.IsAny <string>()))
            .Returns(true);

            Mock <ITempDataDictionary> tempData = new Mock <ITempDataDictionary>();

            string errorMessage = null;

            tempData
            .SetupSet(t => t[WebConstants.TempDataErrorMessage]    = It.IsAny <string>())
            .Callback((string key, object message) => errorMessage = message as string);

            JournalFormServiceModel formModel          = this.GetJournalFormModel();
            JournalsController      journalsController = new JournalsController(journalService.Object);

            journalsController.TempData = tempData.Object;

            // Act
            IActionResult result = journalsController.Create(formModel);

            // Assert
            Assert.IsType <ViewResult>(result);
            object model = (result as ViewResult).Model;

            Assert.IsType <JournalFormServiceModel>(model);
            JournalFormServiceModel returnModel = model as JournalFormServiceModel;

            this.AssertJournals(formModel, returnModel);
            Assert.Equal(string.Format(WebConstants.EntryExists, Journal), errorMessage);
        }
        public void CreatePost_WithNotSuccessfullyCreatedJournal_ShouldReturnBadRequest()
        {
            // Arrange
            Mock <IJournalService> journalService = new Mock <IJournalService>();

            journalService
            .Setup(s => s.Exists(It.IsAny <string>()))
            .Returns(false);

            journalService
            .Setup(s => s.Create(
                       It.IsAny <string>(),
                       It.IsAny <string>(),
                       It.IsAny <string>()))
            .Returns(-1);

            JournalFormServiceModel formModel          = this.GetJournalFormModel();
            JournalsController      journalsController = new JournalsController(journalService.Object);

            journalsController.TempData = Mock.Of <ITempDataDictionary>();

            // Act
            IActionResult result = journalsController.Create(formModel);

            // Assert
            Assert.IsType <BadRequestResult>(result);
        }
        public void CreateGet_ShouldReturnView()
        {
            // Arrange
            JournalsController journalsController = new JournalsController(null);

            // Act
            IActionResult result = journalsController.Create();

            // Assert
            Assert.IsType <ViewResult>(result);
        }
        public void CreatePost_WithSuccessfullyCreatedJournal_ShouldReturnRedirectResult()
        {
            // Arrange
            Mock <IJournalService> journalService = new Mock <IJournalService>();

            const int journalId = 1;

            journalService
            .Setup(s => s.Exists(It.IsAny <string>()))
            .Returns(false);

            journalService
            .Setup(s => s.Create(
                       It.IsAny <string>(),
                       It.IsAny <string>(),
                       It.IsAny <string>()))
            .Returns(journalId);

            Mock <ITempDataDictionary> tempData = new Mock <ITempDataDictionary>();

            string successmessage = null;

            tempData
            .SetupSet(t => t[WebConstants.TempDataSuccessMessage]    = It.IsAny <string>())
            .Callback((string key, object message) => successmessage = message as string);

            JournalFormServiceModel formModel          = this.GetJournalFormModel();
            JournalsController      journalsController = new JournalsController(journalService.Object);

            journalsController.TempData = tempData.Object;

            // Act
            IActionResult result = journalsController.Create(formModel);

            // Assert
            Assert.IsType <RedirectToActionResult>(result);
            RedirectToActionResult redirectResult = result as RedirectToActionResult;

            this.AssertRedirect(journalId, redirectResult);
            Assert.Equal(string.Format(WebConstants.SuccessfullEntityOperation, Journal, WebConstants.Added), successmessage);
        }