private PracticeHomeControllerViewModel GetViewModel()
        {
            var timeZoneId = this.DbPractice.WindowsTimeZoneId;

            var timeZone = Enum.GetValues(typeof(TypeTimeZone))
                           .Cast <TypeTimeZone>()
                           .First(tz => TimeZoneDataAttribute.GetAttributeFromEnumValue(tz).Id == timeZoneId);

            var address = this.DbPractice.Address ?? new Address();

            var viewModel = new PracticeHomeControllerViewModel
            {
                Address = new AddressViewModel
                {
                    CEP           = address.CEP,
                    City          = address.City,
                    Complement    = address.Complement,
                    Neighborhood  = address.Neighborhood,
                    StateProvince = address.StateProvince,
                    Street        = address.Street,
                },
                Email            = this.DbPractice.Email,
                Pabx             = this.DbPractice.PABX,
                PhoneAlt         = this.DbPractice.PhoneAlt,
                PhoneMain        = this.DbPractice.PhoneMain,
                PracticeName     = this.DbPractice.Name,
                PracticeTimeZone = (short)timeZone,
                SiteUrl          = this.DbPractice.SiteUrl,
                Doctors          = GetDoctorViewModelsFromPractice(this.db, this.DbPractice, this.GetPracticeLocalNow()),
                Users            = (from u in this.DbPractice.Users.OrderBy(u => u.Person.FullName).ToList()
                                    select UsersController.GetViewModel(u, u.Practice)).ToList()
            };

            return(viewModel);
        }
        public void EditPost_UserIsOwner_WithInvalidData()
        {
            PracticeHomeController homeController;
            var mr = new MockRepository();

            try
            {
                mr.SetCurrentUser_Andre_CorrectPassword();
                mr.SetRouteData_ConsultorioDrHouse_GregoryHouse(typeof(PracticeHomeController), "Edit");

                homeController = mr.CreateController <PracticeHomeController>(callOnActionExecuting: false);
            }
            catch (Exception ex)
            {
                InconclusiveInit(ex);
                return;
            }

            var viewModel = new PracticeHomeControllerViewModel
            {
                PracticeName     = "", // Cannot set practice name to empty
                PracticeTimeZone = 3
            };

            Mvc3TestHelper.SetModelStateErrors(homeController, viewModel);

            // Execute test: owner must have access to this view.
            var actionResult = Mvc3TestHelper.RunOnAuthorization(homeController, "Edit", "POST")
                               ?? Mvc3TestHelper.RunOnActionExecuting(homeController, "Edit", "POST")
                               ?? homeController.Edit(viewModel);

            // Asserts
            Assert.IsInstanceOfType(actionResult, typeof(ViewResult));
            Assert.AreEqual(null, ((ViewResult)actionResult).View);
        }
        public ActionResult Edit(PracticeHomeControllerViewModel formModel)
        {
            if (this.ModelState.IsValid)
            {
                formModel.PracticeName = Regex.Replace(formModel.PracticeName.Trim(), @"\s+", " ");

                this.DbPractice.Name = formModel.PracticeName;
                this.DbPractice.WindowsTimeZoneId = TimeZoneDataAttribute.GetAttributeFromEnumValue(
                    (TypeTimeZone)formModel.PracticeTimeZone).Id;

                this.DbPractice.PhoneMain = formModel.PhoneMain;
                this.DbPractice.PhoneAlt  = formModel.PhoneAlt;
                this.DbPractice.SiteUrl   = formModel.SiteUrl;
                this.DbPractice.Email     = formModel.Email;

                var address = this.DbPractice.Address;
                if (address == null)
                {
                    this.DbPractice.Address = address = new Address();
                }
                address.PracticeId    = this.DbPractice.Id;
                address.CEP           = formModel.Address.CEP;
                address.City          = formModel.Address.City;
                address.Complement    = formModel.Address.Complement;
                address.Neighborhood  = formModel.Address.Neighborhood;
                address.StateProvince = formModel.Address.StateProvince;
                address.Street        = formModel.Address.Street;

                this.db.SaveChanges();

                return(this.RedirectToAction("Index"));
            }

            return(this.View(formModel));
        }
        public void EditPost_UserIsOwner_WithValidData()
        {
            PracticeHomeController homeController;
            var mr = new MockRepository();

            try
            {
                mr.SetCurrentUser_Andre_CorrectPassword();
                mr.SetRouteData_ConsultorioDrHouse_GregoryHouse(typeof(PracticeHomeController), "Edit");

                homeController = mr.CreateController <PracticeHomeController>(callOnActionExecuting: false);
            }
            catch (Exception ex)
            {
                InconclusiveInit(ex);
                return;
            }

            var viewModel = new PracticeHomeControllerViewModel
            {
                PracticeName     = "K!",
                PracticeTimeZone = 3,
                PhoneMain        = "(32)91272552",
                Address          = new AddressViewModel
                {
                    StateProvince = "MG",
                    CEP           = "36030-000",
                    City          = "Juiz de Fora",
                    Complement    = "Sta Luzia",
                    Street        = "Rua Sem Saída",
                }
            };

            Mvc3TestHelper.SetModelStateErrors(homeController, viewModel);

            // Execute test: owner must have access to this view.
            var actionResult = Mvc3TestHelper.RunOnAuthorization(homeController, "Edit", "POST")
                               ?? Mvc3TestHelper.RunOnActionExecuting(homeController, "Edit", "POST")
                               ?? homeController.Edit(viewModel);

            // Asserts
            Assert.IsInstanceOfType(actionResult, typeof(RedirectToRouteResult));
            var redirectResult = (RedirectToRouteResult)actionResult;

            Assert.AreEqual(2, redirectResult.RouteValues.Count);
            Assert.AreEqual("practicehome", string.Format("{0}", redirectResult.RouteValues["controller"]), ignoreCase: true);
            Assert.AreEqual("Index", string.Format("{0}", redirectResult.RouteValues["action"]), ignoreCase: true);
        }