public void AddToData_DuplicateKeysHandling_Throw()
        {
            const string key = "flag1";

            FeatureFlag initialFeatureFlag = new FeatureFlag(key, version: 0, deleted: false);

            Dictionary <IVersionedDataKind, IDictionary <string, IVersionedData> > data =
                new Dictionary <IVersionedDataKind, IDictionary <string, IVersionedData> >
            {
                {
                    VersionedDataKind.Features,
                    new Dictionary <string, IVersionedData>
                    {
                        { key, initialFeatureFlag }
                    }
                }
            };

            FlagFileData fileData = new FlagFileData
            {
                Flags = new Dictionary <string, JToken>
                {
                    {
                        key,
                        new JObject(
                            new JProperty("key", key),
                            new JProperty("version", 1)
                            )
                    }
                }
            };

            FlagFileDataMerger merger = new FlagFileDataMerger(DuplicateKeysHandling.Throw);

            Exception err = Assert.Throws <Exception>(() =>
            {
                merger.AddToData(fileData, data);
            });

            Assert.Equal("in \"features\", key \"flag1\" was already defined", err.Message);

            IVersionedData postFeatureFlag = data[VersionedDataKind.Features][key];

            Assert.Same(initialFeatureFlag, postFeatureFlag);
            Assert.Equal(0, postFeatureFlag.Version);
        }
        public void AddToData_DuplicateKeysHandling_Ignore()
        {
            const string key = "flag1";

            FeatureFlag initialFeatureFlag = new FeatureFlag(key, version: 0, deleted: false);

            Dictionary <IVersionedDataKind, IDictionary <string, IVersionedData> > data =
                new Dictionary <IVersionedDataKind, IDictionary <string, IVersionedData> >
            {
                {
                    VersionedDataKind.Features,
                    new Dictionary <string, IVersionedData>
                    {
                        { key, initialFeatureFlag }
                    }
                }
            };

            FlagFileData fileData = new FlagFileData
            {
                Flags = new Dictionary <string, JToken>
                {
                    {
                        key,
                        new JObject(
                            new JProperty("key", key),
                            new JProperty("version", 1)
                            )
                    }
                }
            };

            FlagFileDataMerger merger = new FlagFileDataMerger(DuplicateKeysHandling.Ignore);

            merger.AddToData(fileData, data);

            IVersionedData postFeatureFlag = data[VersionedDataKind.Features][key];

            Assert.Same(initialFeatureFlag, postFeatureFlag);
            Assert.Equal(0, postFeatureFlag.Version);
        }