public void PostEditNonExistingVisitTest()
        {
            //Arrange
            var model = new VisitViewModel {
                Id = 12,
                Caption = null,
                VisitDate = new DateTime(2012, 1, 24),
                VisitTime = new DateTime(2012, 1, 24, 10, 10, 10),
                ExpectedVisitDate = new DateTime(2012, 1, 25)
            };

            //here we return "visit before editing" - this data should be overwritten from model
            repository.Setup(r => r.GetByKey(It.IsAny<int>())).Returns((Visit) null);

            //as checking of saved visit is quite complicated, we will save the passed object and inspect it later
            Visit savedVisit = null;
            repository.Setup(r => r.Edit(It.IsAny<Visit>())).Callback<Visit>(v => savedVisit = v);

            //Act
            var result = controller.EditVisit(model);

            //Assert
            Assert.That(result, Is.Not.Null);
            Assert.That(result is ViewResultBase);
            var viewResultBase = result as ViewResultBase;
            Assert.That(viewResultBase.Model, Is.Not.Null);
            Assert.That(viewResultBase.ViewName, Is.EqualTo("ErrorInfo"));
            Assert.That(viewResultBase.Model is ErrorViewModel);
            var errorModel = viewResultBase.Model as ErrorViewModel;
            Assert.That(errorModel.Caption, Is.EqualTo("Visit is not found"));
        }
        private ActionResult ViewEditVisit(bool? isVisitEditing, Visit visit)
        {
            if (visit == null) {
                var errorModel = new ErrorViewModel {
                    Caption = "Visit is not found",
                    ErrorMessage = string.Format("Visit is not found in clinical data")
                };
                return View("ErrorInfo", errorModel);
            }

            var model = new VisitViewModel {
                Id = visit.Id,
                Caption = visit.Caption,
                VisitType = visit.VisitType,
                ExpectedVisitDate = visit.ExpectedVisitDate,
                VisitDate = visit.VisitDate,
                VisitTime = visit.VisitTime,
                OrderNo = visit.OrderNo,
                NoExpectedVisitDate = visit.VisitType == VisitType.AdverseEventVisit
            };

            if (visit.IsCompleted && !(isVisitEditing ?? false))
                return PartialView("_ViewVisit", model);
            return PartialView("_EditVisit", model);
        }
        public void PostEditExistingVisitTest()
        {
            //Arrange
            EmulateControllerContext(controller, false);

            var model = new VisitViewModel {
                Id = 12,
                Caption = "TestVisit",
                VisitDate = new DateTime(2012, 1, 24),
                VisitTime = new DateTime(2012, 1, 24, 10, 10, 10),
                ExpectedVisitDate = new DateTime(2012, 1, 25)
            };

            //here we return "visit before editing" - this data should be overwritten from model
            repository.Setup(r => r.GetByKey(It.IsAny<int>())).Returns(
                new Visit() {
                    Id = 12,
                    Caption = "TestVisit",
                    VisitDate = new DateTime(2012, 1, 04),
                    VisitTime = new DateTime(2012, 1, 04, 10, 10, 10),
                    ExpectedVisitDate = new DateTime(2012, 1, 05),
                    Patient = new Patient {PatientNumber = 12}
                }
                );
            //as checking of saved visit is quite complicated, we will save the passed object and inspect it later
            Visit savedVisit = null;
            repository.Setup(r => r.Edit(It.IsAny<Visit>())).Callback<Visit>(v => savedVisit = v);

            //Act
            var result = controller.EditVisit(model);

            //Assert
            Assert.That(result, Is.Not.Null);
            Assert.That(result is RedirectToRouteResult);

            repository.Verify(r => r.GetByKey(model.Id), Times.Once());
            repository.Verify(r => r.Edit(It.IsAny<Visit>()), Times.Once());
            repository.Verify(r => r.Save(), Times.Once());
            Assert.That(savedVisit, Is.Not.Null);
            Assert.That(savedVisit.Caption, Is.EqualTo("TestVisit"));
            Assert.That(savedVisit.VisitDate, Is.EqualTo(new DateTime(2012, 1, 24)));
            Assert.That(savedVisit.VisitTime, Is.EqualTo(new DateTime(2012, 1, 24, 10, 10, 10)));
            Assert.That(savedVisit.ExpectedVisitDate, Is.EqualTo(new DateTime(2012, 1, 25)));
        }