public void Integration_WhenEntityIsAdded_EnsureUniqueNameTask_RenamesItemIfNotUnique()
        {
            IHiveManager hive = null;
            try
            {
                var nhibernateTestSetup = new NhibernateTestSetupHelper(useNhProf:true);

                var storageProvider = new IoHiveTestSetupHelper(nhibernateTestSetup.FakeFrameworkContext);

                hive = new HiveManager(
                        new[]
                        {
                            new ProviderMappingGroup(
                                "test",
                                new WildcardUriMatch("content://"),
                                nhibernateTestSetup.ReadonlyProviderSetup,
                                nhibernateTestSetup.ProviderSetup,
                                nhibernateTestSetup.FakeFrameworkContext),
                            storageProvider.CreateGroup("uploader", "storage://file-uploader"),
                        },
                        nhibernateTestSetup.FakeFrameworkContext);


                SetupContentTest(hive);

                hive.FrameworkContext.TaskManager.AddTask(TaskTriggers.Hive.Revisions.PreAddOrUpdateOnUnitComplete,
                                          () => new EnsureUniqueNameTask(hive.FrameworkContext),
                                          true);

                hive.Cms().NewContentType("test-for-dupes")
                    .Define("sometext", "singleLineTextBox", "tab1")
                    .Commit();

                var parent = hive.Cms().NewRevision("My site root", "root", "test-for-dupes")
                    .SetValue("sometext", "hallow")
                    .Publish()
                    .Commit();

                var firstItem = hive.Cms().NewRevision("My Name", "my-name", "test-for-dupes")
                    .SetValue("sometext", "hallow")
                    .SetParent(parent.Item)
                    .Publish()
                    .Commit();

                var firstUnDupedItem = hive.Cms().NewRevision("My Name Unpublished", "my-name-unpublished", "test-for-dupes")
                    .SetValue("sometext", "hallow")
                    .SetParent(parent.Item)
                    .Publish()
                    .Commit();

                var shouldBeModified = hive.Cms().NewRevision("My Name", "my-name", "test-for-dupes")
                    .SetValue("sometext", "hallow")
                    .SetParent(parent.Item)
                    .Publish()
                    .Commit();

                var shouldBeModified2 = hive.Cms().NewRevision("My Name", "my-name", "test-for-dupes")
                    .SetValue("sometext", "hallow")
                    .SetParent(parent.Item)
                    .Publish()
                    .Commit();

                Assert.That(shouldBeModified.Success, Is.True);
                Assert.That(firstItem.Item.Id, Is.Not.EqualTo(shouldBeModified.Item.Id));
                Assert.That(firstItem.Item.Id, Is.Not.EqualTo(shouldBeModified2.Item.Id));
                Assert.That(shouldBeModified.Item.Id, Is.Not.EqualTo(shouldBeModified2.Item.Id));

                hive.Context.GenerationScopedCache.Clear();

                var queryForName = hive.Cms().QueryContent().Where(x => x.InnerAttribute<string>(NodeNameAttributeDefinition.AliasValue, "Name") == "My Name").ToList();
                Assert.That(queryForName.Count, Is.EqualTo(1));

                hive.Context.GenerationScopedCache.Clear();

                using(var uow = hive.OpenReader<IContentStore>())
                {
                    var checkFirstItem = uow.Repositories.Get(firstItem.Item.Id);
                    var checkRenamedItem = uow.Repositories.Get(shouldBeModified.Item.Id);
                    var checkRenamedItem2 = uow.Repositories.Get(shouldBeModified2.Item.Id);

                    var firstItemName = checkFirstItem.Attributes[NodeNameAttributeDefinition.AliasValue].Values["Name"];
                    var checkRenamedItemName = checkRenamedItem.Attributes[NodeNameAttributeDefinition.AliasValue].Values["Name"];
                    var checkRenamedItemName2 = checkRenamedItem2.Attributes[NodeNameAttributeDefinition.AliasValue].Values["Name"];

                    Assert.That(firstItemName, Is.Not.EqualTo(checkRenamedItemName));
                    Assert.That(firstItemName, Is.Not.EqualTo(checkRenamedItemName2));
                    Assert.That(checkRenamedItemName, Is.Not.EqualTo(checkRenamedItemName2));
                    Assert.That(checkRenamedItemName, Is.EqualTo("My Name (1)"));
                    Assert.That(checkRenamedItemName2, Is.EqualTo("My Name (2)"));

                    var firstItemUrlName = checkFirstItem.Attributes[NodeNameAttributeDefinition.AliasValue].Values["UrlName"];
                    var checkRenamedItemUrlName = checkRenamedItem.Attributes[NodeNameAttributeDefinition.AliasValue].Values["UrlName"];
                    var checkRenamedItemUrlName2 = checkRenamedItem2.Attributes[NodeNameAttributeDefinition.AliasValue].Values["UrlName"];

                    Assert.That(firstItemUrlName, Is.Not.EqualTo(checkRenamedItemUrlName));
                    Assert.That(firstItemUrlName, Is.Not.EqualTo(checkRenamedItemUrlName2));
                    Assert.That(checkRenamedItemUrlName, Is.Not.EqualTo(checkRenamedItemUrlName2));
                    Assert.That(checkRenamedItemUrlName, Is.EqualTo("my-name-1"));
                    Assert.That(checkRenamedItemUrlName2, Is.EqualTo("my-name-2"));
                }
            }
            finally
            {
                hive.IfNotNull(x => x.Dispose());
            }
            
        }
        public void Integration_WhenEntityIsAdded_EnsureUniqueNameTask_RenamesItemIfNotUnique()
        {
            IHiveManager hive = null;

            try
            {
                var nhibernateTestSetup = new NhibernateTestSetupHelper(useNhProf: true);

                var storageProvider = new IoHiveTestSetupHelper(nhibernateTestSetup.FakeFrameworkContext);

                hive = new HiveManager(
                    new[]
                {
                    new ProviderMappingGroup(
                        "test",
                        new WildcardUriMatch("content://"),
                        nhibernateTestSetup.ReadonlyProviderSetup,
                        nhibernateTestSetup.ProviderSetup,
                        nhibernateTestSetup.FakeFrameworkContext),
                    storageProvider.CreateGroup("uploader", "storage://file-uploader"),
                },
                    nhibernateTestSetup.FakeFrameworkContext);


                SetupContentTest(hive);

                hive.FrameworkContext.TaskManager.AddTask(TaskTriggers.Hive.Revisions.PreAddOrUpdateOnUnitComplete,
                                                          () => new EnsureUniqueNameTask(hive.FrameworkContext),
                                                          true);

                hive.Cms().NewContentType("test-for-dupes")
                .Define("sometext", "singleLineTextBox", "tab1")
                .Commit();

                var parent = hive.Cms().NewRevision("My site root", "root", "test-for-dupes")
                             .SetValue("sometext", "hallow")
                             .Publish()
                             .Commit();

                var firstItem = hive.Cms().NewRevision("My Name", "my-name", "test-for-dupes")
                                .SetValue("sometext", "hallow")
                                .SetParent(parent.Item)
                                .Publish()
                                .Commit();

                var firstUnDupedItem = hive.Cms().NewRevision("My Name Unpublished", "my-name-unpublished", "test-for-dupes")
                                       .SetValue("sometext", "hallow")
                                       .SetParent(parent.Item)
                                       .Publish()
                                       .Commit();

                var shouldBeModified = hive.Cms().NewRevision("My Name", "my-name", "test-for-dupes")
                                       .SetValue("sometext", "hallow")
                                       .SetParent(parent.Item)
                                       .Publish()
                                       .Commit();

                var shouldBeModified2 = hive.Cms().NewRevision("My Name", "my-name", "test-for-dupes")
                                        .SetValue("sometext", "hallow")
                                        .SetParent(parent.Item)
                                        .Publish()
                                        .Commit();

                Assert.That(shouldBeModified.Success, Is.True);
                Assert.That(firstItem.Item.Id, Is.Not.EqualTo(shouldBeModified.Item.Id));
                Assert.That(firstItem.Item.Id, Is.Not.EqualTo(shouldBeModified2.Item.Id));
                Assert.That(shouldBeModified.Item.Id, Is.Not.EqualTo(shouldBeModified2.Item.Id));

                hive.Context.GenerationScopedCache.Clear();

                var queryForName = hive.Cms().QueryContent().Where(x => x.InnerAttribute <string>(NodeNameAttributeDefinition.AliasValue, "Name") == "My Name").ToList();
                Assert.That(queryForName.Count, Is.EqualTo(1));

                hive.Context.GenerationScopedCache.Clear();

                using (var uow = hive.OpenReader <IContentStore>())
                {
                    var checkFirstItem    = uow.Repositories.Get(firstItem.Item.Id);
                    var checkRenamedItem  = uow.Repositories.Get(shouldBeModified.Item.Id);
                    var checkRenamedItem2 = uow.Repositories.Get(shouldBeModified2.Item.Id);

                    var firstItemName         = checkFirstItem.Attributes[NodeNameAttributeDefinition.AliasValue].Values["Name"];
                    var checkRenamedItemName  = checkRenamedItem.Attributes[NodeNameAttributeDefinition.AliasValue].Values["Name"];
                    var checkRenamedItemName2 = checkRenamedItem2.Attributes[NodeNameAttributeDefinition.AliasValue].Values["Name"];

                    Assert.That(firstItemName, Is.Not.EqualTo(checkRenamedItemName));
                    Assert.That(firstItemName, Is.Not.EqualTo(checkRenamedItemName2));
                    Assert.That(checkRenamedItemName, Is.Not.EqualTo(checkRenamedItemName2));
                    Assert.That(checkRenamedItemName, Is.EqualTo("My Name (1)"));
                    Assert.That(checkRenamedItemName2, Is.EqualTo("My Name (2)"));

                    var firstItemUrlName         = checkFirstItem.Attributes[NodeNameAttributeDefinition.AliasValue].Values["UrlName"];
                    var checkRenamedItemUrlName  = checkRenamedItem.Attributes[NodeNameAttributeDefinition.AliasValue].Values["UrlName"];
                    var checkRenamedItemUrlName2 = checkRenamedItem2.Attributes[NodeNameAttributeDefinition.AliasValue].Values["UrlName"];

                    Assert.That(firstItemUrlName, Is.Not.EqualTo(checkRenamedItemUrlName));
                    Assert.That(firstItemUrlName, Is.Not.EqualTo(checkRenamedItemUrlName2));
                    Assert.That(checkRenamedItemUrlName, Is.Not.EqualTo(checkRenamedItemUrlName2));
                    Assert.That(checkRenamedItemUrlName, Is.EqualTo("my-name-1"));
                    Assert.That(checkRenamedItemUrlName2, Is.EqualTo("my-name-2"));
                }
            }
            finally
            {
                hive.IfNotNull(x => x.Dispose());
            }
        }