Skip to content

Commit

Permalink
feat: add file request api (#777)
Browse files Browse the repository at this point in the history
  • Loading branch information
mwwoda committed Nov 30, 2021
1 parent 3be5823 commit 1098f75
Show file tree
Hide file tree
Showing 18 changed files with 705 additions and 2 deletions.
9 changes: 9 additions & 0 deletions Box.V2.Test/Box.V2.Test.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,15 @@
<Reference Include="System.Net.Http.WebRequest" />
</ItemGroup>
<ItemGroup>
<None Update="Fixtures\BoxFileRequest\UpdateFileRequest200.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Fixtures\BoxFileRequest\CopyFileRequest200.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Fixtures\BoxFileRequest\GetFileRequest200.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Fixtures\BoxSignRequest\CancelSignRequest200.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
Expand Down
197 changes: 197 additions & 0 deletions Box.V2.Test/BoxFileRequestsManagerTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
using System;
using System.Threading.Tasks;
using Box.V2.Managers;
using Box.V2.Models;
using Box.V2.Models.Request;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;

namespace Box.V2.Test
{
[TestClass]
public class BoxFileRequestsManagerTest : BoxResourceManagerTest
{
private readonly BoxFileRequestsManager _fileRequestsManager;

public BoxFileRequestsManagerTest()
{
_fileRequestsManager = new BoxFileRequestsManager(Config.Object, Service, Converter, AuthRepository);
}

[TestMethod]
[TestCategory("CI-UNIT-TEST")]
public async Task GetFileRequestById_Success()
{
/*** Arrange ***/
IBoxRequest boxRequest = null;
Handler.Setup(h => h.ExecuteAsync<BoxFileRequestObject>(It.IsAny<IBoxRequest>()))
.Returns(Task.FromResult<IBoxResponse<BoxFileRequestObject>>(new BoxResponse<BoxFileRequestObject>()
{
Status = ResponseStatus.Success,
ContentString = LoadFixtureFromJson("Fixtures/BoxFileRequest/GetFileRequest200.json")
}))
.Callback<IBoxRequest>(r => boxRequest = r);

/*** Act ***/
BoxFileRequestObject response = await _fileRequestsManager.GetFileRequestByIdAsync("42037322");

/*** Assert ***/
// Request check
Assert.IsNotNull(boxRequest);
Assert.AreEqual(RequestMethod.Get, boxRequest.Method);
Assert.AreEqual(new Uri("https://api.box.com/2.0/file_requests/42037322"), boxRequest.AbsoluteUri);

// Response check
Assert.AreEqual("42037322", response.Id);
Assert.AreEqual(DateTimeOffset.Parse("2020-09-28T10:53:43-08:00"), response.CreatedAt);
Assert.AreEqual("[email protected]", response.CreatedBy.Login);
Assert.AreEqual("Aaron Levie", response.CreatedBy.Name);
Assert.AreEqual("Following documents are requested for your process", response.Description);
Assert.AreEqual("1", response.Etag);
Assert.AreEqual(DateTimeOffset.Parse("2020-09-28T10:53:43-08:00"), response.ExpiresAt);
Assert.AreEqual("12345", response.Folder.Id);
Assert.AreEqual("Contracts", response.Folder.Name);
Assert.AreEqual(true, response.IsDescriptionRequired);
Assert.AreEqual(true, response.IsEmailRequired);
Assert.AreEqual(BoxFileRequestStatus.active, response.Status);
Assert.AreEqual("Please upload documents", response.Title);
Assert.AreEqual(DateTimeOffset.Parse("2020-09-28T10:53:43-08:00"), response.UpdatedAt);
Assert.AreEqual("11446498", response.UpdatedBy.Id);
Assert.AreEqual("[email protected]", response.UpdatedBy.Login);
Assert.AreEqual("Aaron Levie", response.UpdatedBy.Name);
Assert.AreEqual("/f/19e57f40ace247278a8e3d336678c64a", response.Url);
}

[TestMethod]
[TestCategory("CI-UNIT-TEST")]
public async Task CopyFileRequest_Success()
{
/*** Arrange ***/
IBoxRequest boxRequest = null;
Handler.Setup(h => h.ExecuteAsync<BoxFileRequestObject>(It.IsAny<IBoxRequest>()))
.Returns(Task.FromResult<IBoxResponse<BoxFileRequestObject>>(new BoxResponse<BoxFileRequestObject>()
{
Status = ResponseStatus.Success,
ContentString = LoadFixtureFromJson("Fixtures/BoxFileRequest/CopyFileRequest200.json")
}))
.Callback<IBoxRequest>(r => boxRequest = r);

var folder = new BoxRequestEntity()
{
Id = "44444",
Type = BoxType.folder
};
var copyRequest = new BoxFileRequestCopyRequest
{
Folder = folder
};

/*** Act ***/
BoxFileRequestObject response = await _fileRequestsManager.CopyFileRequestAsync("42037322", copyRequest);

/*** Assert ***/
// Request check
Assert.IsNotNull(boxRequest);
Assert.AreEqual(RequestMethod.Post, boxRequest.Method);
Assert.AreEqual(new Uri("https://api.box.com/2.0/file_requests/42037322/copy"), boxRequest.AbsoluteUri);

// Response check
Assert.AreEqual("42037322", response.Id);
Assert.AreEqual(DateTimeOffset.Parse("2020-09-28T10:53:43-08:00"), response.CreatedAt);
Assert.AreEqual("[email protected]", response.CreatedBy.Login);
Assert.AreEqual("Aaron Levie", response.CreatedBy.Name);
Assert.AreEqual("Following documents are requested for your process", response.Description);
Assert.AreEqual("1", response.Etag);
Assert.AreEqual(DateTimeOffset.Parse("2020-09-28T10:53:43-08:00"), response.ExpiresAt);
Assert.AreEqual("44444", response.Folder.Id);
Assert.AreEqual("Contracts2", response.Folder.Name);
Assert.AreEqual(true, response.IsDescriptionRequired);
Assert.AreEqual(true, response.IsEmailRequired);
Assert.AreEqual(BoxFileRequestStatus.active, response.Status);
Assert.AreEqual("Please upload documents", response.Title);
Assert.AreEqual(DateTimeOffset.Parse("2020-09-28T10:53:43-08:00"), response.UpdatedAt);
Assert.AreEqual("11446498", response.UpdatedBy.Id);
Assert.AreEqual("[email protected]", response.UpdatedBy.Login);
Assert.AreEqual("Aaron Levie", response.UpdatedBy.Name);
Assert.AreEqual("/f/19e57f40ace247278a8e3d336678c64a", response.Url);
}

[TestMethod]
[TestCategory("CI-UNIT-TEST")]
public async Task UpdateFileRequest_Success()
{
/*** Arrange ***/
IBoxRequest boxRequest = null;
Handler.Setup(h => h.ExecuteAsync<BoxFileRequestObject>(It.IsAny<IBoxRequest>()))
.Returns(Task.FromResult<IBoxResponse<BoxFileRequestObject>>(new BoxResponse<BoxFileRequestObject>()
{
Status = ResponseStatus.Success,
ContentString = LoadFixtureFromJson("Fixtures/BoxFileRequest/UpdateFileRequest200.json")
}))
.Callback<IBoxRequest>(r => boxRequest = r);

var updateRequest = new BoxFileRequestUpdateRequest
{
Description = "New, updated description",
ExpiresAt = DateTimeOffset.Parse("2021-09-28T10:53:43-08:00"),
IsEmailRequired = false,
Status = BoxFileRequestStatus.inactive
};

/*** Act ***/
BoxFileRequestObject response = await _fileRequestsManager.UpdateFileRequestAsync("42037322", updateRequest);

/*** Assert ***/
// Request check
Assert.IsNotNull(boxRequest);
Assert.AreEqual(RequestMethod.Put, boxRequest.Method);
Assert.AreEqual(new Uri("https://api.box.com/2.0/file_requests/42037322"), boxRequest.AbsoluteUri);

// Response check
Assert.AreEqual("42037322", response.Id);
Assert.AreEqual(DateTimeOffset.Parse("2020-09-28T10:53:43-08:00"), response.CreatedAt);
Assert.AreEqual("[email protected]", response.CreatedBy.Login);
Assert.AreEqual("Aaron Levie", response.CreatedBy.Name);
Assert.AreEqual("New, updated description", response.Description);
Assert.AreEqual("1", response.Etag);
Assert.AreEqual(DateTimeOffset.Parse("2021-09-28T10:53:43-08:00"), response.ExpiresAt);
Assert.AreEqual("12345", response.Folder.Id);
Assert.AreEqual("Contracts", response.Folder.Name);
Assert.AreEqual(true, response.IsDescriptionRequired);
Assert.AreEqual(false, response.IsEmailRequired);
Assert.AreEqual(BoxFileRequestStatus.inactive, response.Status);
Assert.AreEqual("Please upload documents", response.Title);
Assert.AreEqual(DateTimeOffset.Parse("2020-09-28T10:53:43-08:00"), response.UpdatedAt);
Assert.AreEqual("11446498", response.UpdatedBy.Id);
Assert.AreEqual("[email protected]", response.UpdatedBy.Login);
Assert.AreEqual("Aaron Levie", response.UpdatedBy.Name);
Assert.AreEqual("/f/19e57f40ace247278a8e3d336678c64a", response.Url);
}

[TestMethod]
[TestCategory("CI-UNIT-TEST")]
public async Task DeleteFileRequest_Success()
{
/*** Arrange ***/
IBoxRequest boxRequest = null;
Handler.Setup(h => h.ExecuteAsync<object>(It.IsAny<IBoxRequest>()))
.Returns(Task.FromResult<IBoxResponse<object>>(new BoxResponse<object>()
{
Status = ResponseStatus.Success,
}))
.Callback<IBoxRequest>(r => boxRequest = r);

/*** Act ***/
var response = await _fileRequestsManager.DeleteFileRequestAsync("42037322");

/*** Assert ***/
// Request check
Assert.IsNotNull(boxRequest);
Assert.AreEqual(RequestMethod.Delete, boxRequest.Method);
Assert.AreEqual(new Uri("https://api.box.com/2.0/file_requests/42037322"), boxRequest.AbsoluteUri);

// Response check
Assert.AreEqual(true, response);
}
}
}
2 changes: 2 additions & 0 deletions Box.V2.Test/BoxResourceManagerTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public abstract class BoxResourceManagerTest
protected Uri FolderLocksUri = new Uri(Constants.FolderLocksEndpointString);
protected Uri SignRequestUri = new Uri(Constants.SignRequestsEndpointString);
protected Uri SignRequestWithPathUri = new Uri(Constants.SignRequestsWithPathEndpointString);
protected Uri FileRequestsWithPathUri = new Uri(Constants.FileRequestsWithPathEndpointString);

protected BoxResourceManagerTest()
{
Expand All @@ -48,6 +49,7 @@ protected BoxResourceManagerTest()
Config.SetupGet(x => x.FolderLocksEndpointUri).Returns(FolderLocksUri);
Config.SetupGet(x => x.SignRequestsEndpointUri).Returns(SignRequestUri);
Config.SetupGet(x => x.SignRequestsEndpointWithPathUri).Returns(SignRequestWithPathUri);
Config.SetupGet(x => x.FileRequestsEndpointWithPathUri).Returns(FileRequestsWithPathUri);

AuthRepository = new AuthRepository(Config.Object, Service, Converter, new OAuthSession("fakeAccessToken", "fakeRefreshToken", 3600, "bearer"));
}
Expand Down
33 changes: 33 additions & 0 deletions Box.V2.Test/Fixtures/BoxFileRequest/CopyFileRequest200.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{
"id": 42037322,
"type": "file_request",
"created_at": "2020-09-28T10:53:43-08:00",
"created_by": {
"id": 11446498,
"type": "user",
"login": "[email protected]",
"name": "Aaron Levie"
},
"description": "Following documents are requested for your process",
"etag": 1,
"expires_at": "2020-09-28T10:53:43-08:00",
"folder": {
"id": 44444,
"type": "folder",
"etag": 1,
"name": "Contracts2",
"sequence_id": 3
},
"is_description_required": true,
"is_email_required": true,
"status": "active",
"title": "Please upload documents",
"updated_at": "2020-09-28T10:53:43-08:00",
"updated_by": {
"id": 11446498,
"type": "user",
"login": "[email protected]",
"name": "Aaron Levie"
},
"url": "/f/19e57f40ace247278a8e3d336678c64a"
}
33 changes: 33 additions & 0 deletions Box.V2.Test/Fixtures/BoxFileRequest/GetFileRequest200.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{
"id": 42037322,
"type": "file_request",
"created_at": "2020-09-28T10:53:43-08:00",
"created_by": {
"id": 11446498,
"type": "user",
"login": "[email protected]",
"name": "Aaron Levie"
},
"description": "Following documents are requested for your process",
"etag": 1,
"expires_at": "2020-09-28T10:53:43-08:00",
"folder": {
"id": 12345,
"type": "folder",
"etag": 1,
"name": "Contracts",
"sequence_id": 3
},
"is_description_required": true,
"is_email_required": true,
"status": "active",
"title": "Please upload documents",
"updated_at": "2020-09-28T10:53:43-08:00",
"updated_by": {
"id": 11446498,
"type": "user",
"login": "[email protected]",
"name": "Aaron Levie"
},
"url": "/f/19e57f40ace247278a8e3d336678c64a"
}
33 changes: 33 additions & 0 deletions Box.V2.Test/Fixtures/BoxFileRequest/UpdateFileRequest200.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{
"id": 42037322,
"type": "file_request",
"created_at": "2020-09-28T10:53:43-08:00",
"created_by": {
"id": 11446498,
"type": "user",
"login": "[email protected]",
"name": "Aaron Levie"
},
"description": "New, updated description",
"etag": 1,
"expires_at": "2021-09-28T10:53:43-08:00",
"folder": {
"id": 12345,
"type": "folder",
"etag": 1,
"name": "Contracts",
"sequence_id": 3
},
"is_description_required": true,
"is_email_required": false,
"status": "inactive",
"title": "Please upload documents",
"updated_at": "2020-09-28T10:53:43-08:00",
"updated_by": {
"id": 11446498,
"type": "user",
"login": "[email protected]",
"name": "Aaron Levie"
},
"url": "/f/19e57f40ace247278a8e3d336678c64a"
}
9 changes: 7 additions & 2 deletions Box.V2/Box.V2.csproj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
Expand Down Expand Up @@ -83,6 +83,7 @@
<Compile Include="Managers\BoxCollectionsManager.cs" />
<Compile Include="Managers\BoxDevicePinManager.cs" />
<Compile Include="Managers\BoxEventsManager.cs" />
<Compile Include="Managers\BoxFileRequestsManager.cs" />
<Compile Include="Managers\BoxGroupsManager.cs" />
<Compile Include="Managers\BoxMetadataManager.cs" />
<Compile Include="Managers\BoxMetadataCascadePolicyManager.cs" />
Expand Down Expand Up @@ -119,6 +120,7 @@
<Compile Include="Managers\IBoxUsersManager.cs" />
<Compile Include="Managers\IBoxWebhooksManager.cs" />
<Compile Include="Managers\IBoxWebLinksManager.cs" />
<Compile Include="Managers\IBoxFileRequestsManager.cs" />
<Compile Include="Models\BoxApplication.cs" />
<Compile Include="Models\BoxAssignmentCounts.cs" />
<Compile Include="Models\BoxClassification.cs" />
Expand All @@ -127,6 +129,7 @@
<Compile Include="Models\BoxEmailAlias.cs" />
<Compile Include="Models\BoxEnterprise.cs" />
<Compile Include="Models\BoxEnterpriseEvent.cs" />
<Compile Include="Models\BoxFileRequestObject.cs" />
<Compile Include="Models\BoxFolderEventSource.cs" />
<Compile Include="Models\BoxFolderLock.cs" />
<Compile Include="Models\BoxFolderLockOperations.cs" />
Expand Down Expand Up @@ -194,6 +197,8 @@
<Compile Include="Models\BoxGroupMembership.cs" />
<Compile Include="Models\Request\BoxActionableByRequest.cs" />
<Compile Include="Models\BoxSessionParts.cs" />
<Compile Include="Models\Request\BoxFileRequestUpdateRequest.cs" />
<Compile Include="Models\Request\BoxFileRequestCopyRequest.cs" />
<Compile Include="Models\Request\BoxFileUploadSessionRequest.cs" />
<Compile Include="Models\Request\BoxSignRequestCreateRequest.cs" />
<Compile Include="Models\Request\BoxTermsOfServiceUserStatusCreateRequest.cs" />
Expand Down Expand Up @@ -312,4 +317,4 @@
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
</Project>
6 changes: 6 additions & 0 deletions Box.V2/BoxClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ private void InitManagers()
MetadataCascadePolicyManager = new BoxMetadataCascadePolicyManager(Config, _service, _converter, Auth, _asUser, _suppressNotifications);
StoragePoliciesManager = new BoxStoragePoliciesManager(Config, _service, _converter, Auth, _asUser, _suppressNotifications);
SignRequestsManager = new BoxSignRequestsManager(Config, _service, _converter, Auth, _asUser, _suppressNotifications);
FileRequestsManager = new BoxFileRequestsManager(Config, _service, _converter, Auth, _asUser, _suppressNotifications);

// Init Resource Plugins Manager
ResourcePlugins = new BoxResourcePlugins();
Expand Down Expand Up @@ -283,5 +284,10 @@ public IBoxClient AddResourcePlugin<T>() where T : BoxResourceManager
/// The manager that represents sign requests endpoints.
/// </summary>
public IBoxSignRequestsManager SignRequestsManager { get; private set; }

/// <summary>
/// The manager that represents all of the file requests endpoints.
/// </summary>
public IBoxFileRequestsManager FileRequestsManager { get; private set; }
}
}
Loading

0 comments on commit 1098f75

Please sign in to comment.