public void GetField_FieldContainsId_ReturnsConcreteType()
        {
            //Assign
            var item = Database.GetItem("/sitecore/content/Tests/DataMappers/SitecoreFieldTypeMapper/GetField");
            var targetId = Guid.Parse("{BB01B0A5-A3F0-410E-8A6D-07FF3A1E78C3}");
            var mapper = new SitecoreFieldTypeMapper();
            var field = item.Fields[FieldName];
            var config = new SitecoreFieldConfiguration();
            config.PropertyInfo = typeof (StubContaining).GetProperty("PropertyTrue");

            var context = Context.Create(Utilities.CreateStandardResolver());
            context.Load(new SitecoreAttributeConfigurationLoader("Glass.Mapper.Sc.Integration"));
            var service = new SitecoreService(Database, context);


            var scContext = new SitecoreDataMappingContext(null, item, service);

            using (new ItemEditing(item, true))
            {
                field.Value = targetId.ToString();
            }

            //Act
            var result = mapper.GetField(field, config, scContext) as Stub;

            //Assert
            Assert.AreEqual(targetId, result.Id);

        }
        public void CanHandle_TypeHasBeenLoadedByGlass_ReturnsTrue()
        {
            //Assign
            var mapper = new SitecoreFieldTypeMapper();
            var config = new SitecoreFieldConfiguration();
            config.PropertyInfo = typeof(StubContaining).GetProperty("PropertyTrue");
            var context = Context.Create(Utilities.CreateStandardResolver());
            context.Load(new OnDemandLoader<SitecoreTypeConfiguration>(typeof(StubContaining)));

            //Act
            var result = mapper.CanHandle(config, context);

            //Assert
            Assert.IsTrue(result);
        }
        public void CanHandle_TypeHasNotBeenLoadedByGlass_ReturnsTrueOnDemand()
        {
            //Assign
            var mapper = new SitecoreFieldTypeMapper();
            var config = new SitecoreFieldConfiguration();
            config.PropertyInfo = typeof(StubContaining).GetProperty("PropertyFalse");
            var context = Context.Create(Utilities.CreateStandardResolver());
            context.Load(new SitecoreAttributeConfigurationLoader("Glass.Mapper.Sc.Integration"));

            //Act
            var result = mapper.CanHandle(config, context);

            //Assert
            Assert.IsTrue(result);
        }
        public void SetField_ClassContainsIdButItemMissing_ThrowsException()
        {
            //Assign
            var item = Database.GetItem("/sitecore/content/Tests/DataMappers/SitecoreFieldTypeMapper/SetField");
            var targetId = Guid.Parse("{11111111-A3F0-410E-8A6D-07FF3A1E78C3}");
            var mapper = new SitecoreFieldTypeMapper();
            var field = item.Fields[FieldName];

            var config = new SitecoreFieldConfiguration();
            config.PropertyInfo = typeof(StubContaining).GetProperty("PropertyTrue");

            var context = Context.Create(Utilities.CreateStandardResolver());
            context.Load(new SitecoreAttributeConfigurationLoader("Glass.Mapper.Sc.Integration"));
            var service = new SitecoreService(Database, context);

            var propertyValue = new Stub();
            propertyValue.Id = targetId;

            var scContext = new SitecoreDataMappingContext(null, item, service);

            using (new ItemEditing(item, true))
            {
                field.Value = string.Empty;
            }

            //Act
            using (new ItemEditing(item, true))
            {
                mapper.SetField(field, propertyValue, config, scContext);
            }

        }
        public void GetField_FieldRandomText_ReturnsNull()
        {
            //Assign
            var item = Database.GetItem("/sitecore/content/Tests/DataMappers/SitecoreFieldTypeMapper/GetField");
            var targetId = "some random text";
            var mapper = new SitecoreFieldTypeMapper();
            var field = item.Fields[FieldName];
            var config = new SitecoreFieldConfiguration();
            config.PropertyInfo = typeof(StubContaining).GetProperty("PropertyTrue");

            var context = Context.Create(Utilities.CreateStandardResolver());
            context.Load(new SitecoreAttributeConfigurationLoader("Glass.Mapper.Sc.Integration"));
            var service = new SitecoreService(Database, context);


            var scContext = new SitecoreDataMappingContext(null, item, service);

            using (new ItemEditing(item, true))
            {
                field.Value = targetId.ToString();
            }

            //Act
            var result = mapper.GetField(field, config, scContext) as Stub;

            //Assert
            Assert.IsNull(result);

        }
        public void SetField_ContextServiceNull_ThrowsException()
        {
            //Assign
            var item = Database.GetItem("/sitecore/content/Tests/DataMappers/SitecoreFieldTypeMapper/SetField");
            var mapper = new SitecoreFieldTypeMapper();
            var field = item.Fields[FieldName];

            var config = new SitecoreFieldConfiguration();
            config.PropertyInfo = typeof(StubContaining).GetProperty("PropertyNoId");

            var context = Context.Create(Utilities.CreateStandardResolver());
            context.Load(new SitecoreAttributeConfigurationLoader("Glass.Mapper.Sc.Integration"));

            var propertyValue = new StubNoId();

            var scContext = new SitecoreDataMappingContext(null, item, null);

            using (new ItemEditing(item, true))
            {
                field.Value = string.Empty;
            }

            //Act
            using (new ItemEditing(item, true))
            {
                mapper.SetField(field, propertyValue, config, scContext);
            }

            //Assert
            Assert.AreEqual(string.Empty, item[FieldName]);
        }
        public void SetField_ContextNull_ThrowsException()
        {
            //Assign
            var item = Database.GetItem("/sitecore/content/Tests/DataMappers/SitecoreFieldTypeMapper/SetField");
            var mapper = new SitecoreFieldTypeMapper();
            var field = item.Fields[FieldName];

            var config = new SitecoreFieldConfiguration();
            config.PropertyInfo = typeof(StubContaining).GetProperty("PropertyNoId");

            var propertyValue = new StubNoId();

            using (new ItemEditing(item, true))
            {
                field.Value = string.Empty;
            }

            //Act
            using (new ItemEditing(item, true))
            {
                mapper.SetField(field, propertyValue, config, null);
            }

            //Assert
            Assert.AreEqual(string.Empty, item[FieldName]);
        }
        public void GetField_FieldContainsId_ReturnsConcreteType()
        {
            //Assign
            var templateId = Guid.Parse("{BB01B0A5-A3F0-410E-8A6D-07FF3A1E78C3}");

            using (Db database = new Db
            {
                new DbTemplate(new ID(templateId))
                {
                    new DbField("Field")
                    {
                        Type = "text"
                    }
                },

                new Sitecore.FakeDb.DbItem("Target", ID.NewID, new ID(templateId))
            })
            {
                var item = database.GetItem("/sitecore/content/Target");
                var mapper = new SitecoreFieldTypeMapper();
                var field = item.Fields["Field"];
                var config = new SitecoreFieldConfiguration();
                config.PropertyInfo = typeof(StubContaining).GetProperty("PropertyTrue");

                var context = Context.Create(Utilities.CreateStandardResolver());
                context.Load(new OnDemandLoader<SitecoreTypeConfiguration>(typeof(StubContaining)));

                var service = new SitecoreService(database.Database, context);


                var scContext = new SitecoreDataMappingContext(null, item, service);

                using (new ItemEditing(item, true))
                {
                    field.Value = item.ID.ToString();
                }

                //Act
                var result = mapper.GetField(field, config, scContext) as Stub;

                //Assert
                Assert.AreEqual(item.ID.Guid, result.Id);
            }
        }
        public void SetField_ClassContainsIdButItemMissing_ThrowsException()
        {
            //Assign
            var templateId = Guid.Parse("{BB01B0A5-A3F0-410E-8A6D-07FF3A1E78C3}");

            using (Db database = new Db
            {
                new DbTemplate(new ID(templateId))
                {
                    new DbField("Field")
                    {
                        Type = "text"
                    }
                },

                new Sitecore.FakeDb.DbItem("Target", ID.NewID, new ID(templateId))
            })
            {
                var item = database.GetItem("/sitecore/content/Target");
                var targetId = Guid.Parse("{11111111-A3F0-410E-8A6D-07FF3A1E78C3}");
                var mapper = new SitecoreFieldTypeMapper();
                var field = item.Fields["Field"];

                var config = new SitecoreFieldConfiguration();
                config.PropertyInfo = typeof(StubContaining).GetProperty("PropertyTrue");

                var context = Context.Create(Utilities.CreateStandardResolver());
                context.Load(new OnDemandLoader<SitecoreTypeConfiguration>(typeof(StubContaining)));

                var service = new SitecoreService(database.Database, context);

                var propertyValue = new Stub();
                propertyValue.Id = targetId;

                var scContext = new SitecoreDataMappingContext(null, item, service);

                using (new ItemEditing(item, true))
                {
                    field.Value = string.Empty;
                }

                //Act
                Assert.Throws<NullReferenceException>(() =>
                {
                    mapper.SetField(field, propertyValue, config, scContext);
                });
            }
        }
        public void SetField_ContextNull_ThrowsException()
        {
            //Assign
            var templateId = Guid.Parse("{BB01B0A5-A3F0-410E-8A6D-07FF3A1E78C3}");

            using (Db database = new Db
            {
                new DbTemplate(new ID(templateId))
                {
                    new DbField("Field")
                    {
                        Type = "text"
                    }
                },

                new Sitecore.FakeDb.DbItem("Target", ID.NewID, new ID(templateId))
            })
            {
                var item = database.GetItem("/sitecore/content/Target");
                var mapper = new SitecoreFieldTypeMapper();
                var field = item.Fields["Field"];

                var config = new SitecoreFieldConfiguration();
                config.PropertyInfo = typeof(StubContaining).GetProperty("PropertyNoId");

                var propertyValue = new StubNoId();

                using (new ItemEditing(item, true))
                {
                    field.Value = string.Empty;
                }

                //Act
                using (new ItemEditing(item, true))
                {
                    using (new ItemEditing(item, true))
                    {
                        Assert.Throws<ArgumentNullException>(() =>
                        {
                            mapper.SetField(field, propertyValue, config, null);
                        });
                    }
                }

                //Assert
                Assert.AreEqual(string.Empty, item["Field"]);
            }
        }