Пример #1
0
        public void Execute_EnforeTemplateAndBaseDoesNotInheritTemplate_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.TemplateAndBase;
            config.TemplateId      = new ID(Guid.NewGuid());

            var typeContext = new SitecoreTypeCreationContext();

            typeContext.Item = item;

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

            //Act

            using (new SecurityDisabler())
            {
                task.Execute(args);
            }

            //Assert
            Assert.IsNull(args.Result);
            Assert.IsTrue(args.IsAborted);
        }
        public void Execute_CreatesInferredType()
        {
            //Arrange  
            using (Db database = new Db
            {
                new DbTemplate(new ID(StubInferred.TemplateId)),
                new Sitecore.FakeDb.DbItem("Target", ID.NewID, new ID(StubInferred.TemplateId))
            })
            {
                var context = Context.Create(FakeDb.Utilities.CreateStandardResolver());
                var path = "/sitecore/content/Target";

                context.Load(new AttributeTypeLoader(typeof(StubInferred)));


                var typeContext = new SitecoreTypeCreationContext();
                var args = new ConfigurationResolverArgs(context, typeContext, null, null);
                var task = new TemplateInferredTypeTask();
                typeContext.InferType = true;
                typeContext.Item = database.GetItem(path);
                typeContext.RequestedType = typeof(IBase);
                args.RequestedType = typeof(IBase);



                //Act
                task.Execute(args);


                //Assert
                Assert.IsNotNull(args.Result);
                Assert.AreEqual(typeof(StubInferred), args.Result.Type);
            }
        }
        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);

        }
Пример #4
0
        public void Execute_EnforeTemplateOnlyInheritsTemplate_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.Template;
            config.TemplateId      = item.TemplateID;

            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);
        }
Пример #5
0
        public void Execute_EnforeTemplateOnlyDoesNotInheritTemplate_NextCalledResultNull()
        {
            //Arrange
            var  task       = new EnforcedTemplateCheck();
            bool nextCalled = false;

            task.SetNext(x => nextCalled = true);


            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);

                //Act
                task.Execute(args);

                //Assert
                Assert.IsNull(args.Result);
                Assert.IsTrue(nextCalled);
            }
        }
        public void Execute_CreatesInferredType()
        {
            //Arrange  
            var db = Sitecore.Configuration.Factory.GetDatabase("master");
            var context = Context.Create(Utilities.CreateStandardResolver());
            var path = "/sitecore/content/Tests/Pipelines/ConfigurationResolver/TemplateInferredTypeTask/Target";

            context.Load(new AttributeTypeLoader(typeof(StubInferred)));
            

            var typeContext = new SitecoreTypeCreationContext();
            var args = new ConfigurationResolverArgs(context, typeContext, null, null);
            var task = new TemplateInferredTypeTask();
            typeContext.InferType = true;
            typeContext.Item = db.GetItem(path);
            typeContext.RequestedType = typeof (IBase);
            args.RequestedType = typeof (IBase);

            

            //Act
            task.Execute(args);


            //Assert
            Assert.IsNotNull(args.Result);
            Assert.AreEqual(typeof(StubInferred), args.Result.Type);
        }
Пример #7
0
        public void Execute_SecondRequestFromCacheInferredType()
        {
            //Arrange
            var db      = Sitecore.Configuration.Factory.GetDatabase("master");
            var context = Context.Create(Utilities.CreateStandardResolver());
            var path    = "/sitecore/content/Tests/Pipelines/ConfigurationResolver/TemplateInferredTypeTask/Target";

            context.Load(new AttributeTypeLoader(typeof(StubInferred)));


            var typeContext = new SitecoreTypeCreationContext();
            var args1       = new ConfigurationResolverArgs(context, typeContext, null, null);
            var args2       = new ConfigurationResolverArgs(context, typeContext, null, null);
            var task        = new TemplateInferredTypeTask();

            typeContext.InferType     = true;
            typeContext.Item          = db.GetItem(path);
            typeContext.RequestedType = typeof(IBase);
            args1.RequestedType       = typeof(IBase);
            args2.RequestedType       = typeof(IBase);



            //Act
            task.Execute(args1);
            task.Execute(args2);


            //Assert
            Assert.IsNotNull(args1.Result);
            Assert.AreEqual(typeof(StubInferred), args1.Result.Type);
            //Assert
            Assert.IsNotNull(args2.Result);
            Assert.AreEqual(typeof(StubInferred), args2.Result.Type);
        }
Пример #8
0
        public object CreateElementInstance(Type baseType, IDictionary <string, object> fieldValues, IEnumerable <IExecutionContext> executionContexts)
        {
            var typeConfig = Context.Default.GetTypeConfiguration <SitecoreTypeConfiguration>(baseType);

            if (typeConfig == null || typeConfig.TemplateId == (ID)null)
            {
                return(_defaultDocumentMapper.CreateElementInstance(baseType, fieldValues, executionContexts));
            }

            var sitecoreService     = new SitecoreContext();
            var typeCreationContext = new SitecoreTypeCreationContext
            {
                SitecoreService = sitecoreService,
                RequestedType   = baseType,
                InferType       = true,
                IsLazy          = true,
                TemplateId      = ID.Parse(fieldValues[BuiltinFields.Template]),
            };

            using (new SearchSwitcher())
            {
                var proxy = sitecoreService.InstantiateObject(typeCreationContext);
                SetupProxy(ID.Parse(fieldValues[BuiltinFields.Group]), fieldValues, proxy as IProxyTargetAccessor);
                return(proxy);
            }
        }
        public void Execute_CreatesInferredType()
        {
            //Arrange
            using (Db database = new Db
            {
                new DbTemplate(new ID(StubInferred.TemplateId)),
                new Sitecore.FakeDb.DbItem("Target", ID.NewID, new ID(StubInferred.TemplateId))
            })
            {
                var context = Context.Create(FakeDb.Utilities.CreateStandardResolver());
                var path    = "/sitecore/content/Target";

                context.Load(new AttributeTypeLoader(typeof(StubInferred)));


                var typeContext = new SitecoreTypeCreationContext();
                var args        = new ConfigurationResolverArgs(context, typeContext, null, null);
                var task        = new TemplateInferredTypeTask();
                typeContext.InferType     = true;
                typeContext.Item          = database.GetItem(path);
                typeContext.RequestedType = typeof(IBase);
                args.RequestedType        = typeof(IBase);



                //Act
                task.Execute(args);


                //Assert
                Assert.IsNotNull(args.Result);
                Assert.AreEqual(typeof(StubInferred), args.Result.Type);
            }
        }
        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);
            }
        }
Пример #11
0
        public void Execute_EnforeTemplateAndBaseInheritsTemplateFromDeepBase_PipelineContinues()
        {
            //Arrange
            var  task       = new EnforcedTemplateCheck();
            bool nextCalled = false;

            task.SetNext(x => nextCalled = true);


            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);

                    //Act
                    task.Execute(args);

                    //Assert
                    Assert.IsNull(args.Result);
                    Assert.IsTrue(nextCalled);
                }
            }
        }
        public void Excute_TemplateWithEnAndDeStandardValues_ItemOnlyInEn_DoesntReturnDe()
        {
            //Arrange
            using (Db database = new Db
            {
                new DbTemplate(new ID(TemplateInferredTypeTaskFixture.StubInferred.TemplateId))
                {
                    new Sitecore.FakeDb.DbField("Title")
                    {
                        { "en", "Hello!" },
                        { "de-de", "Hej!" }
                    }
                },
                new Sitecore.FakeDb.DbItem("Target", ID.NewID,
                                           new ID(TemplateInferredTypeTaskFixture.StubInferred.TemplateId))
            })
            {
                var path   = "/sitecore/content/Target";
                var itemEn = database.GetItem(path, "en");
                var itemDe = database.GetItem(path, "de-de");

                //  itemEn.Template.CreateStandardValues();

                var nextTaskEn = new NextTask();
                var taskEn     = new ItemVersionCountByRevisionTask();
                taskEn.SetNext(x => nextTaskEn.Execute(x));

                var contextEn = new SitecoreTypeCreationContext();
                contextEn.Item = itemEn;
                var optionsEn = new GetItemByItemOptions(itemEn);
                contextEn.Options = optionsEn;
                var argsEn = new ObjectConstructionArgs(null, contextEn, null, null);

                //Act EN
                taskEn.Execute(argsEn);

                //Assert EN
                Assert.IsTrue(nextTaskEn.WasCalled);

                var nextTaskDe = new NextTask();
                var taskDe     = new ItemVersionCountByRevisionTask();
                taskDe.SetNext(x => nextTaskDe.Execute(x));

                var contextDe = new SitecoreTypeCreationContext();
                var optionsDe = new GetItemByItemOptions(itemDe);
                contextDe.Item = itemDe;

                contextDe.Options = optionsDe;
                var argsDe = new ObjectConstructionArgs(null, contextDe, null, null);

                //Act De
                taskDe.Execute(argsDe);

                //Assert De
                Assert.IsFalse(nextTaskDe.WasCalled);
            }
        }
Пример #13
0
 /// <summary>
 /// Executes the specified args.
 /// </summary>
 /// <param name="args">The args.</param>
 public void Execute(ObjectConstructionArgs args)
 {
     if (args.Result == null &&
         args.Configuration != null &&
         args.Configuration.Type.IsAssignableFrom(_dynamicType))
     {
         SitecoreTypeCreationContext typeContext =
             args.AbstractTypeCreationContext as SitecoreTypeCreationContext;
         args.Result = new DynamicItem(typeContext.Item);
     }
 }
 public void Execute(ObjectConstructionArgs args)
 {
     if (args.Result == null)
     {
         if (args.Configuration.Type.IsAssignableFrom(typeof(IDynamicMetaObjectProvider)))
         {
             SitecoreTypeCreationContext typeContext =
                 args.AbstractTypeCreationContext as SitecoreTypeCreationContext;
             args.Result = new DynamicItem(typeContext.Item);
         }
     }
 }
Пример #15
0
        protected virtual T CreateInstance <T>(string templateId)
        {
            var typeCreationContext = new SitecoreTypeCreationContext
            {
                SitecoreService = _sitecoreContext,
                RequestedType   = typeof(T),
                InferType       = true,
                IsLazy          = true,
                TemplateId      = new ID(templateId)
            };

            using (new SearchSwitcher()) return((T)_sitecoreContext.InstantiateObject(typeCreationContext));
        }
        public void Execute_ResultNotSitecoreItemConfig_NoValueSet()
        {
            //Arrange
            var task    = new SitecoreItemTask();
            var context = new SitecoreTypeCreationContext();

            var args = new ObjectConstructionArgs(null, context, new SitecoreTypeConfiguration(), null, new ModelCounter());

            //Act
            task.Execute(args);

            //Assert
            Assert.IsNull(args.Result);
        }
        public void Execute_ResultNotSitecoreItemConfig_NoValueSet()
        {
            //Arrange
            var task = new SitecoreItemTask();
            var context = new SitecoreTypeCreationContext();

            var args = new ObjectConstructionArgs(null, context, new SitecoreTypeConfiguration(), null);
        
            //Act
            task.Execute(args);

            //Assert
            Assert.IsNull(args.Result);
        }
        public void Execute_ItemConfig_ItemSet()
        {
            //Arrange
            var task = new SitecoreItemTask();
            var context = new SitecoreTypeCreationContext();
            context.Item = Mapper.Sc.Utilities.CreateFakeItem(new Dictionary<Guid, string>(), "test");
            var args = new ObjectConstructionArgs(null, context, SitecoreItemResolverTask.Config, null);
            
            //Act
            task.Execute(args);

            //Assert
            Assert.AreEqual(context.Item, args.Result);
        }
        public void Execute_ItemConfig_ItemSet()
        {
            //Arrange
            var task    = new SitecoreItemTask();
            var context = new SitecoreTypeCreationContext();

            context.Item = Mapper.Sc.Utilities.CreateFakeItem(new Dictionary <Guid, string>(), "test");
            var args = new ObjectConstructionArgs(null, context, SitecoreItemResolverTask.Config, null, new ModelCounter());

            //Act
            task.Execute(args);

            //Assert
            Assert.AreEqual(context.Item, args.Result);
        }
        public void Execute_ResultNotNull_NoChangeToResult()
        {
            //Arrange
            var task = new SitecoreItemTask();
            var context = new SitecoreTypeCreationContext();

            var args = new ObjectConstructionArgs(null, context, new SitecoreTypeConfiguration(), null);
            var expected = "some value";
            args.Result = expected;

            //Act
            task.Execute(args);

            //Assert
            Assert.AreEqual(expected, args.Result);
        }
Пример #21
0
        public void Intercept(IInvocation invocation)
        {
            if (IndexFields.Any(x => x == invocation.Method.Name))
            {
                invocation.Proceed();
            }

            if (!invocation.Method.IsSpecialName || !invocation.Method.Name.StartsWith("get_") && !invocation.Method.Name.StartsWith("set_"))
            {
                return;
            }
            string str  = invocation.Method.Name.Substring(0, 4);
            string name = invocation.Method.Name.Substring(4);

            if (!_isLoaded)
            {
                SitecoreTypeCreationContext typeCreationContext = _args.AbstractTypeCreationContext as SitecoreTypeCreationContext;
                typeCreationContext.Item = typeCreationContext.SitecoreService.Database.GetItem(Id);
                SitecoreTypeConfiguration  typeConfiguration  = TypeConfiguration;
                AbstractDataMappingContext dataMappingContext = _args.Service.CreateDataMappingContext(_args.AbstractTypeCreationContext, null);

                //todo filter fieldnames from FieldConfigs!
                foreach (AbstractPropertyConfiguration propertyConfiguration in typeConfiguration.Properties.Where(x => IndexFields.All(y => y != x.PropertyInfo.Name)))
                {
                    object obj = propertyConfiguration.Mapper.MapToProperty(dataMappingContext);
                    _values[propertyConfiguration.PropertyInfo.Name] = obj;
                }
                _isLoaded = true;
            }
            if (str == "get_")
            {
                if (_values.ContainsKey(name))
                {
                    object obj = _values[name];
                    invocation.ReturnValue = obj;
                }
            }
            else if (str == "set_")
            {
                _values[name] = invocation.Arguments[0];
            }
            else
            {
                throw new MapperException(Glass.Mapper.ExtensionMethods.Formatted("Method with name {0}{1} on type {2} not supported.", (object)str, (object)name, (object)this._args.Configuration.Type.FullName));
            }
        }
        public void Execute_ResultNotNull_NoChangeToResult()
        {
            //Arrange
            var task    = new SitecoreItemTask();
            var context = new SitecoreTypeCreationContext();

            var args     = new ObjectConstructionArgs(null, context, new SitecoreTypeConfiguration(), null, new ModelCounter());
            var expected = "some value";

            args.Result = expected;

            //Act
            task.Execute(args);

            //Assert
            Assert.AreEqual(expected, args.Result);
        }
        public void Execute_RequestedTypeItem_ConfigForItem()
        {
            //Arrange
            SitecoreTypeConfiguration expected = SitecoreItemResolverTask.Config;
            var task    = new SitecoreItemResolverTask();
            var context = new SitecoreTypeCreationContext();

            context.Options = new GetItemOptions()
            {
                Type = typeof(Item)
            };

            var args = new ConfigurationResolverArgs(null, context, null);

            //Act
            task.Execute(args);

            //Arrange
            Assert.AreEqual(expected, args.Result);
        }
        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 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);
                }
            }
        }