public void GetValueTest()
        {
            var dataTypeService = Mock.Of <IDataTypeService>();

            var propListDataType = new DataTypeDefinition("propListEditorAlias")
            {
                Id           = 1,
                Key          = Guid.Parse("74AFF355-537A-4443-9801-C131FE83FF1F"),
                DatabaseType = DataTypeDatabaseType.Ntext
            };

            var innerDataType = new DataTypeDefinition("innerEditorAlias")
            {
                Id           = 2,
                Key          = Guid.Parse("D21BA417-98AC-4D05-8EF9-0ED3D75A8C0D"),
                DatabaseType = DataTypeDatabaseType.Integer // for true/false
            };

            var dataTypes = new[] { propListDataType, innerDataType };

            Mock.Get(dataTypeService)
            .Setup(x => x.GetDataTypeDefinitionById(It.IsAny <Guid>()))
            .Returns <Guid>(id => dataTypes.FirstOrDefault(x => x.Key == id));

            var preValues = new Dictionary <int, PreValueCollection>
            {
                { 1, new PreValueCollection(new Dictionary <string, PreValue>
                    {
                        { "dataType", new PreValue(innerDataType.Key.ToString()) }
                    }) }
            };

            Mock.Get(dataTypeService)
            .Setup(x => x.GetPreValuesCollectionByDataTypeId(It.IsAny <int>()))
            .Returns <int>(id => preValues.TryGetValue(id, out var collection) ? collection : null);

            ValueConnectorCollection connectors = null;
            var defaultConnector  = new DefaultValueConnector();
            var propListConnector = new PropertyListValueConnector(dataTypeService, new Lazy <ValueConnectorCollection>(() => connectors));

            connectors = new ValueConnectorCollection(new Dictionary <string, IValueConnector>
            {
                { "innerEditorAlias", defaultConnector },
                { "propListEditorAlias", propListConnector }
            });

            var input = $"{{\"dtd\":\"{innerDataType.Key}\",\"values\":[0]}}";

            var propertyType = new PropertyType(propListDataType);
            var property     = new Property(propertyType, input);
            var dependencies = new List <ArtifactDependency>();
            var output       = propListConnector.GetValue(property, dependencies);

            Console.WriteLine(output);

            var expected = $"{{\"dtd\":\"{innerDataType.Key}\",\"values\":[\"i0\"]}}";

            Assert.AreEqual(expected, output);
        }
        public void GetValueTest()
        {
            var dataTypeService = Mock.Of <IDataTypeService>();

            var tupleDataType = new DataTypeDefinition("tupleEditorAlias")
            {
                Id           = 1,
                Key          = Guid.Parse("3BBFB03B-B6AD-4310-986B-44E9F31A4F1F"),
                DatabaseType = DataTypeDatabaseType.Ntext
            };

            var innerDataType = new DataTypeDefinition("innerEditorAlias")
            {
                Id           = 2,
                Key          = Guid.Parse("0F6DCC71-2FA7-496B-A858-8D6DDAF37F59"),
                DatabaseType = DataTypeDatabaseType.Integer // for true/false
            };

            var dataTypes = new[] { tupleDataType, innerDataType };

            Mock.Get(dataTypeService)
            .Setup(x => x.GetDataTypeDefinitionById(It.IsAny <Guid>()))
            .Returns <Guid>(id => dataTypes.FirstOrDefault(x => x.Key == id));

            var preValues = new Dictionary <int, PreValueCollection>
            {
                { 1, new PreValueCollection(new Dictionary <string, PreValue> {
                        { "dataTypes", new PreValue($"[{{\"key\":\"{Guid.Empty}\",\"dtd\":\"{innerDataType.Key}\"}}]") }
                    }) }
            };

            Mock.Get(dataTypeService)
            .Setup(x => x.GetPreValuesCollectionByDataTypeId(It.IsAny <int>()))
            .Returns <int>(id => preValues.TryGetValue(id, out var collection) ? collection : null);

            ValueConnectorCollection connectors = null;
            var defaultConnector = new DefaultValueConnector();
            var tupleConnector   = new TupleValueConnector(dataTypeService, new Lazy <ValueConnectorCollection>(() => connectors));

            connectors = new ValueConnectorCollection(new Dictionary <string, IValueConnector>
            {
                { "innerEditorAlias", defaultConnector },
                { "tupleEditorAlias", tupleConnector }
            });

            var input = $"[{{\"key\":\"{Guid.Empty}\",\"dtd\":\"{innerDataType.Key}\",\"value\":0}}]";

            var propertyType = new PropertyType(tupleDataType);
            var property     = new Property(propertyType, input);
            var dependencies = new List <ArtifactDependency>();
            var output       = tupleConnector.GetValue(property, dependencies);

            Console.WriteLine(output);

            var expected = $"[{{\"key\":\"{Guid.Empty}\",\"dtd\":\"{innerDataType.Key}\",\"value\":\"i0\"}}]";

            Assert.AreEqual(expected, output);
        }
        public void GetValueTest()
        {
            var dataTypeService = Mock.Of <IDataTypeService>();

            var vortoDataType = new DataTypeDefinition("vortoEditorAlias")
            {
                Id           = 1,
                Key          = Guid.Parse("ebd71353-206e-4df6-8a4c-e194519f7794"),
                DatabaseType = DataTypeDatabaseType.Ntext
            };

            var innerDataType = new DataTypeDefinition("innerEditorAlias")
            {
                Id           = 2,
                Key          = Guid.Parse("92897bc6-a5f3-4ffe-ae27-f2e7e33dda49"),
                DatabaseType = DataTypeDatabaseType.Integer // for true/false
            };

            var dataTypes = new[] { vortoDataType, innerDataType };

            Mock.Get(dataTypeService)
            .Setup(x => x.GetDataTypeDefinitionById(It.IsAny <Guid>()))
            .Returns <Guid>(id => dataTypes.FirstOrDefault(x => x.Key == id));

            var preValues = new Dictionary <int, PreValueCollection>
            {
                { 1, new PreValueCollection(new Dictionary <string, PreValue>
                    {
                        { "dataType", new PreValue("{\"guid\":\"92897bc6-a5f3-4ffe-ae27-f2e7e33dda49\",\"name\":\"True/False\",\"propertyEditorAlias\":\"innerEditorAlias\"}") }
                    }) }
            };

            Mock.Get(dataTypeService)
            .Setup(x => x.GetPreValuesCollectionByDataTypeId(It.IsAny <int>()))
            .Returns <int>(id => preValues.TryGetValue(id, out var collection) ? collection : null);

            ValueConnectorCollection connectors = null;
            var defaultConnector = new DefaultValueConnector();
            var vortoConnector   = new VortoValueConnector(dataTypeService, new Lazy <ValueConnectorCollection>(() => connectors));

            connectors = new ValueConnectorCollection(new Dictionary <string, IValueConnector>
            {
                { "innerEditorAlias", defaultConnector },
                { "vortoEditorAlias", vortoConnector }
            });

            var input = "{\"values\":{\"da-DK\":0,\"de-DE\":0,\"en-GB\":0,\"en\":0},\"dtdGuid\":\"ebd71353-206e-4df6-8a4c-e194519f7794\"}";

            var propertyType = new PropertyType(vortoDataType);
            var property     = new Property(propertyType, input);
            var dependencies = new List <ArtifactDependency>();
            var output       = vortoConnector.GetValue(property, dependencies);

            Console.WriteLine(output);
            Assert.AreEqual("{\"values\":{\"da-DK\":\"i0\",\"de-DE\":\"i0\",\"en-GB\":\"i0\",\"en\":\"i0\"},\"dtdGuid\":\"ebd71353-206e-4df6-8a4c-e194519f7794\"}", output);
        }
        public void SetValueTest()
        {
            var dataTypeService = Mock.Of <IDataTypeService>();

            var propListDataType = new DataTypeDefinition("propListEditorAlias")
            {
                Id           = 1,
                Key          = Guid.Parse("74AFF355-537A-4443-9801-C131FE83FF1F"),
                DatabaseType = DataTypeDatabaseType.Ntext
            };

            var innerDataType = new DataTypeDefinition("innerEditorAlias")
            {
                Id           = 2,
                Key          = Guid.Parse("D21BA417-98AC-4D05-8EF9-0ED3D75A8C0D"),
                DatabaseType = DataTypeDatabaseType.Integer // for true/false
            };

            var dataTypes = new[] { propListDataType, innerDataType };

            Mock.Get(dataTypeService)
            .Setup(x => x.GetDataTypeDefinitionById(It.IsAny <Guid>()))
            .Returns <Guid>(id => dataTypes.FirstOrDefault(x => x.Key == id));

            var preValues = new Dictionary <int, PreValueCollection>
            {
                { 1, new PreValueCollection(new Dictionary <string, PreValue>
                    {
                        { "dataType", new PreValue(innerDataType.Key.ToString()) }
                    }) }
            };

            Mock.Get(dataTypeService)
            .Setup(x => x.GetPreValuesCollectionByDataTypeId(It.IsAny <int>()))
            .Returns <int>(id => preValues.TryGetValue(id, out var collection) ? collection : null);

            ValueConnectorCollection connectors = null;
            var defaultConnector  = new DefaultValueConnector();
            var propListConnector = new PropertyListValueConnector(dataTypeService, new Lazy <ValueConnectorCollection>(() => connectors));

            connectors = new ValueConnectorCollection(new Dictionary <string, IValueConnector>
            {
                { "innerEditorAlias", defaultConnector },
                { "propListEditorAlias", propListConnector }
            });

            var input = $"{{\"dtd\":\"{innerDataType.Key}\",\"values\":[\"i0\"]}}";

            UmbracoConfig.For.SetUmbracoSettings(GenerateMockSettings());

            var propListPropertyType = new PropertyType(propListDataType, "propListProperty");
            var propListProperty     = new Property(propListPropertyType, null); // value is going to be replaced
            var propListContent      = new Content("mockContent", -1, new ContentType(-1), new PropertyCollection(new List <Property> {
                propListProperty
            }));

            propListConnector.SetValue(propListContent, "propListProperty", input);

            var output = propListContent.GetValue("propListProperty");

            Assert.IsInstanceOf <string>(output);

            Console.WriteLine(output);

            var expected = $"{{\"dtd\":\"{innerDataType.Key}\",\"values\":[0]}}";

            Assert.AreEqual(expected, output);
        }
        public void SetValueTest()
        {
            var dataTypeService = Mock.Of <IDataTypeService>();

            var tupleDataType = new DataTypeDefinition("tupleEditorAlias")
            {
                Id           = 1,
                Key          = Guid.Parse("3BBFB03B-B6AD-4310-986B-44E9F31A4F1F"),
                DatabaseType = DataTypeDatabaseType.Ntext
            };

            var innerDataType = new DataTypeDefinition("innerEditorAlias")
            {
                Id           = 2,
                Key          = Guid.Parse("0F6DCC71-2FA7-496B-A858-8D6DDAF37F59"),
                DatabaseType = DataTypeDatabaseType.Integer // for true/false
            };

            var dataTypes = new[] { tupleDataType, innerDataType };

            Mock.Get(dataTypeService)
            .Setup(x => x.GetDataTypeDefinitionById(It.IsAny <Guid>()))
            .Returns <Guid>(id => dataTypes.FirstOrDefault(x => x.Key == id));

            var preValues = new Dictionary <int, PreValueCollection>
            {
                { 1, new PreValueCollection(new Dictionary <string, PreValue> {
                        { "dataTypes", new PreValue($"[{{\"key\":\"{Guid.Empty}\",\"dtd\":\"{innerDataType.Key}\"}}]") }
                    }) }
            };

            Mock.Get(dataTypeService)
            .Setup(x => x.GetPreValuesCollectionByDataTypeId(It.IsAny <int>()))
            .Returns <int>(id => preValues.TryGetValue(id, out var collection) ? collection : null);

            ValueConnectorCollection connectors = null;
            var defaultConnector = new DefaultValueConnector();
            var tupleConnector   = new TupleValueConnector(dataTypeService, new Lazy <ValueConnectorCollection>(() => connectors));

            connectors = new ValueConnectorCollection(new Dictionary <string, IValueConnector>
            {
                { "innerEditorAlias", defaultConnector },
                { "tupleEditorAlias", tupleConnector }
            });

            var input = $"[{{\"key\":\"{Guid.Empty}\",\"dtd\":\"{innerDataType.Key}\",\"value\":\"i0\"}}]";

            UmbracoConfig.For.SetUmbracoSettings(GenerateMockSettings());

            var tuplePropertyType = new PropertyType(tupleDataType, "tupleProperty");
            var tupleProperty     = new Property(tuplePropertyType, null); // value is going to be replaced
            var tupleContent      = new Content("mockContent", -1, new ContentType(-1), new PropertyCollection(new List <Property> {
                tupleProperty
            }));

            tupleConnector.SetValue(tupleContent, "tupleProperty", input);

            var output = tupleContent.GetValue("tupleProperty");

            Assert.IsInstanceOf <string>(output);

            Console.WriteLine(output);

            var expected = $"[{{\"key\":\"{Guid.Empty}\",\"dtd\":\"{innerDataType.Key}\",\"value\":0}}]";

            Assert.AreEqual(expected, output);
        }
        public void SetValueTest()
        {
            var dataTypeService = Mock.Of <IDataTypeService>();

            var vortoDataType = new DataTypeDefinition("vortoEditorAlias")
            {
                Id           = 1,
                Key          = Guid.Parse("ebd71353-206e-4df6-8a4c-e194519f7794"),
                DatabaseType = DataTypeDatabaseType.Ntext
            };

            var innerDataType = new DataTypeDefinition("innerEditorAlias")
            {
                Id           = 2,
                Key          = Guid.Parse("92897bc6-a5f3-4ffe-ae27-f2e7e33dda49"),
                DatabaseType = DataTypeDatabaseType.Integer // for true/false
            };

            var dataTypes = new[] { vortoDataType, innerDataType };

            Mock.Get(dataTypeService)
            .Setup(x => x.GetDataTypeDefinitionById(It.IsAny <Guid>()))
            .Returns <Guid>(id => dataTypes.FirstOrDefault(x => x.Key == id));

            var preValues = new Dictionary <int, PreValueCollection>
            {
                { 1, new PreValueCollection(new Dictionary <string, PreValue>
                    {
                        { "dataType", new PreValue("{\"guid\":\"92897bc6-a5f3-4ffe-ae27-f2e7e33dda49\",\"name\":\"True/False\",\"propertyEditorAlias\":\"innerEditorAlias\"}") }
                    }) }
            };

            Mock.Get(dataTypeService)
            .Setup(x => x.GetPreValuesCollectionByDataTypeId(It.IsAny <int>()))
            .Returns <int>(id => preValues.TryGetValue(id, out var collection) ? collection : null);

            ValueConnectorCollection connectors = null;
            var defaultConnector = new DefaultValueConnector();
            var vortoConnector   = new VortoValueConnector(dataTypeService, new Lazy <ValueConnectorCollection>(() => connectors));

            connectors = new ValueConnectorCollection(new Dictionary <string, IValueConnector>
            {
                { "innerEditorAlias", defaultConnector },
                { "vortoEditorAlias", vortoConnector }
            });

            var input = "{\"values\":{\"da-DK\":\"i0\",\"de-DE\":\"i0\",\"en-GB\":\"i0\",\"en\":\"i0\"},\"dtdGuid\":\"ebd71353-206e-4df6-8a4c-e194519f7794\"}";

            UmbracoConfig.For.SetUmbracoSettings(GenerateMockSettings());

            var vortoPropertyType = new PropertyType(vortoDataType, "vortoProperty");
            var vortoProperty     = new Property(vortoPropertyType, null); // value is going to be replaced
            var vortoContent      = new Content("mockContent", -1, new ContentType(-1), new PropertyCollection(new List <Property> {
                vortoProperty
            }));

            vortoConnector.SetValue(vortoContent, "vortoProperty", input);

            var output = vortoContent.GetValue("vortoProperty");

            // fixme - why strings and not integers?!
            // so "i0" is sent to default connector, but it sets value to "0" not 0 - wtf?

            Assert.IsInstanceOf <string>(output);

            Console.WriteLine(output);
            Assert.AreEqual("{\"values\":{\"da-DK\":0,\"de-DE\":0,\"en-GB\":0,\"en\":0},\"dtdGuid\":\"ebd71353-206e-4df6-8a4c-e194519f7794\"}", output);
        }