public void MappingTest()
        {
            //Arrange
            var dataStorage = new Mock<IDataStorage>();
            var entity = new Question {
                Id = 1,
                DataType = QuestionDataType.Integer,
                Value = "2",
                File = null
            };
            var updatedEntity = new Question {
                Id = 1,
                DataType = QuestionDataType.Integer,
                Value = "3",
                File = new Attachment()
            };
            var repository = new QuestionRepository(dataStorage.Object);

            dataStorage.Setup(ds => ds.GetData<Question>()).Returns(new List<Question> {entity});
            //Act
            repository.Edit(updatedEntity);
            //Assert
            //Values are equal
            Assert.That(entity.DataType, Is.EqualTo(updatedEntity.DataType));
            Assert.That(entity.Value, Is.EqualTo(updatedEntity.Value));
            Assert.That(entity.File, Is.EqualTo(updatedEntity.File));
        }
        public void Map_DateQuestion_Correct()
        {
            //Arrange
            var question = new Question {
                Id = 11,
                DataType = QuestionDataType.Date,
                Value = "Tue, 19 Feb 1980 00:00:00 GMT"
            };

            var model = new ChangeNoteViewModel {
                ChangeReason = "Hi",
                NewValue = "Thu, 04 Jan 1979 00:00:00 GMT",
                OriginalValue = "Tue, 19 Feb 1980 00:00:00 GMT",
                QuestionId = 11
            };

            //Act
            var result = builder.CreateChangeNote(question, model.OriginalValue, model.NewValue, model.ChangeReason);

            //Assert
            Assert.That(result, Is.Not.Null);
            Assert.That(result.Question, Is.EqualTo(question));
            Assert.That(result.ChangeDate.Date, Is.EqualTo(DateTime.UtcNow.Date));
            Assert.That(result.ChangeReason, Is.EqualTo(model.ChangeReason));
            Assert.That(result.OriginalValue, Is.EqualTo(new DateTime(1980, 2, 19).ToString(CultureInfo.InvariantCulture)));
            Assert.That(result.NewValue, Is.EqualTo(new DateTime(1979, 1, 4).ToString(CultureInfo.InvariantCulture)));
        }
        public void GetOpenQueries()
        {
            //Arrange
            var dataStorage = new Mock<IDataStorage>();
            var clinic = new Clinic {Caption = "Clinic1"};
            var doctor1 = new User {FirstName = "DoctorFirst1", LastName = "DoctorLast1", Clinic = clinic};
            var doctor2 = new User {FirstName = "DoctorFirst2", LastName = "DoctorLast2", Clinic = clinic};
            var patient1 = new Patient {PatientNumber = 11, Doctor = doctor1};
            var patient2 = new Patient {PatientNumber = 12, Doctor = doctor2};
            var visit1 = new Visit {Caption = "Visit1", Patient = patient1};
            var visit2 = new Visit {Caption = "Visit2", Patient = patient2};
            var form1 = new Form {FormType = FormType.Happiness, Visit = visit1};
            var form2 = new Form {FormType = FormType.Demographics, Visit = visit2};
            var question1 = new Question {Form = form1};
            var question2 = new Question {Form = form2};
            var query1 = new Query {Id = 1, QueryText = "Text1", Question = question1};
            var query2 = new Query {Id = 2, QueryText = "Text2", AnswerText = "Answer1", Question = question2};

            var repository = new QueryRepository(dataStorage.Object);
            dataStorage.Setup(ds => ds.GetData<Query>()).Returns(new List<Query> {query1, query2});

            //Act
            var result = repository.GetOpenQueries();

            //Assert
            Assert.That(result, Is.Not.Null);
            Assert.That(result.Count(), Is.EqualTo(1));
            var query = result.ToList()[0];
            Assert.That(query.FormType, Is.EqualTo(FormType.Happiness));
            Assert.That(query.ClinicName, Is.EqualTo("Clinic1"));
            Assert.That(query.DoctorName, Is.EqualTo("DoctorLast1"));
            Assert.That(query.QuestionText, Is.EqualTo("Text1"));
            Assert.That(query.PatientNumber, Is.EqualTo(11));
            Assert.That(query.VisitName, Is.EqualTo("Visit1"));
        }
        public ChangeNote CreateChangeNote(Question question, string originalValue, string newValue, string changeReason)
        {
            var changeNote = new ChangeNote {
                Question = question,
                ChangeReason = changeReason,
                ChangeDate = DateTime.UtcNow
            };

            switch (question.DataType) {
                case QuestionDataType.Date:
                case QuestionDataType.Time:
                    DateTime newDate;
                    if (
                        !DateTime.TryParse(newValue, CultureInfo.InvariantCulture,
                                           DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal, out newDate))
                        return null;
                    DateTime originalDate;
                    if (
                        !DateTime.TryParse(originalValue, CultureInfo.InvariantCulture,
                                           DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal, out originalDate))
                        return null;

                    changeNote.NewValue = newDate.ToString(CultureInfo.InvariantCulture);
                    changeNote.OriginalValue = originalDate.ToString(CultureInfo.InvariantCulture);
                    break;
                case QuestionDataType.String:
                    changeNote.NewValue = newValue;
                    changeNote.OriginalValue = originalValue;
                    break;
                case QuestionDataType.Integer:
                case QuestionDataType.Enum:
                    int newInt;
                    if (!int.TryParse(newValue, NumberStyles.Integer, CultureInfo.InvariantCulture, out newInt))
                        return null;
                    int originalInt;
                    if (!int.TryParse(originalValue, NumberStyles.Integer, CultureInfo.InvariantCulture, out originalInt))
                        return null;

                    changeNote.NewValue = newInt.ToString(CultureInfo.InvariantCulture);
                    changeNote.OriginalValue = originalInt.ToString(CultureInfo.InvariantCulture);
                    break;
                case QuestionDataType.Number:
                    decimal newNumber;
                    if (!decimal.TryParse(newValue, NumberStyles.Number, CultureInfo.InvariantCulture, out newNumber))
                        return null;
                    decimal originalNumber;
                    if (!decimal.TryParse(originalValue, NumberStyles.Number, CultureInfo.InvariantCulture, out originalNumber))
                        return null;

                    changeNote.NewValue = newNumber.ToString(CultureInfo.InvariantCulture);
                    changeNote.OriginalValue = originalNumber.ToString(CultureInfo.InvariantCulture);
                    break;
            }
            changeNoteRepository.Add(changeNote);
            changeNoteRepository.Save();

            question.ChangeNotes.Add(changeNote);

            return changeNote;
        }
        public void Map_DateQuestion_Incorrect()
        {
            //Arrange
            var question = new Question {
                Id = 11,
                DataType = QuestionDataType.Date,
                Value = "Tue, 19 Feb 1980 00:00:00 GMT"
            };

            var model = new ChangeNoteViewModel {
                ChangeReason = "Hi",
                NewValue = "This is not a date",
                OriginalValue = "Tue, 19 Feb 1980 00:00:00 GMT",
            };

            //Act
            var result = builder.CreateChangeNote(question, model.OriginalValue, model.NewValue, model.ChangeReason);

            //Assert
            Assert.That(result, Is.Null);
        }
        public void Map_EnumQuestion_Correct()
        {
            //Arrange
            var question = new Question {
                Id = 11,
                DataType = QuestionDataType.Enum,
                Value = "1"
            };

            var model = new ChangeNoteViewModel {
                ChangeReason = "Hi",
                NewValue = "2",
                OriginalValue = "1",
                QuestionId = 11
            };

            //Act
            ChangeNote result = builder.CreateChangeNote(question, model.OriginalValue, model.NewValue, model.ChangeReason);

            //Assert
            Assert.That(result, Is.Not.Null);
            Assert.That(result.Question, Is.EqualTo(question));
            Assert.That(result.ChangeDate.Date, Is.EqualTo(DateTime.UtcNow.Date));
            Assert.That(result.ChangeReason, Is.EqualTo(model.ChangeReason));
            Assert.That(result.OriginalValue, Is.EqualTo("1"));
            Assert.That(result.NewValue, Is.EqualTo("2"));
        }
        public void Map_TimeQuestion_Incorrect()
        {
            //Arrange
            var question = new Question {
                Id = 11,
                DataType = QuestionDataType.Time,
                Value = "Fri, 01 Jan 0100 11:05:00 GMT"
            };

            var model = new ChangeNoteViewModel {
                ChangeReason = "Hi",
                NewValue = "This is not a time",
                OriginalValue = "Fri, 01 Jan 0100 11:05:00 GMT",
                QuestionId = 11
            };

            //Act
            var result = builder.CreateChangeNote(question, model.OriginalValue, model.NewValue, model.ChangeReason);

            //Assert
            Assert.That(result, Is.Null);
        }
        public void Map_TimeQuestion_Correct()
        {
            //Arrange
            var question = new Question {
                Id = 11,
                DataType = QuestionDataType.Time,
                Value = "Fri, 01 Jan 0100 11:05:00 GMT"
            };

            var model = new ChangeNoteViewModel {
                ChangeReason = "Hi",
                NewValue = "Fri, 01 Jan 0100 16:55:20 GMT",
                OriginalValue = "Fri, 01 Jan 0100 11:05:00 GMT",
                QuestionId = 11
            };

            //Act
            var result = builder.CreateChangeNote(question, model.OriginalValue, model.NewValue, model.ChangeReason);

            //Assert
            Assert.That(result, Is.Not.Null);
            Assert.That(result.Question, Is.EqualTo(question));
            Assert.That(result.ChangeDate.Date, Is.EqualTo(DateTime.UtcNow.Date));
            Assert.That(result.ChangeReason, Is.EqualTo(model.ChangeReason));
            Assert.That(result.OriginalValue,
                        Is.EqualTo(new DateTime(100, 1, 1, 11, 05, 0, DateTimeKind.Utc).ToString(CultureInfo.InvariantCulture)));
            Assert.That(result.NewValue,
                        Is.EqualTo(new DateTime(100, 1, 1, 16, 55, 20, DateTimeKind.Utc).ToString(CultureInfo.InvariantCulture)));
        }
        public void Map_NumberQuestion_Incorrect()
        {
            //Arrange
            var question = new Question {
                Id = 11,
                DataType = QuestionDataType.Number,
                Value = 3.5m.ToString(CultureInfo.InvariantCulture)
            };

            var model = new ChangeNoteViewModel {
                ChangeReason = "Hi",
                NewValue = "This is incorrect number string",
                OriginalValue = 3.5m.ToString(CultureInfo.InvariantCulture),
                QuestionId = 11
            };

            //Act
            ChangeNote result = builder.CreateChangeNote(question, model.OriginalValue, model.NewValue, model.ChangeReason);

            //Assert
            Assert.That(result, Is.Null);
        }
        public void Map_NumberQuestion_Correct()
        {
            //Arrange
            var question = new Question {
                Id = 11,
                DataType = QuestionDataType.Number,
                Value = 3.5m.ToString(CultureInfo.InvariantCulture)
            };

            var model = new ChangeNoteViewModel {
                ChangeReason = "Hi",
                NewValue = 4.84m.ToString(CultureInfo.InvariantCulture),
                OriginalValue = 3.5m.ToString(CultureInfo.InvariantCulture),
                QuestionId = 11
            };

            //Act
            var result = builder.CreateChangeNote(question, model.OriginalValue, model.NewValue, model.ChangeReason);

            //Assert
            Assert.That(result, Is.Not.Null);
            Assert.That(result.Question, Is.EqualTo(question));
            Assert.That(result.ChangeDate.Date, Is.EqualTo(DateTime.UtcNow.Date));
            Assert.That(result.ChangeReason, Is.EqualTo(model.ChangeReason));
            Assert.That(result.OriginalValue, Is.EqualTo(3.5m.ToString(CultureInfo.InvariantCulture)));
            Assert.That(result.NewValue, Is.EqualTo(4.84m.ToString(CultureInfo.InvariantCulture)));
        }
        public void Map_IntegerQuestion_Incorrect()
        {
            //Arrange
            var question = new Question {
                Id = 11,
                DataType = QuestionDataType.Integer,
                Value = "135"
            };

            var model = new ChangeNoteViewModel {
                ChangeReason = "Hi",
                NewValue = "This is incorrect integer string",
                OriginalValue = "135",
                QuestionId = 11
            };

            //Act
            var result = builder.CreateChangeNote(question, model.OriginalValue, model.NewValue, model.ChangeReason);

            //Assert
            Assert.That(result, Is.Null);
        }
            private void PrepareQueriesReportData()
            {
                supervisor1000 = new User {Id = 1000, FirstName = "First1000", LastName = "Last1000"};
                supervisor2000 = new User {Id = 2000, FirstName = "First2000", LastName = "Last2000"};

                doctor1 = new User {Id = 1, FirstName = "First1", LastName = "Last1"};
                doctor2 = new User {Id = 2, FirstName = "First2", LastName = "Last2"};
                doctor3 = new User {Id = 3, FirstName = "First3", LastName = "Last3"};

                form11 = new Form {Id = 11, Caption = "CRF11"};
                form12 = new Form {Id = 12, Caption = "CRF12"};
                form13 = new Form {Id = 13, Caption = "CRF13"};

                form21 = new Form {Id = 21, Caption = "CRF21"};
                form22 = new Form {Id = 22, Caption = "CRF22"};

                form31 = new Form {Id = 31, Caption = "CRF31"};
                form32 = new Form {Id = 32, Caption = "CRF32"};
                form33 = new Form {Id = 33, Caption = "CRF33"};
                form34 = new Form {Id = 34, Caption = "CRF34"};
                form35 = new Form {Id = 35, Caption = "CRF35"};

                question111 = new Question {Id = 111, Caption = "Question111", Form = form11};

                question121 = new Question {Id = 121, Caption = "Question121", Form = form12};
                question122 = new Question {Id = 122, Caption = "Question122", Form = form12};

                question211 = new Question {Id = 211, Caption = "Question211", Form = form21};
                question212 = new Question {Id = 212, Caption = "Question212", Form = form21};
                question213 = new Question {Id = 213, Caption = "Question213", Form = form21};

                question311 = new Question {Id = 311, Caption = "Question311", Form = form31};
                question321 = new Question {Id = 321, Caption = "Question321", Form = form32};
                question331 = new Question {Id = 331, Caption = "Question331", Form = form33};
                question341 = new Question {Id = 341, Caption = "Question341", Form = form34};
                question351 = new Question {Id = 351, Caption = "Question351", Form = form35};

                query1110 = new Query { Id = 1110, Question = question111, QueryAuthor = supervisor1000, QueryTime = DateTime.Today.AddDays(-1110), QueryText = "Query1110", AnswerAuthor = doctor1, AnswerText = "Reply1110", AnswerTime = DateTime.Today.AddDays(1110)};
                query1210 = new Query { Id = 1210, Question = question121, QueryAuthor = supervisor2000, QueryTime = DateTime.Today.AddDays(-1210), QueryText = "Query1210", AnswerAuthor = doctor1, AnswerText = "Reply1210", AnswerTime = DateTime.Today.AddDays(1210) };
                query1220 = new Query { Id = 1220, Question = question122, QueryAuthor = supervisor1000, QueryTime = DateTime.Today.AddDays(-1220), QueryText = "Query1220", AnswerAuthor = doctor1, AnswerText = "Reply1220", AnswerTime = DateTime.Today.AddDays(1220) };
                query2110 = new Query { Id = 2110, Question = question211, QueryAuthor = supervisor2000, QueryTime = DateTime.Today.AddDays(-2110), QueryText = "Query2110", AnswerAuthor = doctor2, AnswerText = "Reply2110", AnswerTime = DateTime.Today.AddDays(2110) };
                query2120 = new Query { Id = 2120, Question = question212, QueryAuthor = supervisor1000, QueryTime = DateTime.Today.AddDays(-2120), QueryText = "Query2120", AnswerAuthor = doctor2, AnswerText = "Reply2120", AnswerTime = DateTime.Today.AddDays(2120) };
                query2130 = new Query { Id = 2130, Question = question213, QueryAuthor = supervisor2000, QueryTime = DateTime.Today.AddDays(-2130), QueryText = "Query2130", AnswerAuthor = doctor2, AnswerText = "Reply2130", AnswerTime = DateTime.Today.AddDays(2130) };
                query3110 = new Query { Id = 3110, Question = question311, QueryAuthor = supervisor1000, QueryTime = DateTime.Today.AddDays(-3110), QueryText = "Query3110"};
                query3210 = new Query { Id = 3210, Question = question321, QueryAuthor = supervisor2000, QueryTime = DateTime.Today.AddDays(-3210), QueryText = "Query3210"};
                query3310 = new Query { Id = 3310, Question = question331, QueryAuthor = supervisor1000, QueryTime = DateTime.Today.AddDays(-3310), QueryText = "Query3310"};
                query3410 = new Query { Id = 3410, Question = question341, QueryAuthor = supervisor2000, QueryTime = DateTime.Today.AddDays(-3410), QueryText = "Query3410"};
                query3510 = new Query { Id = 3510, Question = question351, QueryAuthor = supervisor1000, QueryTime = DateTime.Today.AddDays(-3510), QueryText = "Query3510"};
            }
 private void AssertChangeInfo(Question question, string oldDisplayValue, string newDisplayValue, BaseFormDataViewModel model)
 {
     AssertChangeInfo(question.Id, question.Caption, oldDisplayValue, newDisplayValue, model);
 }
            public void CorrectModelMapping()
            {
                //Arrange
                var dataStorage = new Mock<IDataStorage>();
                var repository = new QueryRepository(dataStorage.Object);

                var clinic = new Clinic {Caption = "Clinic"};
                var doctor = new User {FirstName = "DoctorFirst", LastName = "DoctorLast", Clinic = clinic};
                var patient = new Patient {Doctor = doctor};
                var visit = new Visit {Caption = "Visit", Patient = patient};
                var form1 = new Form {FormType = FormType.Happiness, Visit = visit};
                var question1 = new Question {Caption = "QuestionCaption1", Form = form1};
                var query1 = new Query {Id = 1, Question = question1};

                var form2 = new Form {FormType = FormType.Inventory, Visit = visit};
                var question2 = new Question {Caption = "QuestionCaption2", Form = form2};
                var query2 = new Query {Id = 2, Question = question2, AnswerText = "Answer"};

                dataStorage.Setup(ds => ds.GetData<Query>()).Returns(new List<Query> {query1, query2});

                //Act
                var result = repository.GetQueriesReportData();

                //Assert
                Assert.That(result, Is.Not.Null);
                Assert.That(result.Count(), Is.EqualTo(2));
                var dto = result.ToList()[0];
                Assert.That(dto.FormType, Is.EqualTo(FormType.Happiness));
                Assert.That(dto.ClinicName, Is.EqualTo("Clinic"));
                Assert.That(dto.DoctorName, Is.EqualTo("DoctorFirst DoctorLast"));
                Assert.That(dto.QuestionName, Is.EqualTo("QuestionCaption1"));
                Assert.That(dto.IsOpen, Is.True);

                dto = result.ToList()[1];
                Assert.That(dto.FormType, Is.EqualTo(FormType.Inventory));
                Assert.That(dto.ClinicName, Is.EqualTo("Clinic"));
                Assert.That(dto.DoctorName, Is.EqualTo("DoctorFirst DoctorLast"));
                Assert.That(dto.QuestionName, Is.EqualTo("QuestionCaption2"));
                Assert.That(dto.IsOpen, Is.False);
            }