public void Delete_HappyPath()
        {
            // obtains a valid patient
            Firestarter.CreateFakePatients(this.db.Doctors.First(), this.db, 1);
            this.db.SaveChanges();
            var patientId = this.db.Patients.First().Id;

            var formModel = new DiagnosisViewModel
                                {
                                    PatientId = patientId,
                                    Text = "This is my diagnosis",
                                    Cid10Code = "Q878",
                                    Cid10Name = "Doença X"
                                };

            var mr = new MockRepository(true);
            var controller = mr.CreateController<DiagnosisController>();
            controller.Create(new[] { formModel });

            Assert.IsTrue(controller.ModelState.IsValid);

            // get's the newly created diagnosis
            var newlyCreatedDiagnosis = this.db.Diagnoses.First();

            // tries to delete the anamnese
            var result = controller.Delete(newlyCreatedDiagnosis.Id);
            var deleteMessage = (JsonDeleteMessage)result.Data;

            Assert.AreEqual(true, deleteMessage.success);
            Assert.AreEqual(0, this.db.Anamnese.Count());
        }
 public ActionResult Create(DiagnosisViewModel[] diagnoses)
 {
     return this.Edit(diagnoses);
 }
        public ActionResult Edit(DiagnosisViewModel[] diagnoses)
        {
            var formModel = diagnoses.Single();

            if (string.IsNullOrEmpty(formModel.Text) && string.IsNullOrEmpty(formModel.Cid10Name))
                this.ModelState.AddModelError("", "É necessário preencher um diagnóstico CID-10 ou as notas");

            if (this.ModelState.IsValid)
            {
                Diagnosis dbObject;
                if (formModel.Id == null)
                {
                    Debug.Assert(formModel.PatientId != null, "formModel.PatientId != null");
                    dbObject = new Diagnosis()
                    {
                        CreatedOn = this.GetUtcNow(),
                        PatientId = formModel.PatientId.Value,
                        PracticeId = this.DbUser.PracticeId,
                    };
                    this.db.Diagnoses.AddObject(dbObject);
                }
                else
                    dbObject = this.db.Diagnoses.First(a => a.Id == formModel.Id);

                dbObject.Patient.IsBackedUp = false;
                dbObject.Observations = formModel.Text;
                dbObject.Cid10Code = formModel.Cid10Code;
                dbObject.Cid10Name = formModel.Cid10Name;
                dbObject.MedicalRecordDate = this.ConvertToUtcDateTime(formModel.MedicalRecordDate.Value);
                this.db.SaveChanges();

                // todo: this shoud be a redirect... so that if user press F5 in browser, the object will no be saved again.
                return this.View("Details", GetViewModel(dbObject, this.GetToLocalDateTimeConverter()));
            }

            return this.View("Edit", formModel);
        }
        public ActionResult Edit(int? id, int? patientId, int? y, int? m, int? d)
        {
            DiagnosisViewModel viewModel = null;

            if (id != null)
                viewModel = GetViewModel(
                    (from a in this.db.Diagnoses where a.Id == id select a).First(),
                    this.GetToLocalDateTimeConverter());
            else
                viewModel = new DiagnosisViewModel()
                {
                    Id = null,
                    PatientId = patientId,
                    MedicalRecordDate = DateTimeHelper.CreateDate(y, m, d) ?? this.GetPracticeLocalNow(),
                };

            return this.View("Edit", viewModel);
        }
        public void Edit_HappyPath()
        {
            // obtains a valid patient
            Firestarter.CreateFakePatients(this.db.Doctors.First(), this.db, 1);
            this.db.SaveChanges();
            var patientId = this.db.Patients.First().Id;

            var formModel = new DiagnosisViewModel
                                {
                                    PatientId = patientId,
                                    Cid10Code = "CodeX",
                                    Cid10Name = "XDesease",
                                    Text = "Notes"
                                };

            var mr = new MockRepository(true);
            var controller = mr.CreateController<DiagnosisController>();

            var referenceTime = DateTime.UtcNow;
            controller.UtcNowGetter = () => referenceTime;

            controller.Edit(new[] { formModel });

            Assert.IsTrue(controller.ModelState.IsValid);

            var diagnosis = this.db.Diagnoses.First();
            Assert.AreEqual(0, (referenceTime.Ticks - diagnosis.CreatedOn.Ticks) / 100000);
            Assert.AreEqual(patientId, diagnosis.PatientId);
            Assert.AreEqual(formModel.Text, diagnosis.Observations);
            Assert.AreEqual(formModel.Cid10Code, diagnosis.Cid10Code);
            Assert.AreEqual(formModel.Cid10Name, diagnosis.Cid10Name);
        }
        public void Edit_WhenBothCid10AndNotesAreEmpty()
        {
            // obtains a valid patient
            Firestarter.CreateFakePatients(this.db.Doctors.First(), this.db, 1);
            this.db.SaveChanges();
            var patientId = this.db.Patients.First().Id;

            var formModel = new DiagnosisViewModel
                                {
                                    PatientId = patientId,
                                };

            var mr = new MockRepository(true);
            var controller = mr.CreateController<DiagnosisController>();
            controller.Edit(new[] { formModel });

            Assert.IsFalse(controller.ModelState.IsValid);
        }