public void ContentEditorControllerTests_Sort_Invalidated()
        {
            //Arrange

            var parentEntity = CreateEntityRevision(new RegexPropertyEditor());
            var subEntity1 = CreateEntityRevision(new RegexPropertyEditor());
            var subEntity2 = CreateEntityRevision(new RegexPropertyEditor());
            var subEntity3 = CreateEntityRevision(new RegexPropertyEditor());
            //setup the relations
            using (var writer = UmbracoApplicationContext.Hive.OpenWriter<IContentStore>())
            {
                writer.Repositories.AddRelation(parentEntity.Item, subEntity1.Item, FixedRelationTypes.DefaultRelationType, 0);
                writer.Repositories.AddRelation(parentEntity.Item, subEntity2.Item, FixedRelationTypes.DefaultRelationType, 0);
                writer.Repositories.AddRelation(parentEntity.Item, subEntity3.Item, FixedRelationTypes.DefaultRelationType, 0);
                writer.Complete();
            }

            //var controller = new ContentEditorController(GetBackOfficeRequestContext());
            var controller = new SortController(GetBackOfficeRequestContext());
            controller.InjectDependencies(new Dictionary<string, string>(), new Dictionary<string, string>(), GetBackOfficeRequestContext());

            //Act

            //a model not containing any of the id's or sort indexes
            var result = controller.SortForm(new SortModel());
            var model = new BendyObject(result.Data);

            //Assert

            dynamic check = model.AsDynamic();

            Assert.AreEqual("ValidationError", check.failureType);
            Assert.AreEqual("false", check.success);
        }
        public void ContentEditorControllerTest_Actions_Secured_By_Permissions()
        {
            //Arrange
            var backOfficeRequestContext = GetBackOfficeRequestContext();
            var controller = new ContentEditorController(backOfficeRequestContext);
            controller.InjectDependencies(GetBackOfficeRequestContext());

            //TODO: There may be a better way of automatically getting a single controller variable using the controller extenders,
            //but likely that's just testing the action invoker, so for now here's the individual controllers

            var copyController = new MoveCopyController(backOfficeRequestContext);
            copyController.InjectDependencies(GetBackOfficeRequestContext());

            var sortController = new SortController(backOfficeRequestContext);
            sortController.InjectDependencies(GetBackOfficeRequestContext());

            var publishController = new PublishController(backOfficeRequestContext);
            publishController.InjectDependencies(GetBackOfficeRequestContext());

            var hos = new HostnameController(backOfficeRequestContext);
            hos.InjectDependencies(GetBackOfficeRequestContext());

            var rollback = new RollbackController(backOfficeRequestContext);
            rollback.InjectDependencies(GetBackOfficeRequestContext());

            var permissions = new PermissionsController(backOfficeRequestContext);
            permissions.InjectDependencies(GetBackOfficeRequestContext());

            //Assert
            Assert.IsTrue(ActionIsSecuredByPermission(controller, "CreateNew", FixedPermissionIds.Create));
            Assert.IsTrue(ActionIsSecuredByPermission(controller, "Edit", FixedPermissionIds.Update));
            Assert.IsTrue(ActionIsSecuredByPermission(controller, "Delete", FixedPermissionIds.Delete));
            Assert.IsTrue(ActionIsSecuredByPermission(copyController, "Copy", FixedPermissionIds.Copy));
            Assert.IsTrue(ActionIsSecuredByPermission(copyController, "Move", FixedPermissionIds.Move));
            Assert.IsTrue(ActionIsSecuredByPermission(sortController, "Sort", FixedPermissionIds.Sort));
            Assert.IsTrue(ActionIsSecuredByPermission(publishController, "Publish", FixedPermissionIds.Publish));
            Assert.IsTrue(ActionIsSecuredByPermission(permissions, "Permissions", FixedPermissionIds.Permissions));
            Assert.IsTrue(ActionIsSecuredByPermission(rollback, "Rollback", FixedPermissionIds.Rollback));

            // TODO: (APN @ Matt) the assertion for action name doesn't take into account two methods with the same name
            // but differing parameter counts, so this one fails
            // NOTE: (MPB) Have renamed post action to HostnameForm to get test passing for now, not sure if that is enough
            // or whether assertion method should allow you to query for a specific method signature?
            Assert.IsTrue(ActionIsSecuredByPermission(hos, "Hostname", FixedPermissionIds.Hostnames));
        }
        public void ContentEditorControllerTests_Sort_Success()
        {
            //Arrange

            var parentEntity = CreateEntityRevision(new RegexPropertyEditor());
            var subEntity1 = CreateEntityRevision(new RegexPropertyEditor());
            var subEntity2 = CreateEntityRevision(new RegexPropertyEditor());
            var subEntity3 = CreateEntityRevision(new RegexPropertyEditor());
            //setup the relations
            using (var writer = UmbracoApplicationContext.Hive.OpenWriter<IContentStore>())
            {
                writer.Repositories.AddRelation(parentEntity.Item, subEntity1.Item, FixedRelationTypes.DefaultRelationType, 0);
                writer.Repositories.AddRelation(parentEntity.Item, subEntity2.Item, FixedRelationTypes.DefaultRelationType, 0);
                writer.Repositories.AddRelation(parentEntity.Item, subEntity3.Item, FixedRelationTypes.DefaultRelationType, 0);
                writer.Complete();
            }

            var controller = new SortController(GetBackOfficeRequestContext());
            controller.InjectDependencies(new Dictionary<string, string>(), new Dictionary<string, string>(), GetBackOfficeRequestContext(), false);

            //Act

            //a model not containing any of the id's or sort indexes
            var result = controller.SortForm(new SortModel
                {
                    ParentId = parentEntity.Item.Id,
                    Items = new[]
                        {
                            new SortItem {Id = subEntity1.Item.Id, SortIndex = 2},
                            new SortItem {Id = subEntity2.Item.Id, SortIndex = 1},
                            new SortItem {Id = subEntity3.Item.Id, SortIndex = 0},
                        }
                }) as CustomJsonResult;

            //Assert

            Assert.IsNotNull(result);

            var json = JObject.Parse(result.OutputJson());
            Assert.AreEqual(true, json["success"].Value<bool>());

            using (var uow = UmbracoApplicationContext.Hive.OpenReader<IContentStore>())
            {
                var children = uow.Repositories.GetChildRelations(parentEntity.Item, FixedRelationTypes.DefaultRelationType).ToArray();

                Assert.That(children.Length, Is.EqualTo(3));

                Assert.AreEqual(0, children.Where(x => x.DestinationId == subEntity3.Item.Id).Single().Ordinal);
                Assert.AreEqual(1, children.Where(x => x.DestinationId == subEntity2.Item.Id).Single().Ordinal);
                Assert.AreEqual(2, children.Where(x => x.DestinationId == subEntity1.Item.Id).Single().Ordinal);
            }
        }