public void OrganizationsControllers_Put_SunnyDay()
        {
            var options = CreateNewContextOptions();

            using (var context = new HighFiveContext(_config, options))
            {
                var repo       = new HighFiveRepository(context, _repoLogger);
                var controller = new OrganizationsController(repo, _controllerLogger);
                //Adding an Organization
                controller.Post(new OrganizationViewModel {
                    Name = "Macys", Values = new List <CorporateValue> {
                        new CorporateValue {
                            Name = "Test Name", Description = "Testing Description"
                        }
                    }
                });

                var returnObject = controller.Put("Macys", new OrganizationViewModel {
                    Name = "Macys " + DateTime.Now.TimeOfDay, Values = new List <CorporateValue> {
                        new CorporateValue {
                            Name = "Test Name" + DateTime.Now.TimeOfDay, Description = "Testing Description" + DateTime.Now.TimeOfDay
                        }
                    }
                });
                returnObject.Result.Should().BeOfType <OkObjectResult>();
                var okObjectResult = returnObject.Result as OkObjectResult;
                AssertMessageProperty("Organization Macys updated successfully", okObjectResult.Value);
            }
        }
        public void OrganizationsControllers_GetAll_SunnyDay()
        {
            var options = CreateNewContextOptions();

            using (var context = new HighFiveContext(_config, options))
            {
                context.Organizations.Add(new Organization {
                    Name = "Ariel Partners", Values = new List <CorporateValue> {
                        new CorporateValue {
                            Name = "Test Name", Description = "Testing Description"
                        }
                    }
                });
                context.SaveChanges();

                var repo       = new HighFiveRepository(context, _repoLogger);
                var controller = new OrganizationsController(repo, _controllerLogger);

                var result = controller.GetAll();
                result.Should().BeOfType <OkObjectResult>();
                var okResult = result as OkObjectResult;
                var orgList  = okResult.Value as IList <OrganizationViewModel>;
                orgList.Should().HaveCount(1).And.ContainSingle(x => x.Name == "Ariel Partners");
            }
        }
        public void OrganizationsControllers_Post_DuplicateOrganization()
        {
            var options = CreateNewContextOptions();

            using (var context = new HighFiveContext(_config, options))
            {
                var repo       = new HighFiveRepository(context, _repoLogger);
                var controller = new OrganizationsController(repo, _controllerLogger);
                //Adding an Organization
                var returnObject = controller.Post(new OrganizationViewModel {
                    Name = "Macys", Values = new List <CorporateValue> {
                        new CorporateValue {
                            Name = "Test Name1", Description = "Testing Description1"
                        }
                    }
                });

                //Create an Organization with the same name
                returnObject = controller.Post(new OrganizationViewModel {
                    Name = "Macys", Values = new List <CorporateValue> {
                        new CorporateValue {
                            Name = "Test Name2", Description = "Testing Description2"
                        }
                    }
                });
                returnObject.Result.Should().BeOfType <BadRequestObjectResult>();
                var badRequestResult = returnObject.Result as BadRequestObjectResult;
                AssertMessageProperty("Organization Macys already exists in the database", badRequestResult.Value);
            }
        }
        public void OrganizationsControllers_Post_InvalidModel()
        {
            var options = CreateNewContextOptions();

            using (var context = new HighFiveContext(_config, options))
            {
                var repo       = new HighFiveRepository(context, _repoLogger);
                var controller = new OrganizationsController(repo, _controllerLogger);

                controller.ViewData.ModelState.Clear();

                var noname = new OrganizationViewModel();
                controller.ViewData.ModelState.AddModelError("Name", "The Name field is required.");

                controller.ViewData.ModelState.Should().HaveCount(1);
                controller.ViewData.ModelState["Name"].Errors.Should().HaveCount(1);
                controller.ViewData.ModelState["Name"].Errors[0].ErrorMessage.Should().Be("The Name field is required.");

                var org = controller.Post(noname);
                org.Result.Should().BeOfType <BadRequestObjectResult>();
                var badRequestResult = org.Result as BadRequestObjectResult;
                var errLst           = badRequestResult.Value as SerializableError;
                var errMsg           = ((string[])errLst["Name"]).Aggregate(string.Empty, (current, errVal) => current + errVal);
                Assert.AreEqual("The Name field is required.", errMsg);
            }
        }
        public void OrganizationsControllers_GetAll_NoContent()
        {
            var options = CreateNewContextOptions();

            using (var context = new HighFiveContext(_config, options))
            {
                var repo       = new HighFiveRepository(context, _repoLogger);
                var controller = new OrganizationsController(repo, _controllerLogger);

                var result = controller.GetAll();
                result.Should().BeOfType <NoContentResult>();
            }
        }
        public void OrganizationsControllers_GetAll_SimulatedServerFailure()
        {
            var repo = new Mock <IHighFiveRepository>();

            repo.Setup(r => r.GetAllOrganizations()).Throws <HighFiveException>();
            var controller = new OrganizationsController(repo.Object, _controllerLogger);

            var result = controller.GetAll();

            result.Should().BeOfType <BadRequestObjectResult>();
            var badRequestResult = result as BadRequestObjectResult;

            AssertMessageProperty("Failed to get Organizations", badRequestResult.Value);
        }
        public void OrganizationsControllers_Delete_NotFound()
        {
            var options = CreateNewContextOptions();

            using (var context = new HighFiveContext(_config, options))
            {
                var repo       = new HighFiveRepository(context, _repoLogger);
                var controller = new OrganizationsController(repo, _controllerLogger);

                var result = controller.Delete("Macys");
                result.Result.Should().BeOfType <NotFoundObjectResult>();
                var badRequestResult = result.Result as NotFoundObjectResult;
                AssertMessageProperty("Unable to find organization Macys", badRequestResult.Value);
            }
        }
        public void OrganizationsControllers_GetOrganizationByName_SunnyDay()
        {
            var options = CreateNewContextOptions();

            using (var context = new HighFiveContext(_config, options))
            {
                context.Organizations.Add(new Organization
                {
                    Name   = "Ariel Partners",
                    Values = new List <CorporateValue>
                    {
                        new CorporateValue {
                            Name = "Commitment", Description = "Committed to the long term success and happiness of our customers, our people, and our partners"
                        },
                        new CorporateValue {
                            Name = "Courage", Description = "To take on difficult challenges, to accept new ideas, to accept incremental failure"
                        },
                        new CorporateValue {
                            Name = "Excellence", Description = "Always strive to exceed expectations and continuously improve"
                        },
                        new CorporateValue {
                            Name = "Integrity", Description = "Always act honestly, ethically, and do the right thing even when it hurts "
                        }
                    }
                });
                context.SaveChanges();

                var repo       = new HighFiveRepository(context, _repoLogger);
                var controller = new OrganizationsController(repo, _controllerLogger);

                var result = controller.GetOrganizationByName("Ariel Partners");
                result.Should().BeOfType <OkObjectResult>();
                var okResult = result as OkObjectResult;
                var org      = okResult.Value as OrganizationViewModel;
                org.Name.Should().Be("Ariel Partners");

                result = controller.GetOrganizationByName("Yeehaa");
                result.Should().BeOfType <NotFoundObjectResult>();
                var notFoundResult = result as NotFoundObjectResult;
                AssertMessageProperty("Unable to find organization Yeehaa", notFoundResult.Value);
            }
        }
        public void OrganizationsControllers_Put_NotFound()
        {
            var options = CreateNewContextOptions();

            using (var context = new HighFiveContext(_config, options))
            {
                var repo       = new HighFiveRepository(context, _repoLogger);
                var controller = new OrganizationsController(repo, _controllerLogger);

                var returnObject = controller.Put("Macys", new OrganizationViewModel {
                    Name = "Macys", Values = new List <CorporateValue> {
                        new CorporateValue {
                            Name = "Test Name1", Description = "Testing Description1"
                        }
                    }
                });
                returnObject.Result.Should().BeOfType <NotFoundObjectResult>();
                var notFoundObjectResult = returnObject.Result as NotFoundObjectResult;
                AssertMessageProperty("Unable to find organization Macys", notFoundObjectResult.Value);
            }
        }
        public void OrganizationsControllers_Put_SimulatedServerFailure_Exception()
        {
            var repo = new Mock <IHighFiveRepository>();

            repo.Setup(r => r.GetOrganizationByName(It.IsAny <string>())).Throws <Exception>();
            repo.Setup(r => r.UpdateOrganization(It.IsAny <Organization>())).Throws <Exception>();
            var controller = new OrganizationsController(repo.Object, _controllerLogger);

            var returnObject = controller.Put("Macys", new OrganizationViewModel {
                Name = "Macys", Values = new List <CorporateValue> {
                    new CorporateValue {
                        Name = "Test Name1", Description = "Testing Description1"
                    }
                }
            });

            returnObject.Result.Should().BeOfType <BadRequestObjectResult>();
            var badRequestResult = returnObject.Result as BadRequestObjectResult;

            AssertMessageProperty("Failed to update organization Macys", badRequestResult.Value);
        }
        public void OrganizationsControllers_Post_SimulatedServerFailure_HighFiveException()
        {
            var repo = new Mock <IHighFiveRepository>();

            repo.Setup(r => r.GetOrganizationByName(It.IsAny <string>())).Throws <HighFiveException>();
            repo.Setup(r => r.AddOrganization(It.IsAny <Organization>())).Throws <HighFiveException>();
            var controller = new OrganizationsController(repo.Object, _controllerLogger);

            var returnObject = controller.Post(new OrganizationViewModel {
                Name = "Macys", Values = new List <CorporateValue> {
                    new CorporateValue {
                        Name = "Test Name1", Description = "Testing Description1"
                    }
                }
            });

            returnObject.Result.Should().BeOfType <BadRequestObjectResult>();
            var badRequestResult = returnObject.Result as BadRequestObjectResult;

            AssertMessageProperty("Exception of type \'HighFive.Server.Services.Utils.HighFiveException\' was thrown.", badRequestResult.Value);
        }
        public void OrganizationsControllers_Post_SunnyDay()
        {
            var options = CreateNewContextOptions();

            using (var context = new HighFiveContext(_config, options))
            {
                var repo       = new HighFiveRepository(context, _repoLogger);
                var controller = new OrganizationsController(repo, _controllerLogger);

                var org = controller.Post(new OrganizationViewModel {
                    Name = "Macys", Values = new List <CorporateValue> {
                        new CorporateValue {
                            Name = "Test Name1", Description = "Testing Description1"
                        }
                    }
                });
                org.Result.Should().BeOfType <CreatedResult>();
                var createdResult  = org.Result as CreatedResult;
                var organizationVm = createdResult.Value as OrganizationViewModel;
                organizationVm.Name.Should().Be("Macys");
            }
        }
        public void OrganizationsControllers_Delete_SunnyDay()
        {
            var options = CreateNewContextOptions();

            using (var context = new HighFiveContext(_config, options))
            {
                var repo       = new HighFiveRepository(context, _repoLogger);
                var controller = new OrganizationsController(repo, _controllerLogger);

                controller.Post(new OrganizationViewModel {
                    Name = "Macys", Values = new List <CorporateValue> {
                        new CorporateValue {
                            Name = "Test Name1", Description = "Testing Description1"
                        }
                    }
                });

                var result = controller.Delete("Macys");
                result.Result.Should().BeOfType <OkObjectResult>();
                var okResult = result.Result as OkObjectResult;
                AssertMessageProperty("Organization Macys record deleted", okResult.Value);
            }
        }
        public void OrganizationsControllers_Put_BadRequest()
        {
            var options = CreateNewContextOptions();

            using (var context = new HighFiveContext(_config, options))
            {
                var repo       = new HighFiveRepository(context, _repoLogger);
                var controller = new OrganizationsController(repo, _controllerLogger);
                //Adding an Organization
                controller.Post(new OrganizationViewModel {
                    Name = "Macys", Values = new List <CorporateValue> {
                        new CorporateValue {
                            Name = "Test Name1", Description = "Testing Description1"
                        }
                    }
                });

                var returnObject = controller.Put("Macys", null);
                returnObject.Result.Should().BeOfType <BadRequestObjectResult>();
                var badRequestObjectResult = returnObject.Result as BadRequestObjectResult;
                AssertMessageProperty("Failed to update organization Macys", badRequestObjectResult.Value);
            }
        }