예제 #1
0
 public void CanGetValuesAsList()
 {
     Assert.Equal(new bool[] { true, false }, LdValue.Convert.Bool.ArrayFrom(new bool[] { true, false }).AsList(LdValue.Convert.Bool));
     Assert.Equal(new bool[] { true, false }, LdValue.Convert.Bool.ArrayOf(true, false).AsList(LdValue.Convert.Bool));
     Assert.Equal(new bool[] { true, false }, LdValue.BuildArray().Add(true).Add(false).Build().AsList(LdValue.Convert.Bool));
     Assert.Equal(new int[] { 1, 2 }, LdValue.Convert.Int.ArrayFrom(new int[] { 1, 2 }).AsList(LdValue.Convert.Int));
     Assert.Equal(new int[] { 1, 2 }, LdValue.Convert.Int.ArrayOf(1, 2).AsList(LdValue.Convert.Int));
     Assert.Equal(new int[] { 1, 2 }, LdValue.BuildArray().Add(1).Add(2).Build().AsList(LdValue.Convert.Int));
     Assert.Equal(new long[] { 1, 2 }, LdValue.Convert.Long.ArrayFrom(new long[] { 1, 2 }).AsList(LdValue.Convert.Long));
     Assert.Equal(new long[] { 1, 2 }, LdValue.Convert.Long.ArrayOf(1, 2).AsList(LdValue.Convert.Long));
     Assert.Equal(new long[] { 1, 2 }, LdValue.BuildArray().Add(1).Add(2).Build().AsList(LdValue.Convert.Long));
     Assert.Equal(new float[] { 1.0f, 2.0f }, LdValue.Convert.Float.ArrayFrom(new float[] { 1.0f, 2.0f }).AsList(LdValue.Convert.Float));
     Assert.Equal(new float[] { 1.0f, 2.0f }, LdValue.Convert.Float.ArrayOf(1.0f, 2.0f).AsList(LdValue.Convert.Float));
     Assert.Equal(new float[] { 1.0f, 2.0f }, LdValue.BuildArray().Add(1.0f).Add(2.0f).Build().AsList(LdValue.Convert.Float));
     Assert.Equal(new double[] { 1.0d, 2.0d }, LdValue.Convert.Double.ArrayFrom(new double[] { 1.0d, 2.0d }).AsList(LdValue.Convert.Double));
     Assert.Equal(new double[] { 1.0d, 2.0d }, LdValue.Convert.Double.ArrayOf(1.0d, 2.0d).AsList(LdValue.Convert.Double));
     Assert.Equal(new double[] { 1.0f, 2.0f }, LdValue.BuildArray().Add(1.0d).Add(2.0d).Build().AsList(LdValue.Convert.Double));
     Assert.Equal(new string[] { "a", "b" }, LdValue.Convert.String.ArrayFrom(new string[] { "a", "b" }).AsList(LdValue.Convert.String));
     Assert.Equal(new string[] { "a", "b" }, LdValue.Convert.String.ArrayOf("a", "b").AsList(LdValue.Convert.String));
     Assert.Equal(new string[] { "a", "b" }, LdValue.BuildArray().Add("a").Add("b").Build().AsList(LdValue.Convert.String));
     Assert.Equal(new LdValue[] { anIntValue, aStringValue },
                  LdValue.ArrayFrom(new LdValue[] { anIntValue, aStringValue }).AsList(LdValue.Convert.Json));
     Assert.Equal(new LdValue[] { anIntValue, aStringValue },
                  LdValue.ArrayOf(anIntValue, aStringValue).AsList(LdValue.Convert.Json));
     Assert.Equal(new LdValue[] { anIntValue, aStringValue },
                  LdValue.BuildArray().Add(anIntValue).Add(aStringValue).Build().AsList(LdValue.Convert.Json));
     Assert.Equal(LdValue.Null, LdValue.Convert.Int.ArrayFrom((IEnumerable <int>)null));
 }
예제 #2
0
        private void TestPrivateAttribute(string privateAttrName, bool globallyPrivate)
        {
            var builder = User.Builder("userkey")
                          .Anonymous(true)
                          .SecondaryKey("s");
            var topJsonBuilder = LdValue.BuildObject()
                                 .Add("key", "userkey")
                                 .Add("anonymous", true)
                                 .Add("secondary", "s");
            var customJsonBuilder = LdValue.BuildObject();
            Action <string, Func <string, IUserBuilderCanMakeAttributePrivate>, string, LdValue.ObjectBuilder> setAttr =
                (attrName, setter, value, jsonBuilder) =>
            {
                if (attrName == privateAttrName)
                {
                    if (globallyPrivate)
                    {
                        setter(value);
                    }
                    else
                    {
                        setter(value).AsPrivateAttribute();
                    }
                }
                else
                {
                    setter(value);
                    jsonBuilder.Add(attrName, value);
                }
            };

            setAttr("avatar", builder.Avatar, "http://avatar", topJsonBuilder);
            setAttr("country", builder.Country, "US", topJsonBuilder);
            setAttr("custom1", v => builder.Custom("custom1", v), "value1", customJsonBuilder);
            setAttr("custom2", v => builder.Custom("custom2", v), "value2", customJsonBuilder);
            setAttr("email", builder.Email, "*****@*****.**", topJsonBuilder);
            setAttr("firstName", builder.FirstName, "first", topJsonBuilder);
            setAttr("ip", builder.IPAddress, "1.2.3.4", topJsonBuilder);
            setAttr("lastName", builder.LastName, "last", topJsonBuilder);
            setAttr("name", builder.Name, "me", topJsonBuilder);

            topJsonBuilder.Add("custom", customJsonBuilder.Build());
            topJsonBuilder.Add("privateAttrs", LdValue.ArrayOf(LdValue.Of(privateAttrName)));
            var userJson = topJsonBuilder.Build();
            var config   = new SimpleConfiguration();

            if (globallyPrivate)
            {
                config.PrivateAttributeNames = new HashSet <string> {
                    privateAttrName
                };
            }
            ;

            TestInlineUserSerialization(builder.Build(), userJson, config);
        }
        public void CanGetValuesAsList()
        {
            Assert.Equal(new bool[] { true, false }, LdValue.Convert.Bool.ArrayFrom(new bool[] { true, false }).AsList(LdValue.Convert.Bool));
            Assert.Equal(new bool[] { true, false }, LdValue.Convert.Bool.ArrayOf(true, false).AsList(LdValue.Convert.Bool));
            Assert.Equal(new bool[] { true, false }, LdValue.BuildArray().Add(true).Add(false).Build().AsList(LdValue.Convert.Bool));
            Assert.Equal(new int[] { 1, 2 }, LdValue.Convert.Int.ArrayFrom(new int[] { 1, 2 }).AsList(LdValue.Convert.Int));
            Assert.Equal(new int[] { 1, 2 }, LdValue.Convert.Int.ArrayOf(1, 2).AsList(LdValue.Convert.Int));
            Assert.Equal(new int[] { 1, 2 }, LdValue.BuildArray().Add(1).Add(2).Build().AsList(LdValue.Convert.Int));
            Assert.Equal(new long[] { 1, 2 }, LdValue.Convert.Long.ArrayFrom(new long[] { 1, 2 }).AsList(LdValue.Convert.Long));
            Assert.Equal(new long[] { 1, 2 }, LdValue.Convert.Long.ArrayOf(1, 2).AsList(LdValue.Convert.Long));
            Assert.Equal(new long[] { 1, 2 }, LdValue.BuildArray().Add(1).Add(2).Build().AsList(LdValue.Convert.Long));
            Assert.Equal(new float[] { 1.0f, 2.0f }, LdValue.Convert.Float.ArrayFrom(new float[] { 1.0f, 2.0f }).AsList(LdValue.Convert.Float));
            Assert.Equal(new float[] { 1.0f, 2.0f }, LdValue.Convert.Float.ArrayOf(1.0f, 2.0f).AsList(LdValue.Convert.Float));
            Assert.Equal(new float[] { 1.0f, 2.0f }, LdValue.BuildArray().Add(1.0f).Add(2.0f).Build().AsList(LdValue.Convert.Float));
            Assert.Equal(new double[] { 1.0d, 2.0d }, LdValue.Convert.Double.ArrayFrom(new double[] { 1.0d, 2.0d }).AsList(LdValue.Convert.Double));
            Assert.Equal(new double[] { 1.0d, 2.0d }, LdValue.Convert.Double.ArrayOf(1.0d, 2.0d).AsList(LdValue.Convert.Double));
            Assert.Equal(new double[] { 1.0f, 2.0f }, LdValue.BuildArray().Add(1.0d).Add(2.0d).Build().AsList(LdValue.Convert.Double));
            Assert.Equal(new string[] { "a", "b" }, LdValue.Convert.String.ArrayFrom(new string[] { "a", "b" }).AsList(LdValue.Convert.String));
            Assert.Equal(new string[] { "a", "b" }, LdValue.Convert.String.ArrayOf("a", "b").AsList(LdValue.Convert.String));
            Assert.Equal(new string[] { "a", "b" }, LdValue.BuildArray().Add("a").Add("b").Build().AsList(LdValue.Convert.String));
            Assert.Equal(new LdValue[] { anIntValue, aStringValue },
                         LdValue.ArrayFrom(new LdValue[] { anIntValue, aStringValue }).AsList(LdValue.Convert.Json));
            Assert.Equal(new LdValue[] { anIntValue, aStringValue },
                         LdValue.ArrayOf(anIntValue, aStringValue).AsList(LdValue.Convert.Json));
            Assert.Equal(new LdValue[] { anIntValue, aStringValue },
                         LdValue.BuildArray().Add(anIntValue).Add(aStringValue).Build().AsList(LdValue.Convert.Json));

#pragma warning disable 0618
            Assert.Equal(new bool[] { true, false }, LdValue.FromJToken(new JArray {
                new JValue(true), new JValue(false)
            }).AsList(LdValue.Convert.Bool));
            Assert.Equal(new int[] { 1, 2 }, LdValue.FromJToken(new JArray {
                new JValue(1), new JValue(2)
            }).AsList(LdValue.Convert.Int));
            Assert.Equal(new long[] { 1, 2 }, LdValue.FromJToken(new JArray {
                new JValue(1L), new JValue(2L)
            }).AsList(LdValue.Convert.Long));
            Assert.Equal(new float[] { 1.0f, 2.0f }, LdValue.FromJToken(new JArray {
                new JValue(1.0f), new JValue(2.0f)
            }).AsList(LdValue.Convert.Float));
            Assert.Equal(new double[] { 1.0d, 2.0d }, LdValue.FromJToken(new JArray {
                new JValue(1.0d), new JValue(2.0d)
            }).AsList(LdValue.Convert.Double));
            Assert.Equal(new string[] { "a", "b" }, LdValue.FromJToken(new JArray {
                new JValue("a"), new JValue("b")
            }).AsList(LdValue.Convert.String));
            Assert.Equal(new LdValue[] { anIntValue, aStringValue }, LdValue.FromJToken(new JArray {
                new JValue(someInt), new JValue(someString)
            }).AsList(LdValue.Convert.Json));
#pragma warning restore 0618

            Assert.Equal(LdValue.Null, LdValue.Convert.Int.ArrayFrom((IEnumerable <int>)null));
        }
        // Constructs a flag that always returns the same value. This is done by giving it a
        // single variation and setting the fallthrough variation to that.
        internal static object FlagWithValue(string key, LdValue value, int version)
        {
            var json = LdValue.BuildObject()
                       .Add("key", key)
                       .Add("version", version)
                       .Add("on", true)
                       .Add("variations", LdValue.ArrayOf(value))
                       .Add("fallthrough", LdValue.BuildObject().Add("variation", 0).Build())
                       .Build()
                       .ToJsonString();

            return(DataModel.Features.Deserialize(json).Item);
        }
        public static ItemDescriptor MakeFlagThatReturnsVariationForSegmentMatch(int version, int variation)
        {
            var flagJson = LdValue.BuildObject()
                           .Add("key", FlagKey)
                           .Add("version", version)
                           .Add("on", true)
                           .Add("variations", LdValue.ArrayOf(GoodValue1, GoodValue2, BadValue))
                           .Add("fallthrough", LdValue.BuildObject().Add("variation", BadVariation).Build())
                           .Add("rules", LdValue.BuildArray()
                                .Add(LdValue.BuildObject()
                                     .Add("variation", variation)
                                     .Add("clauses", LdValue.BuildArray()
                                          .Add(LdValue.BuildObject()
                                               .Add("attribute", "")
                                               .Add("op", "segmentMatch")
                                               .Add("values", LdValue.ArrayOf(LdValue.Of(SegmentKey)))
                                               .Build())
                                          .Build())
                                     .Build())
                                .Build())
                           .Build().ToJsonString();

            return(DataModel.Features.Deserialize(flagJson));
        }