public void CreateTest()
        {
            var controller = new SitePagesController();
            var context    = CreateMockContext(controller, "Create");

            controller.db          = db;
            controller.RoleManager = CreateRoleManager();
            var mockUser = CreateMockUser("jethro");

            db.CurrentUser = mockUser;
            context.HttpContext.Setup(r => r.User).Returns(mockUser);

            var sitePage = new SitePage {
                Name = "Test site page", Description = "This is a test"
            };
            var usersRole = controller.RoleManager.FindByNameAsync(Roles.Users);

            usersRole.Wait();
            var usersRole_Id = usersRole.Result.Id;

            string[] permissions = new string[] { usersRole_Id };
            var      result      = controller.Create(sitePage, permissions);

            Assert.IsInstanceOfType(result.Result, typeof(RedirectToRouteResult));

            var viewResult = (RedirectToRouteResult)result.Result;

            Assert.AreEqual("Index", viewResult.RouteValues["action"]);
        }
        public void IndexTest()
        {
            var controller = new SitePagesController();
            var context    = CreateMockContext(controller, "Index");

            controller.db          = db;
            controller.RoleManager = CreateRoleManager();
            controller.UserManager = MockApplicationUserManager((Mock <ApplicationUserManager> mockusermanager) =>
            {
                mockusermanager.Setup(m => m.GetRolesAsync(It.IsAny <string>())).ReturnsAsync(new List <string>(new[] { Roles.Users }));
            });
            var owner = CreateMockUser("jethro");

            db.CurrentUser = owner;
            var usersRole = controller.RoleManager.FindByNameAsync(Roles.Users);

            usersRole.Wait();
            var usersRole_Id = usersRole.Result.Id;

            var sitePage = db.SitePages.Add(new SitePage
            {
                Name        = RandomString(),
                Description = RandomString(),
                Slug        = RandomString(),
                Permissions = new Permission[] { new Permission {
                                                     AppliesToRole_Id = usersRole_Id
                                                 } }
            });

            db.SaveChanges();

            var mockUser = CreateMockUser("tull", Roles.Users);

            db.CurrentUser = mockUser;
            context.HttpContext.Setup(r => r.User).Returns(mockUser);

            var result = controller.Index();

            Assert.IsInstanceOfType(result.Result, typeof(ViewResult));

            var viewResult = (ViewResult)result.Result;

            Assert.IsInstanceOfType(viewResult.Model, typeof(List <SitePage>));

            var model = (List <SitePage>)viewResult.Model;

            Assert.IsNotNull(model.Find(s => s.Name == sitePage.Name));

            var anonymousUser = MockAnonymousUser();

            db.CurrentUser = anonymousUser;
            context.HttpContext.Setup(r => r.User).Returns(anonymousUser);
            controller.UserManager = MockApplicationUserManager();

            result = controller.Index();
            Assert.IsInstanceOfType(result.Result, typeof(ViewResult));
            Assert.IsInstanceOfType(((ViewResult)result.Result).Model, typeof(List <SitePage>));
        }
        public void DisplayNotAllowedTest()
        {
            var controller = new SitePagesController();
            var context    = CreateMockContext(controller, "Display");

            controller.db          = db;
            controller.RoleManager = CreateRoleManager();
            controller.UserManager = MockApplicationUserManager((Mock <ApplicationUserManager> mockusermanager) =>
            {
                mockusermanager.Setup(m => m.GetRolesAsync(It.IsAny <string>())).ReturnsAsync(new List <string>(new[] { Roles.Users }));
            });
            var owner = CreateMockUser("jethro");

            db.CurrentUser = owner;
            var adminsRole = controller.RoleManager.FindByNameAsync(Roles.Administrators);

            adminsRole.Wait();
            var adminsRole_Id = adminsRole.Result.Id;

            var sitePage = db.SitePages.Add(new SitePage
            {
                Name        = RandomString(),
                Description = RandomString(),
                Slug        = RandomString(),
                Permissions = new Permission[] { new Permission {
                                                     AppliesToRole_Id = adminsRole_Id
                                                 } }
            });

            db.SaveChanges();

            var mockUser = CreateMockUser("tull");

            db.CurrentUser = mockUser;
            context.HttpContext.Setup(r => r.User).Returns(mockUser);

            var exceptionThrown = false;

            try
            {
                var result = controller.Display(sitePage.Slug);
                result.Wait(); // should throw exception
            }
            catch (HttpException httpex)
            {
                Assert.AreEqual(404, httpex.GetHttpCode());
                exceptionThrown = true;
            }
            catch (AggregateException agex)
            {
                Assert.IsInstanceOfType(agex.InnerException, typeof(HttpException));
                var inner = (HttpException)agex.InnerException;
                Assert.AreEqual(404, inner.GetHttpCode());
                exceptionThrown = true;
            }

            Assert.IsTrue(exceptionThrown);
        }