public void VitalsViewModelToFormData_FullData()
        {
            //Arrange
            var vViewModel = new VitalsFormViewModel {
                Id = 2,
                ActualTime = new DateTime(2011, 11, 12, 11, 12, 13),
                Height = 178,
                Weight = 91,
                Temperature = 37.6m,
                HeartRate = 67,
                BloodPressureSystolic = "125",
                BloodPressureDiastolic = "75"
            };
            var vFormData = CreateEmptyVitalsFormData();

            //Act
            formController.MapVitalsViewModelToFormData(vViewModel, vFormData);

            //Assert
            Assert.That(vFormData.ActualTime.Value,
                        Is.EqualTo(new DateTime(2011, 11, 12, 11, 12, 13).ToString(CultureInfo.InvariantCulture)));
            Assert.That(vFormData.Height.Value, Is.EqualTo("178"));
            Assert.That(vFormData.Weight.Value, Is.EqualTo("91"));
            Assert.That(vFormData.Temperature.Value, Is.EqualTo(37.6m.ToString(CultureInfo.InvariantCulture)));
            Assert.That(vFormData.HeartRate.Value, Is.EqualTo("67"));
            Assert.That(vFormData.BloodPressureSystolic.Value, Is.EqualTo("125"));
            Assert.That(vFormData.BloodPressureDiastolic.Value, Is.EqualTo("75"));
        }
            public void PostEditVitalsFormData_NonExistingForm_Test()
            {
                //Arrange
                var model = new VitalsFormViewModel {
                    Id = 12,
                    FormId = 13,
                    ActualTime = new DateTime(2012, 10, 11, 15, 16, 17),
                    Height = 171,
                    Weight = 51,
                    HeartRate = 21,
                    Temperature = 31,
                    BloodPressureSystolic = "121",
                    BloodPressureDiastolic = "71"
                };
                fRep.Setup(r => r.GetByKey(13)).Returns((Form) null);

                //Act
                var result = formController.EditVitalsForm(model);

                //Assert
                CheckErrorInfoViewResult(result);
            }
            public void PostEditVitalsFormData_ChangedValues_IncompleteForm_Test()
            {
                //Arrange
                EmulateControllerContext(formController, false);
                var form = new Form {
                    Id = 13,
                    FormState = FormState.Incomplete,
                    Caption = "TestForm",
                    Visit = new Visit { Caption = "TestVisit", Patient = new Patient { PatientNumber = 123 } }
                };

                var formData = new VitalsFormData {
                    Id = 12,
                    Form = form,
                    ActualTime = new Question() { Id = 100, Value = new DateTime(2011, 10, 11, 12, 13, 14).ToString(CultureInfo.InvariantCulture) },
                    Height = new Question() { Id = 101, Value = "170" },
                    Weight = new Question() { Id = 102, Value = "50" },
                    HeartRate = new Question() { Id = 103, Value = "20" },
                    Temperature = new Question() { Id = 104, Value = "30" },
                    BloodPressureSystolic = new Question() { Id = 105, Value = "120" },
                    BloodPressureDiastolic = new Question() { Id = 106, Value = "70" }
                };
                var incomingModel = new VitalsFormViewModel {
                    Id = 12,
                    FormId = 13,
                    ActualTime = new DateTime(2012, 10, 11, 15, 16, 17),
                    Height = 171,
                    Weight = 51,
                    HeartRate = 21,
                    Temperature = 31,
                    BloodPressureSystolic = "121",
                    BloodPressureDiastolic = "71"
                };

                fRep.Setup(r => r.GetByKey(incomingModel.FormId)).Returns(form);

                //here we return "formdata before editing" - this data should be overwritten from model
                vfdRep.Setup(r => r.GetByKey(incomingModel.Id)).Returns(formData);

                //as checking of saved formdata is quite complicated, we will save the passed object and inspect it later
                VitalsFormData savedFormData = null;
                vfdRep.Setup(r => r.Edit(It.IsAny<VitalsFormData>())).Callback<VitalsFormData>(fd => savedFormData = fd);

                Form savedForm = null;
                fRep.Setup(r => r.Edit(It.IsAny<Form>())).Callback<Form>(f => savedForm = f);

                //Act
                var result = formController.EditVitalsForm(incomingModel);

                //Assert
                CheckEditFormDataRedirectRouteValues(result, form);

                vfdRep.Verify(r => r.GetByKey(incomingModel.Id), Times.Once());
                vfdRep.Verify(r => r.Edit(It.IsAny<VitalsFormData>()), Times.Once());
                vfdRep.Verify(r => r.Save(), Times.Once());

                fRep.Verify(r => r.GetByKey(incomingModel.FormId), Times.Once());
                fRep.Verify(r => r.Edit(It.IsAny<Form>()), Times.Once());
                fRep.Verify(r => r.Save(), Times.Once());

                Assert.That(savedFormData, Is.Not.Null);
                Assert.That(savedFormData.Id, Is.EqualTo(incomingModel.Id));
                Assert.That(savedFormData.ActualTime.Value,
                            Is.EqualTo(new DateTime(2012, 10, 11, 15, 16, 17).ToString(CultureInfo.InvariantCulture)));
                Assert.That(savedFormData.Height.Value, Is.EqualTo("171"));
                Assert.That(savedFormData.Weight.Value, Is.EqualTo("51"));
                Assert.That(savedFormData.HeartRate.Value, Is.EqualTo("21"));
                Assert.That(savedFormData.Temperature.Value, Is.EqualTo("31"));
                Assert.That(savedFormData.BloodPressureSystolic.Value, Is.EqualTo("121"));
                Assert.That(savedFormData.BloodPressureDiastolic.Value, Is.EqualTo("71"));

                Assert.That(savedForm, Is.Not.Null);
                Assert.That(savedForm.Id, Is.EqualTo(incomingModel.FormId));
                Assert.That(savedForm.FormState, Is.EqualTo(FormState.Completed));
            }
            public void PostEditVitalsFormData_NonExistingFormData_Test()
            {
                //Arrange
                var form = new Form {
                    Id = 13,
                    FormState = FormState.Incomplete
                };
                var model = new VitalsFormViewModel {
                    Id = 12,
                    FormId = 13,
                    ActualTime = new DateTime(2012, 10, 11, 15, 16, 17),
                    Height = 171,
                    Weight = 51,
                    HeartRate = 21,
                    Temperature = 31,
                    BloodPressureSystolic = "121",
                    BloodPressureDiastolic = "71"
                };
                fRep.Setup(r => r.GetByKey(13)).Returns(form);

                //here we return "formdata before editing" - this data should be overwritten from model
                vfdRep.Setup(r => r.GetByKey(12)).Returns((VitalsFormData) null);

                //Act
                var result = formController.EditVitalsForm(model);

                //Assert
                CheckErrorInfoViewResult(result);
            }
            public void PostEditVitalsFormData_ChangedUnconfirmedValues_Test()
            {
                //Arrange
                EmulateControllerContext(formController, false);
                var form = new Form {
                    Id = 13,
                    FormState = FormState.Completed,
                    Caption = "TestForm",
                    Visit = new Visit { Caption = "TestVisit", Patient = new Patient { PatientNumber = 123 } }
                };

                var formData = new VitalsFormData {
                    Id = 12,
                    Form = form,
                    ActualTime = new Question() { Id = 100, Value = new DateTime(2011, 10, 11, 12, 13, 14).ToString(CultureInfo.InvariantCulture) },
                    Height = new Question() { Id = 101, Value = "170" },
                    Weight = new Question() { Id = 102, Value = "50" },
                    HeartRate = new Question() { Id = 103, Value = "20" },
                    Temperature = new Question() { Id = 104, Value = "30" },
                    BloodPressureSystolic = new Question() { Id = 105, Value = "120" },
                    BloodPressureDiastolic = new Question() { Id = 106, Value = "70" }
                };
                var incomingModel = new VitalsFormViewModel {
                    Id = 12,
                    FormId = 13,
                    ActualTime = new DateTime(2012, 10, 11, 15, 16, 17),
                    Height = 171,
                    Weight = 51,
                    HeartRate = 21,
                    Temperature = 31,
                    BloodPressureSystolic = "121",
                    BloodPressureDiastolic = "71"
                };

                fRep.Setup(r => r.GetByKey(incomingModel.FormId)).Returns(form);
                //here we return "formdata before editing" - this data should not be overwritten from model as no any data change note provided
                vfdRep.Setup(r => r.GetByKey(incomingModel.Id)).Returns(formData);

                //Act
                var result = formController.EditVitalsForm(incomingModel);

                //Assert
                vfdRep.Verify(r => r.GetByKey(incomingModel.Id), Times.Once());
                vfdRep.Verify(r => r.Edit(It.IsAny<VitalsFormData>()), Times.Never());
                vfdRep.Verify(r => r.Save(), Times.Never());

                fRep.Verify(r => r.GetByKey(incomingModel.FormId), Times.Once());
                fRep.Verify(r => r.Edit(It.IsAny<Form>()), Times.Never());
                fRep.Verify(r => r.Save(), Times.Never());

                Assert.That(result, Is.Not.Null);
                Assert.That(result is ViewResultBase);
                var viewResultBase = result as ViewResultBase;
                Assert.That(viewResultBase.Model, Is.Not.Null);
                VitalsFormViewModel model = viewResultBase.Model as VitalsFormViewModel;
                Assert.That(model, Is.Not.Null);

                Assert.That(model.DataChangeReasonRequired);
                Assert.That(model.ChangeInfos, Is.Not.Null);
                Assert.That(model.ChangeInfos.Count, Is.EqualTo(7));

                AssertChangeInfo(formData.Height, "170", "171", model);
                AssertChangeInfo(formData.Weight, "50", "51", model);
                AssertChangeInfo(formData.HeartRate, "20", "21", model);
                AssertChangeInfo(formData.Temperature, "30", "31", model);
                AssertChangeInfo(formData.BloodPressureSystolic, "120", "121", model);
                AssertChangeInfo(formData.BloodPressureDiastolic, "70", "71", model);
                AssertChangeInfo(formData.ActualTime, "12:13 PM", "3:16 PM", model);
            }