Esempio n. 1
0
        public async Task TestFilterOrderDesc(string keyField, int rangeStart, int rangeEnd)
        {
            int expectedCount = rangeEnd - rangeStart + 1;

            // Arrange
            var request = new HttpRequestMessage(HttpMethod.Get, $"{uri}?$count=true&$orderby={keyField} desc&$filter=({keyField} ge {rangeStart}) and ({keyField} le {rangeEnd})");

            using (var response = await _client.SendAsync(request))
            {
                response.EnsureSuccessStatusCode();

                // Assert
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                var res = HttpContentHelper.DerializeJsonFromStream <ODataResponse <Person> >(await response.Content.ReadAsStreamAsync());

                // Assert - Values count
                Assert.Equal(res.value.Count, expectedCount);

                // Assert - Count
                Assert.Equal(res.odataCount, expectedCount);

                // Assert - first id
                Assert.Equal(res.value[0].id, rangeEnd);

                // Assert - last id
                Assert.Equal(res.value[res.value.Count - 1].id, rangeStart);
            }
        }
Esempio n. 2
0
        public async Task TestFilterContains(string fieldName, string contains, int expectedCount)
        {
            // Arrange
            var request = new HttpRequestMessage(HttpMethod.Get, $"{uri}?$count=true&$filter=contains({fieldName},'{contains}')");

            using (var response = await _client.SendAsync(request))
            {
                response.EnsureSuccessStatusCode();

                // Assert
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                var res = HttpContentHelper.DerializeJsonFromStream <ODataResponse <Person> >(await response.Content.ReadAsStreamAsync());

                // Assert - Values count
                Assert.Equal(res.value.Count, expectedCount);

                // Assert - Count
                Assert.Equal(res.odataCount, expectedCount);

                // Assert
                foreach (var val in res.value)
                {
                    Assert.Contains(contains, val.first);
                }
            }
        }
Esempio n. 3
0
        public void HttpContentHelper_StringContentJson_Encodes_Object_As_Json()
        {
            var content = HttpContentHelper.StringContentJson(new { Value = 1 });
            var text    = content.ReadAsStringAsync().Result;

            Assert.AreEqual(@"{""Value"":1}", text);
        }
        public VideoStreamResult PlayVideoAsync(string filename)
        {
            var path = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", filename);
            var httpContentHelper = new HttpContentHelper();

            return(new VideoStreamResult(new FileInfo(path).OpenRead(), httpContentHelper.GetContentType(path)));
        }
Esempio n. 5
0
        public void HttpContentHelper_FormUrlEncoded_Sets_The_ContentType_Header()
        {
            var content = HttpContentHelper.FormUrlEncoded(new [, ] {
                { "key1", "value1" }
            });

            Assert.AreEqual("application/x-www-form-urlencoded", content.Headers.ContentType.ToString());
        }
Esempio n. 6
0
        public static async Task <HttpResponseMessage> PostAsync <T>(this HttpClient httpClient, String requestUri, T contentObj)
        {
            HttpContent         content             = HttpContentHelper.ToJsonContent(contentObj);
            HttpResponseMessage httpResponseMessage = await httpClient.PostAsync(requestUri, content);

            httpResponseMessage.EnsureSuccessStatusCode();
            return(httpResponseMessage);
        }
Esempio n. 7
0
        public void HttpContentHelper_FormUrlEncoded_Encodes_Values()
        {
            var content = HttpContentHelper.FormUrlEncoded(new [, ] {
                { "key", "&" }
            });
            var text = content.ReadAsStringAsync().Result;

            Assert.AreEqual("key=%26", text);
        }
Esempio n. 8
0
        public void HttpContentHelper_FormUrlEncoded_Handles_Empty_Value_Correctly()
        {
            var content = HttpContentHelper.FormUrlEncoded(new [, ] {
                { "key", "" }
            });
            var text = content.ReadAsStringAsync().Result;

            Assert.AreEqual("key=", text);
        }
Esempio n. 9
0
        public void HttpContentHelper_FormUrlEncoded_Returns_FormUrlEncodedContent()
        {
            var content = HttpContentHelper.FormUrlEncoded(new [, ] {
                { "key1", "value1" },
                { "key2", "value2" },
            });
            var text = content.ReadAsStringAsync().Result;

            Assert.AreEqual("key1=value1&key2=value2", text);
        }
Esempio n. 10
0
        public FileStreamResult DownloadFileAsyn(string filename)
        {
            var path = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", filename);
            var httpContentHelper = new HttpContentHelper();

            Response.ContentType = httpContentHelper.GetContentType(path);
            var stream = new FileInfo(path).OpenRead();

            return(File(stream, httpContentHelper.GetContentType(path), filename));
        }
Esempio n. 11
0
        public static async Task <IResponse <TReturn> > PostAsync <T, TReturn>(this HttpClient httpClient, String requestUri, T contentObj)
            where TReturn : class
        {
            HttpContent         content             = HttpContentHelper.ToJsonContent(contentObj);
            HttpResponseMessage httpResponseMessage = await httpClient.PostAsync(requestUri, content);

            httpResponseMessage.EnsureSuccessStatusCode();
            TReturn obj = await httpResponseMessage.ReadContentAsAsync <TReturn>();

            IResponse <TReturn> response = new Response <TReturn>(httpResponseMessage, obj);

            return(response);
        }
Esempio n. 12
0
        /// <summary>
        ///     Post current ad creative to facebook page as an asynchronous operation.
        ///     <see cref="AdCreative.Id"/> is required.
        /// </summary>
        /// <param name="accessToken">
        ///     User access token.
        /// </param>
        /// <param name="pageAccessToken">
        ///     Page access token.
        /// </param>
        /// <returns>
        ///     The task object representing the asynchronous operation.
        /// </returns>
        public async Task <ResponseMessage <string> > PublishAsync(string accessToken, string pageAccessToken)
        {
            var storyId = await GetEffectiveObjectStoryIdAsync(accessToken);

            if (!String.IsNullOrEmpty(storyId))
            {
                var xref = $"f{Guid.NewGuid().ToString("N").Remove(14).ToLower()}"; // It seems that facebook doesn't check this argument.
                var dic  = new Dictionary <string, string>
                {
                    { "_reqName", "object:post" },
                    { "include_headers", "false" },
                    { "is_published", "true" },
                    { "locale", "en_US" },
                    { "method", "post" },
                    { "pretty", "0" },
                    { "suppress_http_code", "1" },
                    { "xref", xref },
                    { "access_token", pageAccessToken }
                };

                var request = new HttpRequestMessage
                {
                    RequestUri = new Uri(Basic.Apis.Marketing.AdCreativePublishing(storyId), UriKind.Absolute),
                    Method     = HttpMethod.Post,
                    Content    = HttpContentHelper.CreateFormUrlEncodedContentFrom <object>(null, dic.ToArray())
                };

                using (var client = new HttpClient())
                {
                    var response = await client.SendAsync(request);

                    return(await response.ToResponseMessageAsync());
                }
            }
            else
            {
                return(new ResponseMessage <string>
                {
                    Code = ResponseCode.UNKNOWN_ERROR,
                    ReasonPhrase = "Failed to publish current ad creative to facebook."
                });
            }
        }
Esempio n. 13
0
        /// <summary>
        ///     Publishes current post to facebook as an asynchronous operation.
        /// </summary>
        /// <param name="targetId">
        ///     The target of post publishing.
        /// </param>
        /// <param name="accessToken">
        ///     Access token.
        /// </param>
        /// <returns>
        ///     The task object representing the asynchronous operation.
        /// </returns>
        public async Task <ResponseMessage <string> > PublishAsync(string targetId, string accessToken)
        {
            var dic = new Dictionary <string, string>
            {
                { "access_token", accessToken }
            };

            var request = new HttpRequestMessage
            {
                RequestUri = new Uri(Basic.Apis.Gragh.PostPublishing(targetId), UriKind.Absolute),
                Method     = HttpMethod.Post,
                Content    = HttpContentHelper.CreateFormUrlEncodedContentFrom(this, dic.ToArray())
            };

            using (var client = new HttpClient())
            {
                var response = await client.SendAsync(request);

                return(await response.ToResponseMessageAsync());
            }
        }
Esempio n. 14
0
        /// <summary>
        ///      Posts an ad creative creating request to facebook with user's ad account id as an asynchronous
        ///      operation.
        /// </summary>
        /// <param name="adAccountId">
        ///     The ad account id of user.
        /// </param>
        /// <param name="accessToken">
        ///     User access token.
        /// </param>
        /// <returns>
        ///     The task object representing the asynchronous operation.
        /// </returns>
        public async Task <ResponseMessage <string> > PostAsync(string adAccountId, string accessToken)
        {
            var dic = new Dictionary <string, string>
            {
                { "access_token", accessToken }
            };

            var request = new HttpRequestMessage
            {
                RequestUri = new Uri(Basic.Apis.Marketing.AdCreative(adAccountId), UriKind.Absolute),
                Method     = HttpMethod.Post,
                Content    = HttpContentHelper.CreateMultipartFormDataContentFrom(this, dic.ToArray())
            };

            using (var client = new HttpClient())
            {
                var response = await client.SendAsync(request);

                return(await response.ToResponseMessageAsync());
            }
        }
Esempio n. 15
0
        public async Task TestCountTop(string method, int top)
        {
            // Arrange
            var request = new HttpRequestMessage(new HttpMethod(method), $"{uri}?$count=true&$top={top}");

            using (var response = await _client.SendAsync(request))
            {
                response.EnsureSuccessStatusCode();

                // Assert
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                var res = HttpContentHelper.DerializeJsonFromStream <ODataResponse <Person> >(await response.Content.ReadAsStreamAsync());

                // Assert - Top
                Assert.Equal(res.value.Count, top);

                // Assert - Count +/- 1
                Assert.True((res.odataCount >= odataCount) && (res.odataCount <= (odataCount + 1)));
            }
        }
Esempio n. 16
0
        /// <summary>
        ///     Get effective_object_story_id by the <see cref="AdCreative"/> as an asynchronous operation.
        /// </summary>
        /// <param name="accessToken">
        ///     User access token.
        /// </param>
        /// <returns>
        ///     The task object representing the asynchronous operation.
        /// </returns>
        /// <exception cref="Exception">
        ///     Throw if failed to get effective_object_story_id.
        /// </exception>
        private async Task <string> GetEffectiveObjectStoryIdAsync(string accessToken)
        {
            var dic = new Dictionary <string, string>
            {
                { "fields", "effective_object_story_id" },
                { "access_token", accessToken }
            };

            var request = new HttpRequestMessage
            {
                RequestUri = new Uri(Basic.Apis.Marketing.AdCreativeInfo(this.Id), UriKind.Absolute),
                Method     = HttpMethod.Post,
                Content    = HttpContentHelper.CreateFormUrlEncodedContentFrom <object>(null, dic.ToArray())
            };

            using (var client = new HttpClient())
            {
                var response = await client.SendAsync(request);

                var responseMsg = await response.ToResponseMessageAsync();

                if (responseMsg.Code == ResponseCode.SUCCESS)
                {
                    var jobj = JObject.Parse(responseMsg.Data);

                    if (jobj["effective_object_story_id"] != null)
                    {
                        return(jobj["effective_object_story_id"].ToString());
                    }
                    else
                    {
                        return(null);
                    }
                }
                else
                {
                    throw new Exception(responseMsg.ReasonPhrase);
                }
            }
        }
Esempio n. 17
0
        public async Task <FileResult> DownloadFile(string filename)
        {
            if (string.IsNullOrEmpty(filename))
            {
                return(null);
            }

            var path = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", filename);

            var memory = new MemoryStream();

            using (var stream = new FileInfo(path).OpenRead())
            {
                await stream.CopyToAsync(memory);

                stream.Close();
            }
            memory.Position = 0;
            var httpContentHelper = new HttpContentHelper();

            return(File(memory, httpContentHelper.GetContentType(path), Path.GetFileName(path)));
        }
Esempio n. 18
0
 public void HttpContentHelper_FormUrlEncoded_Throws_On_Second_Dimension_Too_Small()
 {
     HttpContentHelper.FormUrlEncoded(new [, ] {
         { "1" }
     });
 }
        public async Task TestThrottleDelaySecs(int throttleDelaySecs)
        {
            // Set throttleDelaySecs
            var request = new HttpRequestMessage(HttpMethod.Post, $"{uriApi}throttle/{throttleDelaySecs}");

            using (var response = await _client.SendAsync(request))
            {
                response.EnsureSuccessStatusCode();

                // Assert
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);
            }

            // Check if value was assigned properly
            request = new HttpRequestMessage(HttpMethod.Get, $"{uriApi}");

            using (var response = await _client.SendAsync(request))
            {
                response.EnsureSuccessStatusCode();

                // Assert
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                var res = HttpContentHelper.DerializeJsonFromStream <Dictionary <string, int> >(await response.Content.ReadAsStreamAsync());

                // Assert
                Assert.True(res.ContainsKey("throttleDelaySecs"));

                // Assert
                Assert.True(res["throttleDelaySecs"] == throttleDelaySecs);
            }

            // Verify is throttling is indeed working as expected
            request = new HttpRequestMessage(HttpMethod.Get, $"{uriOdata}?$count=true&$top=1");

            Stopwatch stopwatch = Stopwatch.StartNew();

            using (var response = await _client.SendAsync(request))
            {
                stopwatch.Stop();

                response.EnsureSuccessStatusCode();

                // Assert
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                var res = HttpContentHelper.DerializeJsonFromStream <ODataResponse <Person> >(await response.Content.ReadAsStreamAsync());

                // Assert - Only one record returned
                Assert.Single(res.value);

                // Assert - Executed at least as long as throttleDelaySecs
                Assert.True(stopwatch.ElapsedMilliseconds > throttleDelaySecs * 1000);
            }

            // Reset throttleDelaySecs
            request         = new HttpRequestMessage(HttpMethod.Post, $"{uriApi}throttle/0");
            request.Content = HttpContentHelper.CreateHttpContent(0);

            using (var response = await _client.SendAsync(request))
            {
                response.EnsureSuccessStatusCode();

                // Assert
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);
            }
        }
Esempio n. 20
0
        public async Task TestCRUD()
        {
            var entity = DbContextHelper.InitObject(new Person(), idCRUD);

            // GET record which is not exists yet
            var request = new HttpRequestMessage(HttpMethod.Get, $"{uri}{entity.id}");

            using (var response = await _client.SendAsync(request))
            {
                // Assert
                Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
            }

            // POST new record
            request         = new HttpRequestMessage(HttpMethod.Post, uri);
            request.Content = HttpContentHelper.CreateHttpContent(entity);

            using (var response = await _client.SendAsync(request))
            {
                response.EnsureSuccessStatusCode();

                // Assert
                Assert.Equal(HttpStatusCode.Created, response.StatusCode);
            }

            // GET record created above and compare with original
            request = new HttpRequestMessage(HttpMethod.Get, $"{uri}{entity.id}");

            using (var response = await _client.SendAsync(request))
            {
                response.EnsureSuccessStatusCode();

                // Assert
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                var res = HttpContentHelper.DerializeJsonFromStream <Person>(await response.Content.ReadAsStreamAsync());

                // Assert
                Assert.Equal(HttpContentHelper.ObjectToString(res), HttpContentHelper.ObjectToString(entity));
            }

            // PUT updated record
            request = new HttpRequestMessage(HttpMethod.Put, $"{uri}{entity.id}");

            entity    = DbContextHelper.InitObject(new Person(), idCRUD + 1);
            entity.id = idCRUD;

            request.Content = HttpContentHelper.CreateHttpContent(entity);

            using (var response = await _client.SendAsync(request))
            {
                response.EnsureSuccessStatusCode();

                // Assert
                Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);
            }

            // GET updated record and compare with original
            request = new HttpRequestMessage(HttpMethod.Get, $"{uri}{entity.id}");

            using (var response = await _client.SendAsync(request))
            {
                response.EnsureSuccessStatusCode();

                // Assert
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                var res = HttpContentHelper.DerializeJsonFromStream <Person>(await response.Content.ReadAsStreamAsync());

                // Assert
                Assert.Equal(HttpContentHelper.ObjectToString(res), HttpContentHelper.ObjectToString(entity));
            }

            // PATCH record
            request = new HttpRequestMessage(HttpMethod.Patch, $"{uri}{entity.id}");

            entity    = DbContextHelper.InitObject(new Person(), idCRUD + 2);
            entity.id = idCRUD;

            request.Content = HttpContentHelper.CreateHttpContent(entity);

            using (var response = await _client.SendAsync(request))
            {
                response.EnsureSuccessStatusCode();

                // Assert
                Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);
            }

            // GET updated record and compare with original
            request = new HttpRequestMessage(HttpMethod.Get, $"{uri}{entity.id}");

            using (var response = await _client.SendAsync(request))
            {
                response.EnsureSuccessStatusCode();

                // Assert
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                var res = HttpContentHelper.DerializeJsonFromStream <Person>(await response.Content.ReadAsStreamAsync());

                // Assert
                Assert.Equal(HttpContentHelper.ObjectToString(res), HttpContentHelper.ObjectToString(entity));
            }

            // Attempt to POST same record again
            request         = new HttpRequestMessage(HttpMethod.Post, uri);
            request.Content = HttpContentHelper.CreateHttpContent(entity);

            using (var response = await _client.SendAsync(request))
            {
                // Assert
                Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
            }

            // DELETE record
            request = new HttpRequestMessage(HttpMethod.Delete, $"{uri}{entity.id}");

            using (var response = await _client.SendAsync(request))
            {
                response.EnsureSuccessStatusCode();

                // Assert
                Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);
            }

            // Attempt to GET deleted record
            request = new HttpRequestMessage(HttpMethod.Get, $"{uri}{entity.id}");

            using (var response = await _client.SendAsync(request))
            {
                // Assert
                Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
            }
        }
Esempio n. 21
0
        public void HttpContentHelper_StringContentJson_Has_Correct_ContentType()
        {
            var content = HttpContentHelper.StringContentJson(new { Value = 1 });

            Assert.AreEqual("application/json; charset=utf-8", content.Headers.ContentType.ToString());
        }
Esempio n. 22
0
 public void HttpContentHelper_StringContentJson_Throws_On_Null_Object()
 {
     HttpContentHelper.StringContentJson(null);
 }
Esempio n. 23
0
 public void HttpContentHelper_FormUrlEncoded_Throws_On_Null_Array()
 {
     HttpContentHelper.FormUrlEncoded(null);
 }