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); }
/// <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 }
/// <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); } } }
/// <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(); } }
/// <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; }
/// <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; }
/// <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(); } }