예제 #1
0
        public async Task SendAsync_ResponseHeaders()
        {
            var requestUrl  = string.Concat(this.baseUrl, "/me/drive/items/id");
            var baseRequest = new BaseRequest(requestUrl, this.baseClient)
            {
                ContentType = "application/json"
            };
            var data = "{\"data\"}";

            using (var httpResponseMessage = new HttpResponseMessage())
                using (var responseStream = new MemoryStream(Encoding.ASCII.GetBytes(data)))
                    using (var streamContent = new StreamContent(responseStream))
                    {
                        httpResponseMessage.Content    = streamContent;
                        httpResponseMessage.StatusCode = System.Net.HttpStatusCode.OK;

                        this.httpProvider.Setup(
                            provider => provider.SendAsync(
                                It.Is <HttpRequestMessage>(
                                    request =>
                                    string.Equals(request.Content.Headers.ContentType.ToString(), "application/json") &&
                                    request.RequestUri.ToString().Equals(requestUrl)),
                                HttpCompletionOption.ResponseContentRead,
                                CancellationToken.None))
                        .Returns(Task.FromResult(httpResponseMessage));

                        Dictionary <string, object> additionalData = new Dictionary <string, object>();
                        additionalData["responseHeaders"] = new Dictionary <string, List <string> >()
                        {
                            { "key", new List <string>()
                              {
                                  "value"
                              } }
                        };

                        var expectedResponseItem = new DerivedTypeClass {
                            Id = "id", AdditionalData = additionalData
                        };

                        this.serializer.Setup(
                            serializer => serializer.DeserializeObject <DerivedTypeClass>(It.IsAny <string>()))
                        .Returns(expectedResponseItem);
                        this.serializer.Setup(
                            serializer => serializer.DeserializeObject <DerivedTypeClass>(It.IsAny <string>()))
                        .Returns(expectedResponseItem);

                        var responseItem = await baseRequest.SendAsync <DerivedTypeClass>("string", CancellationToken.None);

                        Assert.NotNull(responseItem.AdditionalData["responseHeaders"]);
                        Assert.NotNull(baseRequest.Client.AuthenticationProvider);
                        Assert.NotNull(baseRequest.GetHttpRequestMessage().GetRequestContext().ClientRequestId);
                        Assert.Equal(expectedResponseItem.AdditionalData["responseHeaders"], responseItem.AdditionalData["responseHeaders"]);
                    }
        }
예제 #2
0
        public async Task SendAsyncSupportsContentTypeWithParameters()
        {
            // Arrange
            var requestUrl = string.Concat(this.baseUrl, "/me/drive/items/id");

            // Create a request that has content type with parameters
            var baseRequest = new BaseRequest(requestUrl, this.baseClient)
            {
                ContentType = "application/json; odata=verbose"
            };

            using (var httpResponseMessage = new HttpResponseMessage())
                using (var responseStream = new MemoryStream())
                    using (var streamContent = new StreamContent(responseStream))
                    {
                        httpResponseMessage.Content = streamContent;

                        this.httpProvider.Setup(
                            provider => provider.SendAsync(
                                It.Is <HttpRequestMessage>(
                                    request =>
                                    string.Equals(request.Content.Headers.ContentType.ToString(), "application/json; odata=verbose") &&
                                    request.RequestUri.ToString().Equals(requestUrl)),
                                HttpCompletionOption.ResponseContentRead,
                                CancellationToken.None))
                        .Returns(Task.FromResult(httpResponseMessage));

                        var expectedResponseItem = new DerivedTypeClass {
                            Id = "id"
                        };
                        this.serializer.Setup(
                            serializer => serializer.SerializeObject(It.IsAny <string>()))
                        .Returns(string.Empty);
                        this.serializer.Setup(
                            serializer => serializer.DeserializeObject <DerivedTypeClass>(It.IsAny <string>()))
                        .Returns(expectedResponseItem);

                        // Act
                        var responseItem = await baseRequest.SendAsync <DerivedTypeClass>("string", CancellationToken.None);

                        // Assert
                        Assert.NotNull(responseItem);
                        Assert.Equal(expectedResponseItem.Id, responseItem.Id);
                        Assert.NotNull(baseRequest.Client.AuthenticationProvider);
                        Assert.NotNull(baseRequest.GetHttpRequestMessage().GetRequestContext().ClientRequestId);
                        Assert.Equal(baseRequest.GetHttpRequestMessage().GetMiddlewareOption <AuthenticationHandlerOption>().AuthenticationProvider,
                                     baseRequest.Client.AuthenticationProvider);
                        Assert.Equal("application/json; odata=verbose", baseRequest.ContentType);
                    }
        }
예제 #3
0
        public async Task SendAsync()
        {
            var requestUrl = string.Concat(this.baseUrl, "/me/drive/items/id");

            var baseRequest = new BaseRequest(requestUrl, this.baseClient)
            {
                ContentType = "application/json"
            };

            using (var httpResponseMessage = new HttpResponseMessage())
                using (var responseStream = new MemoryStream())
                    using (var streamContent = new StreamContent(responseStream))
                    {
                        httpResponseMessage.Content = streamContent;

                        this.httpProvider.Setup(
                            provider => provider.SendAsync(
                                It.Is <HttpRequestMessage>(
                                    request =>
                                    string.Equals(request.Content.Headers.ContentType.ToString(), "application/json") &&
                                    request.RequestUri.ToString().Equals(requestUrl)),
                                HttpCompletionOption.ResponseContentRead,
                                CancellationToken.None))
                        .Returns(Task.FromResult(httpResponseMessage));

                        var expectedResponseItem = new DerivedTypeClass {
                            Id = "id"
                        };
                        this.serializer.Setup(
                            serializer => serializer.SerializeObject(It.IsAny <string>()))
                        .Returns(string.Empty);
                        this.serializer.Setup(
                            serializer => serializer.DeserializeObject <DerivedTypeClass>(It.IsAny <string>()))
                        .Returns(expectedResponseItem);

                        var responseItem = await baseRequest.SendAsync <DerivedTypeClass>("string", CancellationToken.None);

                        Assert.IsNotNull(responseItem, "DerivedTypeClass not returned.");
                        Assert.AreEqual(expectedResponseItem.Id, responseItem.Id, "Unexpected ID.");

                        this.authenticationProvider.Verify(provider => provider.AuthenticateRequestAsync(It.IsAny <HttpRequestMessage>()), Times.Once);
                    }
        }
예제 #4
0
        public void SerializeAndDeserializeKnownEnumValue()
        {
            var instance = new DerivedTypeClass
            {
                Id       = "id",
                EnumType = EnumType.Value,
            };

            var expectedSerializedStream = string.Format(
                "{{\"enumType\":\"{0}\",\"id\":\"{1}\"}}",
                "value",
                instance.Id);

            var serializedValue = this.serializer.SerializeObject(instance);

            Assert.Equal(expectedSerializedStream, serializedValue);

            var newInstance = this.serializer.DeserializeObject <DerivedTypeClass>(serializedValue);

            Assert.NotNull(newInstance);
            Assert.Equal(instance.Id, instance.Id);
            Assert.Equal(EnumType.Value, instance.EnumType);
            Assert.Null(instance.AdditionalData);
        }
        public void SerializeAndDeserializeKnownEnumValue()
        {
            var instance = new DerivedTypeClass
            {
                Id       = "id",
                EnumType = EnumType.Value,
            };

            var expectedSerializedStream = string.Format(
                "{{\"enumType\":\"{0}\",\"id\":\"{1}\"}}",
                "value",
                instance.Id);

            var serializedValue = this.serializer.SerializeObject(instance);

            Assert.AreEqual(expectedSerializedStream, serializedValue, "Unexpected value serialized.");

            var newInstance = this.serializer.DeserializeObject <DerivedTypeClass>(serializedValue);

            Assert.IsNotNull(newInstance, "Object not correctly deserialized.");
            Assert.AreEqual(instance.Id, instance.Id, "Unexpected ID initialized.");
            Assert.AreEqual(EnumType.Value, instance.EnumType, "Unexpected EnumType initialized.");
            Assert.IsNull(instance.AdditionalData, "Additional data initialized.");
        }