DocSpace-buildtools/thirdparty/onedrive-sdk-csharp-master/tests/Test.OneDriveSdk/Requests/ItemRequestTests.cs
2020-07-10 18:37:02 +03:00

203 lines
9.9 KiB
C#

// ------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License in the project root for license information.
// ------------------------------------------------------------------------------
namespace Test.OneDrive.Sdk.Requests
{
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.OneDrive.Sdk;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;
[TestClass]
public class ItemRequestTests : RequestTestBase
{
[TestMethod]
public async Task GetAsync_InitializeCollectionProperties()
{
using (var httpResponseMessage = new HttpResponseMessage())
using (var responseStream = new MemoryStream())
using (var streamContent = new StreamContent(responseStream))
{
httpResponseMessage.Content = streamContent;
var requestUrl = "https://api.onedrive.com/v1.0/drive/items/id";
this.httpProvider.Setup(
provider => provider.SendAsync(
It.Is<HttpRequestMessage>(
request => request.RequestUri.ToString().Equals(requestUrl)),
HttpCompletionOption.ResponseContentRead,
CancellationToken.None))
.Returns(Task.FromResult<HttpResponseMessage>(httpResponseMessage));
var expectedChildrenPage = new ItemChildrenCollectionPage
{
new Item { Id = "id" }
};
var expectedItemResponse = new Item
{
AdditionalData = new Dictionary<string, object>
{
{ "children@odata.nextLink", requestUrl + "/next" }
},
Children = expectedChildrenPage,
};
this.serializer.Setup(
serializer => serializer.DeserializeObject<Item>(It.IsAny<string>()))
.Returns(expectedItemResponse);
var item = await this.oneDriveClient.Drive.Items["id"].Request().GetAsync();
Assert.IsNotNull(item, "Item not returned.");
Assert.IsNotNull(item.Children, "Item children not returned.");
Assert.AreEqual(1, item.Children.CurrentPage.Count, "Unexpected number of children in page.");
Assert.AreEqual("id", item.Children.CurrentPage[0].Id, "Unexpected child ID in page.");
Assert.AreEqual(expectedItemResponse.AdditionalData, item.Children.AdditionalData, "Additional data not initialized correctly.");
var nextPageRequest = item.Children.NextPageRequest as ItemChildrenCollectionRequest;
Assert.IsNotNull(nextPageRequest, "Children next page request not initialized correctly.");
Assert.AreEqual(new Uri(requestUrl + "/next"), new Uri(nextPageRequest.RequestUrl), "Unexpected request URL for next page request.");
}
}
[TestMethod]
public void ItemById_BuildRequest()
{
var expectedRequestUri = new Uri("https://api.onedrive.com/v1.0/drive/items/id");
var itemRequestBuilder = this.oneDriveClient.Drive.Items["id"] as ItemRequestBuilder;
Assert.IsNotNull(itemRequestBuilder, "Unexpected request builder.");
Assert.AreEqual(expectedRequestUri, new Uri(itemRequestBuilder.RequestUrl), "Unexpected request URL.");
var itemRequest = itemRequestBuilder.Request() as ItemRequest;
Assert.IsNotNull(itemRequest, "Unexpected request.");
Assert.AreEqual(expectedRequestUri, new Uri(itemRequest.RequestUrl), "Unexpected request URL.");
}
[TestMethod]
public void ItemByPath_BuildRequest()
{
var expectedRequestUri = new Uri("https://api.onedrive.com/v1.0/drive/root:/item/with/path:");
var itemRequestBuilder = this.oneDriveClient.Drive.Root.ItemWithPath("item/with/path") as ItemRequestBuilder;
Assert.IsNotNull(itemRequestBuilder, "Unexpected request builder.");
Assert.AreEqual(expectedRequestUri, new Uri(itemRequestBuilder.RequestUrl), "Unexpected request URL.");
var itemRequest = itemRequestBuilder.Request() as ItemRequest;
Assert.IsNotNull(itemRequest, "Unexpected request.");
Assert.AreEqual(expectedRequestUri, new Uri(itemRequest.RequestUrl), "Unexpected request URL.");
}
[TestMethod]
public void ItemByPath_BuildRequestWithLeadingSlash()
{
var expectedRequestUri = new Uri("https://api.onedrive.com/v1.0/drive/root:/item/with/path:");
var itemRequestBuilder = this.oneDriveClient.Drive.Root.ItemWithPath("/item/with/path") as ItemRequestBuilder;
Assert.IsNotNull(itemRequestBuilder, "Unexpected request builder.");
Assert.AreEqual(expectedRequestUri, new Uri(itemRequestBuilder.RequestUrl), "Unexpected request URL.");
var itemRequest = itemRequestBuilder.Request() as ItemRequest;
Assert.IsNotNull(itemRequest, "Unexpected request.");
Assert.AreEqual(expectedRequestUri, new Uri(itemRequest.RequestUrl), "Unexpected request URL.");
}
[TestMethod]
public async Task ItemRequest_CreateAsync()
{
await this.RequestWithItemInBody(false);
}
[TestMethod]
public async Task ItemRequest_DeleteAsync()
{
using (var httpResponseMessage = new HttpResponseMessage(HttpStatusCode.NoContent))
{
var requestUrl = "https://api.onedrive.com/v1.0/drive/items/id";
this.httpProvider.Setup(
provider => provider.SendAsync(
It.Is<HttpRequestMessage>(
request =>
request.Method == HttpMethod.Delete
&& request.RequestUri.ToString().Equals(requestUrl)),
HttpCompletionOption.ResponseContentRead,
CancellationToken.None))
.Returns(Task.FromResult(httpResponseMessage));
await this.oneDriveClient.Drive.Items["id"].Request().DeleteAsync();
}
}
[TestMethod]
public void ItemRequest_Expand()
{
var expectedRequestUri = new Uri("https://api.onedrive.com/v1.0/drive/items/id");
var itemRequest = this.oneDriveClient.Drive.Items["id"].Request().Expand("value") as ItemRequest;
Assert.IsNotNull(itemRequest, "Unexpected request.");
Assert.AreEqual(expectedRequestUri, new Uri(itemRequest.RequestUrl), "Unexpected request URL.");
Assert.AreEqual(1, itemRequest.QueryOptions.Count, "Unexpected query options present.");
Assert.AreEqual("$expand", itemRequest.QueryOptions[0].Name, "Unexpected expand query name.");
Assert.AreEqual("value", itemRequest.QueryOptions[0].Value, "Unexpected expand query value.");
}
[TestMethod]
public void ItemRequest_Select()
{
var expectedRequestUri = new Uri("https://api.onedrive.com/v1.0/drive/items/id");
var itemRequest = this.oneDriveClient.Drive.Items["id"].Request().Select("value") as ItemRequest;
Assert.IsNotNull(itemRequest, "Unexpected request.");
Assert.AreEqual(expectedRequestUri, new Uri(itemRequest.RequestUrl), "Unexpected request URL.");
Assert.AreEqual(1, itemRequest.QueryOptions.Count, "Unexpected query options present.");
Assert.AreEqual("$select", itemRequest.QueryOptions[0].Name, "Unexpected select query name.");
Assert.AreEqual("value", itemRequest.QueryOptions[0].Value, "Unexpected select query value.");
}
[TestMethod]
public async Task ItemRequest_UpdateAsync()
{
await this.RequestWithItemInBody(true);
}
private async Task RequestWithItemInBody(bool isUpdate)
{
using (var httpResponseMessage = new HttpResponseMessage())
using (var responseStream = new MemoryStream())
using (var streamContent = new StreamContent(responseStream))
{
httpResponseMessage.Content = streamContent;
var requestUrl = "https://api.onedrive.com/v1.0/drive/items/id";
this.httpProvider.Setup(
provider => provider.SendAsync(
It.Is<HttpRequestMessage>(
request =>
string.Equals(request.Method.ToString().ToUpperInvariant(), isUpdate ? "PATCH" : "PUT")
&& string.Equals(request.Content.Headers.ContentType.ToString(), "application/json")
&& request.RequestUri.ToString().Equals(requestUrl)),
HttpCompletionOption.ResponseContentRead,
CancellationToken.None))
.Returns(Task.FromResult(httpResponseMessage));
this.serializer.Setup(serializer => serializer.SerializeObject(It.IsAny<Item>())).Returns("body");
this.serializer.Setup(serializer => serializer.DeserializeObject<Item>(It.IsAny<string>())).Returns(new Item { Id = "id" });
var itemResponse = isUpdate
? await this.oneDriveClient.Drive.Items["id"].Request().UpdateAsync(new Item())
: await this.oneDriveClient.Drive.Items["id"].Request().CreateAsync(new Item());
Assert.AreEqual("id", itemResponse.Id, "Unexpected item returned.");
}
}
}
}