public void ResolveItem_NoId_ThrowsException()
        {
            //Arrange 

            var config = new SitecoreTypeConfiguration();
            config.Type = typeof (StubClassNoId);

            config.AddProperty(
                new SitecoreFieldConfiguration()
                {
                    PropertyInfo = typeof (StubClassNoId).GetProperty("Field")
                });

            var instance = new StubClassNoId();

            var database = Factory.GetDatabase("master");



            //Act
            var result = config.ResolveItem(instance, database);

            //Assert


        }
        public void Execute_EnforeTemplateOnlyDoesNotInheritTemplate_AbortsPipeline()
        {
            //Arrange
            var task = new EnforcedTemplateCheck();
            using (Db database = new Db
            {
                new DbTemplate(new ID(TemplateInferredTypeTaskFixture.StubInferred.TemplateId)),
                new Sitecore.FakeDb.DbItem("Target", ID.NewID, new ID(TemplateInferredTypeTaskFixture.StubInferred.TemplateId))
            })
            {
                var path = "/sitecore/content/Target";
                var item = database.GetItem(path);

                var config = new SitecoreTypeConfiguration();
                config.EnforceTemplate = SitecoreEnforceTemplate.Template;
                config.TemplateId = new ID(Guid.NewGuid());

                var typeContext = new SitecoreTypeCreationContext();
                typeContext.Item = item;

                var args = new ObjectConstructionArgs(null, typeContext, config, null, new ModelCounter());

                //Act
                task.Execute(args);

                //Assert
                Assert.IsNull(args.Result);
            }
        }
        public void ResolveItem_NoId_ThrowsException()
        {
            //Arrange 
            using (Db database = new Db
            {
                new Sitecore.FakeDb.DbItem("TestItem")
            })
            {
                var config = new SitecoreTypeConfiguration();
                config.Type = typeof(StubClassNoId);

                config.AddProperty(
                    new SitecoreFieldConfiguration()
                    {
                        PropertyInfo = typeof(StubClassNoId).GetProperty("Field")
                    });

                var instance = new StubClassNoId();


                //Act
                Assert.Throws<NotSupportedException>(() => config.ResolveItem(instance, database.Database));

                //Assert
            }

        }
        public void ResolveItem()
        {
            //Arrange 

            using (Db database = new Db
            {
                new Sitecore.FakeDb.DbItem("TestItem")
            })
            {
                var config = new SitecoreTypeConfiguration();
                config.ItemUriConfig = new SitecoreInfoConfiguration();
                config.ItemUriConfig.PropertyInfo = typeof(StubClass).GetProperty("ItemUri");

                string path = "/sitecore/content/TestItem";
                var expected = database.GetItem(path);

                var instance = new StubClass();
                instance.ItemUri = new ItemUri(expected.ID, expected.Language, expected.Version, expected.Database);

                //Act
                var result = config.ResolveItem(instance, database.Database);

                //Assert
                Assert.AreEqual(expected.ID, result.ID);
                Assert.AreEqual(expected.Version, result.Version);
                Assert.AreEqual(expected.Language, result.Language);
            }

        }
        public void ResolveItem()
        {
            //Arrange 

            var config = new SitecoreTypeConfiguration();
            config.ItemUriConfig = new SitecoreInfoConfiguration();
            config.ItemUriConfig.PropertyInfo = typeof(StubClass).GetProperty("ItemUri");
            
            //TODO get a proper items
            string path = "/sitecore/content/Tests/DataMappers/SitecoreItemMapper/Target";
            var database = Factory.GetDatabase("master");
            var expected = database.GetItem(path);

            var instance = new StubClass();
            instance.ItemUri = new ItemUri(expected.ID, expected.Language, expected.Version, expected.Database);


            //Act
            var result = config.ResolveItem(instance, database);

            //Assert
            Assert.AreEqual(expected.ID, result.ID);
            Assert.AreEqual(expected.Version, result.Version);
            Assert.AreEqual(expected.Language, result.Language);


        }
        public void Execute_EnforeTemplateOnlyDoesNotInheritTemplate_AbortsPipeline()
        {
            //Arrange
            var task = new EnforcedTemplateCheck();
         
            
            var database = Sitecore.Configuration.Factory.GetDatabase("master");
            var path = "/sitecore/content/Tests/Pipelines/ObjectConstruction/EnforcedTemplateCheck/Target";
            var item = database.GetItem(path);

            var config = new SitecoreTypeConfiguration();
            config.EnforceTemplate = SitecoreEnforceTemplate.Template;
            config.TemplateId = new ID(Guid.NewGuid());

            var typeContext = new SitecoreTypeCreationContext();
            typeContext.Item = item;

            var args = new ObjectConstructionArgs(null, typeContext, config, null);

            //Act
            task.Execute(args);

            //Assert
            Assert.IsNull(args.Result);
            Assert.IsTrue(args.IsAborted);

        }
 static SitecoreItemResolverTask()
 {
     ItemType = typeof (Item);
     Config = new SitecoreTypeConfiguration()
     {
         Type = ItemType
     };
 }
        public void Execute_ResultNotNull_Returns()
        {
            //Arrange
            var args = new ConfigurationResolverArgs(null, null, null, null);
            var task = new TemplateInferredTypeTask();
            var expected = new SitecoreTypeConfiguration();
            args.Result = expected;

            //Act
            task.Execute(args);

            //Assert
            Assert.AreEqual(expected, args.Result);
        }
        public void Execute_ResultIsNotNull_DoesNothing()
        {
            //Arrange
            var expected = new SitecoreTypeConfiguration();
            var task = new SitecoreItemResolverTask();
            var args = new ConfigurationResolverArgs(null, null, null, null);
            args.Result = expected;

            //Act
            task.Execute(args);

            //Arrange
            Assert.AreEqual(expected, args.Result);
        }
        public void Execute_EnforeTemplateNo_PipelineNotAborted()
        {
            //Arrange
            var task = new EnforcedTemplateCheck();
            var config = new SitecoreTypeConfiguration();
            config.EnforceTemplate = SitecoreEnforceTemplate.No;

            var args = new ObjectConstructionArgs(null, null, config, null, new ModelCounter());

            //Act
            task.Execute(args);

            //Assert
            Assert.IsNull(args.Result);

        }
        public void Configure_ConfigurationIsOfCorrectType_NoExceptionThrown()
        {
            //Assign
            var attr = new SitecoreTypeAttribute();
            var config = new SitecoreTypeConfiguration();
            var type = typeof (StubClass);

            var templateIdExpected = Guid.Empty;
            var branchIdExptected = Guid.Empty;

            //Act
            attr.Configure(type, config);

            //Assert
            Assert.AreEqual(type, config.Type);
            Assert.AreEqual(new ID(templateIdExpected), config.TemplateId);
            Assert.AreEqual(new ID(branchIdExptected), config.BranchId);
        }
Пример #12
0
        /// <summary>
        /// Creates the template item.
        /// </summary>
        /// <param name="db">The db.</param>
        /// <param name="config">The config.</param>
        /// <param name="type">The type.</param>
        /// <param name="sqlDataProvider">The SQL data provider.</param>
        /// <param name="containingFolder">The containing folder.</param>
        /// <param name="context">The context.</param>
        /// <returns></returns>
        /// <exception cref="Sitecore.Exceptions.RequiredObjectIsNullException">TemplateItem is null for ID {0}.Formatted(templateDefinition.ID)</exception>
        public ItemDefinition CreateTemplateItem(
            Database db,
            SitecoreTypeConfiguration config, 
            Type type, 
            DataProvider sqlDataProvider, 
            ItemDefinition containingFolder,
            CallContext context)
        {
            //create the template in Sitecore
            string templateName = string.IsNullOrEmpty(config.TemplateName) ? type.Name : config.TemplateName;

            sqlDataProvider.CreateItem(config.TemplateId, templateName, TemplateTemplateId, containingFolder,
                                       context);
            var templateDefinition = sqlDataProvider.GetItemDefinition(config.TemplateId, context);
            ClearCaches(db);

            var templateItem = db.GetItem(templateDefinition.ID);

            if (templateItem == null)
                throw new RequiredObjectIsNullException("TemplateItem is null for ID {0}".Formatted(templateDefinition.ID));

            using (new ItemEditing(templateItem, true))
            {
                templateItem["__Base template"] = "{1930BBEB-7805-471A-A3BE-4858AC7CF696}";
            }

            return templateDefinition;
        }
        public void Execute_EnforeTemplateAndBaseInheritsTemplateFromDeepBase_PipelineContinues()
        {
            //Arrange
            var task = new EnforcedTemplateCheck();


            var database = Sitecore.Configuration.Factory.GetDatabase("master");
            var path = "/sitecore/content/Tests/Pipelines/ObjectConstruction/EnforcedTemplateCheck/Target";
            var item = database.GetItem(path);

            var config = new SitecoreTypeConfiguration();
            config.EnforceTemplate = SitecoreEnforceTemplate.TemplateAndBase;

            using (new SecurityDisabler())
            {
                config.TemplateId = item.Template.BaseTemplates.First().BaseTemplates.Skip(1).First().ID;

                var typeContext = new SitecoreTypeCreationContext();
                typeContext.Item = item;

                var args = new ObjectConstructionArgs(null, typeContext, config, null);

                //Act
                task.Execute(args);

                //Assert
                Assert.IsNull(args.Result);
                Assert.IsFalse(args.IsAborted);
            }
        }
        public void Configure_AttributeHasTemplateId_TemplateIdSetOnConfig()
        {
            //Assign
            var attr = new SitecoreTypeAttribute();
            var config = new SitecoreTypeConfiguration();
            var type = typeof(StubClass);

            var templateIdExpected = new Guid();
            var branchIdExptected = Guid.Empty;

            attr.TemplateId = templateIdExpected.ToString();

            //Act
            attr.Configure(type, config);

            //Assert
            Assert.AreEqual(type, config.Type);
              Assert.AreEqual(new ID( templateIdExpected), config.TemplateId);
            Assert.AreEqual(new ID(branchIdExptected), config.BranchId);
        }
        public void Configure_AttributeHasInvalidBranchId_ExceptionThrown()
        {
            //Assign
            var attr = new SitecoreTypeAttribute();
            var config = new SitecoreTypeConfiguration();
            var type = typeof(StubClass);

            var templateIdExpected = Guid.Empty;
            var branchIdExptected = Guid.Empty;

            attr.BranchId = "not a guid";

            //Act
            attr.Configure(type, config);

            //Assert
          
        }
Пример #16
0
        /// <summary>
        /// Bases the template checks.
        /// </summary>
        /// <param name="template">The template.</param>
        /// <param name="config">The config.</param>
        /// <param name="db">The database.</param>
        private void BaseTemplateChecks(
            ItemDefinition template,
            SitecoreTypeConfiguration config,
            Database db)
        {
            //check base templates
            var templateItem = db.GetItem(template.ID);
            var baseTemplatesField = templateItem[FieldIDs.BaseTemplate];
            var sb = new StringBuilder(baseTemplatesField);

            Sitecore.Diagnostics.Log.Info("Type {0}".Formatted(config.Type.FullName), this);

            Action<Type> idCheck = type =>
            {
                Sitecore.Diagnostics.Log.Info("ID Check {0}".Formatted(type.FullName), this);

                if (!TypeConfigurations.ContainsKey(type)) return;

                var baseConfig = TypeConfigurations[type];
                if (baseConfig != null && baseConfig.CodeFirst)
                {
                    if (!baseTemplatesField.Contains(baseConfig.TemplateId.ToString()))
                    {
                        sb.Append("|{0}".Formatted(baseConfig.TemplateId));
                    }
                }
            };

            Type baseType = config.Type.BaseType;

            while (baseType != null)
            {
                idCheck(baseType);
                baseType = baseType.BaseType;
            }

            config.Type.GetInterfaces().ForEach(idCheck);

            if (baseTemplatesField != sb.ToString())
            {
                templateItem.Editing.BeginEdit();
                templateItem[FieldIDs.BaseTemplate] = sb.ToString();
                templateItem.Editing.EndEdit();
            }
        }
        public void Execute_EnforeTemplateAndBaseInheritsTemplateFromDeepBase_PipelineContinues()
        {
            //Arrange
            var task = new EnforcedTemplateCheck();


            ID baseTemplateId1 = ID.NewID;
            ID baseTemplateId2 = ID.NewID;


            using (Db database = new Db
            {
                new DbTemplate(new ID(TemplateInferredTypeTaskFixture.StubInferred.TemplateId))
                 {
                  new DbField("__Base template")
                  {
                      Value =  baseTemplateId1.ToString()
                  }
                },
                new Sitecore.FakeDb.DbTemplate("base1", baseTemplateId1)
                {
                  new DbField("__Base template")
                  {
                      Value =  baseTemplateId2.ToString()
                  }
                },
                new Sitecore.FakeDb.DbTemplate("base2", baseTemplateId2),
                new Sitecore.FakeDb.DbItem("Target", ID.NewID,
                    new ID(TemplateInferredTypeTaskFixture.StubInferred.TemplateId))
            })
            {
                var path = "/sitecore/content/Target";
                var item = database.GetItem(path);

                var config = new SitecoreTypeConfiguration();
                config.EnforceTemplate = SitecoreEnforceTemplate.TemplateAndBase;

                using (new SecurityDisabler())
                {
                    config.TemplateId = item.Template.BaseTemplates.First().BaseTemplates.First().ID;

                    var typeContext = new SitecoreTypeCreationContext();
                    typeContext.Item = item;

                    var args = new ObjectConstructionArgs(null, typeContext, config, null, new ModelCounter());

                    //Act
                    task.Execute(args);

                    //Assert
                    Assert.IsNull(args.Result);
                }
            }
        }
Пример #18
0
        /// <summary>
        /// Bases the template checks.
        /// </summary>
        /// <param name="template">The template.</param>
        /// <param name="provider">The provider.</param>
        /// <param name="context">The context.</param>
        /// <param name="config">The config.</param>
        private void BaseTemplateChecks(
            ItemDefinition template, 
            DataProvider provider, 
            CallContext context, 
            SitecoreTypeConfiguration config)
        {
            //check base templates



            var templateItem = Factory.GetDatabase("master").GetItem(template.ID);


            var baseTemplatesField = templateItem[FieldIDs.BaseTemplate];
            StringBuilder sb = new StringBuilder(baseTemplatesField);

            global::Sitecore.Diagnostics.Log.Info("Type {0}".Formatted(config.Type.FullName), this);


            Action<Type> idCheck = (type) =>
            {
                global::Sitecore.Diagnostics.Log.Info("ID Check {0}".Formatted(type.FullName), this);

                if (!_typeConfigurations.ContainsKey(type)) return;

                var baseConfig = _typeConfigurations[type];
                if (baseConfig != null && baseConfig.CodeFirst)
                {
                    if (!baseTemplatesField.Contains(baseConfig.TemplateId.ToString()))
                    {
                        sb.Append("|{0}".Formatted(baseConfig.TemplateId));
                    }
                }
            };

            Type baseType = config.Type.BaseType;


            while (baseType != null)
            {
                idCheck(baseType);
                baseType = baseType.BaseType;
            }



            config.Type.GetInterfaces().ForEach(x => idCheck(x));

            if (baseTemplatesField != sb.ToString())
            {
                templateItem.Editing.BeginEdit();
                templateItem[FieldIDs.BaseTemplate] = sb.ToString();
                templateItem.Editing.EndEdit();
            }


        }
Пример #19
0
        /// <summary>
        /// Gets the child I ds template.
        /// </summary>
        /// <param name="template">The template.</param>
        /// <param name="itemDefinition">The item definition.</param>
        /// <param name="context">The context.</param>
        /// <returns>IDList.</returns>
        private IDList GetChildIDsTemplate(SitecoreTypeConfiguration template, ItemDefinition itemDefinition, CallContext context)
        {
            IDList fields = new IDList();

            List<string> processed = new List<string>();
            var sections = template.Properties
                .Where(x => x.PropertyInfo.DeclaringType == template.Type)
                .OfType<SitecoreFieldConfiguration>()
                .Select(x => new { x.SectionName, x.SectionSortOrder });

            var providers = context.DataManager.Database.GetDataProviders();
            var otherProvider = providers.FirstOrDefault(x => !(x is GlassDataProvider));
            //If sitecore contains a section with the same name in the database, use that one instead of creating a new one
            var existing = otherProvider.GetChildIDs(itemDefinition, context).OfType<ID>().Select(id => otherProvider.GetItemDefinition(id, context)).ToList();

            foreach (var section in sections)
            {
                if (processed.Contains(section.SectionName) || section.SectionName.IsNullOrEmpty())
                    continue;

                var record = SectionTable.FirstOrDefault(x => x.TemplateId == itemDefinition.ID && x.Name == section.SectionName);

                if (record == null)
                {

                    var exists = existing.FirstOrDefault(def => def.Name.Equals(section));
                    if (exists != null)
                    {

                        record = new SectionInfo(section.SectionName, exists.ID, itemDefinition.ID, section.SectionSortOrder) { Existing = true };
                    }
                    else
                    {

                        record = new SectionInfo(section.SectionName, new ID(Guid.NewGuid()), itemDefinition.ID, section.SectionSortOrder);
                    }
                    SectionTable.Add(record);
                }
                processed.Add(section.SectionName);
                if (!record.Existing)
                    fields.Add(record.SectionId);
            }
            return fields;
        }
Пример #20
0
        /// <summary>
        /// Gets the child I ds template.
        /// </summary>
        /// <param name="template">The template.</param>
        /// <param name="itemDefinition">The item definition.</param>
        /// <param name="context">The context.</param>
        /// <param name="sqlProvider">The SQL provider.</param>
        /// <returns>
        /// IDList.
        /// </returns>
        private IDList GetChildIDsTemplate(SitecoreTypeConfiguration template, ItemDefinition itemDefinition, CallContext context, DataProvider sqlProvider)
        {
            var fields = new IDList();
            var processed = new List<string>();
            var sections = template.Properties
                .Where(x => x.PropertyInfo.DeclaringType == template.Type)
                .OfType<SitecoreFieldConfiguration>()
                .Select(x => new { x.SectionName, x.SectionSortOrder });

            //If sitecore contains a section with the same name in the database, use that one instead of creating a new one
            var existing = sqlProvider.GetChildIDs(itemDefinition, context).OfType<ID>().Select(id => sqlProvider.GetItemDefinition(id, context))
                .Where(item => item.TemplateID == SectionTemplateId).ToList();

            foreach (var section in sections)
            {
                if (processed.Contains(section.SectionName) || section.SectionName.IsNullOrEmpty())
                    continue;

                var record = SectionTable.FirstOrDefault(x => x.TemplateId == itemDefinition.ID && x.Name == section.SectionName);

                if (record == null)
                {
                    var exists = existing.FirstOrDefault(def => def.Name.Equals(section.SectionName, StringComparison.InvariantCultureIgnoreCase));
                    var newId = GetUniqueGuid(itemDefinition.ID + section.SectionName);
                    const int newSortOrder = 100;
                    
                    record = exists != null ?
                        new SectionInfo(section.SectionName, exists.ID, itemDefinition.ID, section.SectionSortOrder) { Existing = true } :
                        new SectionInfo(section.SectionName, new ID(newId), itemDefinition.ID, newSortOrder);

                    SectionTable.Add(record);
                }

                processed.Add(section.SectionName);

                if (!record.Existing)
                    fields.Add(record.SectionId);
            }

            //we need to add sections already in the db, 'cause we have to 
            foreach (var sqlOne in existing.Where(ex => SectionTable.All(s => s.SectionId != ex.ID)))
            {
                SectionTable.Add(new SectionInfo(sqlOne.Name, sqlOne.ID, itemDefinition.ID, 0) { Existing = true } );
            }

            return fields;
        }
Пример #21
0
        /// <summary>
        /// Bases the template checks.
        /// </summary>
        /// <param name="template">The template.</param>
        /// <param name="config">The config.</param>
        /// <param name="db">The database.</param>
        private void BaseTemplateChecks(
            ItemDefinition template,
            SitecoreTypeConfiguration config,
            Database db)
        {
            //check base templates
            var templateItem = db.GetItem(template.ID);
            var baseTemplatesField = templateItem[FieldIDs.BaseTemplate];
            var sb = new StringBuilder(baseTemplatesField);

            Sitecore.Diagnostics.Log.Info("Type {0}".Formatted(config.Type.FullName), this);

            Action<Type> idCheck = type =>
            {
                Sitecore.Diagnostics.Log.Info("ID Check {0}".Formatted(type.FullName), this);

                if (!TypeConfigurations.ContainsKey(type)) return;

                var baseConfig = TypeConfigurations[type];
                if (baseConfig != null && baseConfig.TemplateId.Guid != Guid.Empty)
                {
                    if (!baseTemplatesField.Contains(baseConfig.TemplateId.ToString()))
                    {
                        sb.Append("|{0}".Formatted(baseConfig.TemplateId));
                    }
                }
            };

            Type baseType = config.Type.BaseType;

            while (baseType != null)
            {
                idCheck(baseType);    
                baseType = baseType.BaseType;
            }

            config.Type.GetInterfaces().ForEach(idCheck);

            //dirty fix for circular template inheritance
            var baseTemplates = sb.ToString().Split('|').ToList();
            baseTemplates.Remove(config.TemplateId.ToString());
            sb.Clear();
            sb.Append(string.Join("|", baseTemplates));

            if (baseTemplatesField != sb.ToString())
            {
                templateItem.Editing.BeginEdit();
                templateItem[FieldIDs.BaseTemplate] = sb.ToString();
                templateItem.Editing.EndEdit();
            }
        }