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