Skip to content

Commit

Permalink
feat: add support for ExtraData of generic type `(box/box-codegen#521
Browse files Browse the repository at this point in the history
…)` (#170)
  • Loading branch information
box-sdk-build authored Jul 2, 2024
1 parent bb71968 commit 2a2208d
Show file tree
Hide file tree
Showing 18 changed files with 99 additions and 38 deletions.
2 changes: 1 addition & 1 deletion .codegen.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{ "engineHash": "1090584", "specHash": "fc01415", "version": "0.3.1" }
{ "engineHash": "62a25a4", "specHash": "e95d6fa", "version": "0.3.1" }
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public CollaborationAllowlistEntriesManagerTests() {
public async System.Threading.Tasks.Task TestCollaborationAllowlistEntries() {
CollaborationAllowlistEntries allowlist = await client.CollaborationAllowlistEntries.GetCollaborationWhitelistEntriesAsync();
Assert.IsTrue(NullableUtils.Unwrap(allowlist.Entries).Count >= 0);
const string domain = "example.com";
string domain = string.Concat(Utils.GetUUID(), "example.com");
CollaborationAllowlistEntry newEntry = await client.CollaborationAllowlistEntries.CreateCollaborationWhitelistEntryAsync(requestBody: new CreateCollaborationWhitelistEntryRequestBody(direction: CreateCollaborationWhitelistEntryRequestBodyDirectionField.Inbound, domain: domain));
Assert.IsTrue(StringUtils.ToStringRepresentation(newEntry.Type?.Value) == "collaboration_whitelist_entry");
Assert.IsTrue(StringUtils.ToStringRepresentation(newEntry.Direction?.Value) == "inbound");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,36 @@ public async System.Threading.Tasks.Task TestGlobalFileMetadata() {
FileFull file = await new CommonsManager().UploadNewFileAsync();
Metadatas fileMetadata = await client.FileMetadata.GetFileMetadataAsync(fileId: file.Id);
Assert.IsTrue(NullableUtils.Unwrap(fileMetadata.Entries).Count == 0);
MetadataFull createdMetadata = await client.FileMetadata.CreateFileMetadataByIdAsync(fileId: file.Id, scope: CreateFileMetadataByIdScope.Global, templateKey: "properties", requestBody: new Dictionary<string, string>() { { "abc", "xyz" } });
MetadataFull createdMetadata = await client.FileMetadata.CreateFileMetadataByIdAsync(fileId: file.Id, scope: CreateFileMetadataByIdScope.Global, templateKey: "properties", requestBody: new Dictionary<string, object>() { { "abc", "xyz" } });
Assert.IsTrue(StringUtils.ToStringRepresentation(createdMetadata.Template) == "properties");
Assert.IsTrue(StringUtils.ToStringRepresentation(createdMetadata.Scope) == "global");
Assert.IsTrue(createdMetadata.Version == 0);
MetadataFull receivedMetadata = await client.FileMetadata.GetFileMetadataByIdAsync(fileId: file.Id, scope: GetFileMetadataByIdScope.Global, templateKey: "properties");
Assert.IsTrue(NullableUtils.Unwrap(receivedMetadata.ExtraData)["abc"] == "xyz");
Assert.IsTrue(StringUtils.ToStringRepresentation(NullableUtils.Unwrap(receivedMetadata.ExtraData)["abc"]) == "xyz");
const string newValue = "bar";
await client.FileMetadata.UpdateFileMetadataByIdAsync(fileId: file.Id, scope: UpdateFileMetadataByIdScope.Global, templateKey: "properties", requestBody: Array.AsReadOnly(new [] {new UpdateFileMetadataByIdRequestBody() { Op = UpdateFileMetadataByIdRequestBodyOpField.Replace, Path = "/abc", Value = newValue }}));
MetadataFull receivedUpdatedMetadata = await client.FileMetadata.GetFileMetadataByIdAsync(fileId: file.Id, scope: GetFileMetadataByIdScope.Global, templateKey: "properties");
Assert.IsTrue(NullableUtils.Unwrap(receivedUpdatedMetadata.ExtraData)["abc"] == newValue);
Assert.IsTrue(StringUtils.ToStringRepresentation(NullableUtils.Unwrap(receivedUpdatedMetadata.ExtraData)["abc"]) == newValue);
await client.FileMetadata.DeleteFileMetadataByIdAsync(fileId: file.Id, scope: DeleteFileMetadataByIdScope.Global, templateKey: "properties");
await Assert.That.IsExceptionAsync(async() => await client.FileMetadata.GetFileMetadataByIdAsync(fileId: file.Id, scope: GetFileMetadataByIdScope.Global, templateKey: "properties"));
await client.Files.DeleteFileByIdAsync(fileId: file.Id);
}

[TestMethod]
public async System.Threading.Tasks.Task TestEnterpriseFileMetadata() {
FileFull file = await new CommonsManager().UploadNewFileAsync();
string templateKey = string.Concat("key", Utils.GetUUID());
await client.MetadataTemplates.CreateMetadataTemplateAsync(requestBody: new CreateMetadataTemplateRequestBody(scope: "enterprise", displayName: templateKey) { TemplateKey = templateKey, Fields = Array.AsReadOnly(new [] {new CreateMetadataTemplateRequestBodyFieldsField(type: CreateMetadataTemplateRequestBodyFieldsTypeField.String, key: "name", displayName: "name"),new CreateMetadataTemplateRequestBodyFieldsField(type: CreateMetadataTemplateRequestBodyFieldsTypeField.Float, key: "age", displayName: "age"),new CreateMetadataTemplateRequestBodyFieldsField(type: CreateMetadataTemplateRequestBodyFieldsTypeField.Date, key: "birthDate", displayName: "birthDate"),new CreateMetadataTemplateRequestBodyFieldsField(type: CreateMetadataTemplateRequestBodyFieldsTypeField.Enum, key: "countryCode", displayName: "countryCode") { Options = Array.AsReadOnly(new [] {new CreateMetadataTemplateRequestBodyFieldsOptionsField(key: "US"),new CreateMetadataTemplateRequestBodyFieldsOptionsField(key: "CA")}) },new CreateMetadataTemplateRequestBodyFieldsField(type: CreateMetadataTemplateRequestBodyFieldsTypeField.MultiSelect, key: "sports", displayName: "sports") { Options = Array.AsReadOnly(new [] {new CreateMetadataTemplateRequestBodyFieldsOptionsField(key: "basketball"),new CreateMetadataTemplateRequestBodyFieldsOptionsField(key: "football"),new CreateMetadataTemplateRequestBodyFieldsOptionsField(key: "tennis")}) }}) });
MetadataFull createdMetadata = await client.FileMetadata.CreateFileMetadataByIdAsync(fileId: file.Id, scope: CreateFileMetadataByIdScope.Enterprise, templateKey: templateKey, requestBody: new Dictionary<string, object>() { { "name", "John" }, { "age", 23 }, { "birthDate", "2001-01-03T02:20:50.520Z" }, { "countryCode", "US" }, { "sports", Array.AsReadOnly(new [] {"basketball","tennis"}) } });
Assert.IsTrue(StringUtils.ToStringRepresentation(createdMetadata.Template) == templateKey);
Assert.IsTrue(StringUtils.ToStringRepresentation(NullableUtils.Unwrap(createdMetadata.ExtraData)["name"]) == "John");
Assert.IsTrue(StringUtils.ToStringRepresentation(NullableUtils.Unwrap(createdMetadata.ExtraData)["age"]) == "23");
Assert.IsTrue(StringUtils.ToStringRepresentation(NullableUtils.Unwrap(createdMetadata.ExtraData)["birthDate"]) == "2001-01-03T02:20:50.520Z");
Assert.IsTrue(StringUtils.ToStringRepresentation(NullableUtils.Unwrap(createdMetadata.ExtraData)["countryCode"]) == "US");
await client.FileMetadata.DeleteFileMetadataByIdAsync(fileId: file.Id, scope: DeleteFileMetadataByIdScope.Enterprise, templateKey: templateKey);
await client.MetadataTemplates.DeleteMetadataTemplateAsync(scope: DeleteMetadataTemplateScope.Enterprise, templateKey: templateKey);
await client.Files.DeleteFileByIdAsync(fileId: file.Id);
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,36 @@ public async System.Threading.Tasks.Task TestGlobalFolderMetadata() {
FolderFull folder = await new CommonsManager().CreateNewFolderAsync();
Metadatas folderMetadata = await client.FolderMetadata.GetFolderMetadataAsync(folderId: folder.Id);
Assert.IsTrue(NullableUtils.Unwrap(folderMetadata.Entries).Count == 0);
MetadataFull createdMetadata = await client.FolderMetadata.CreateFolderMetadataByIdAsync(folderId: folder.Id, scope: CreateFolderMetadataByIdScope.Global, templateKey: "properties", requestBody: new Dictionary<string, string>() { { "abc", "xyz" } });
MetadataFull createdMetadata = await client.FolderMetadata.CreateFolderMetadataByIdAsync(folderId: folder.Id, scope: CreateFolderMetadataByIdScope.Global, templateKey: "properties", requestBody: new Dictionary<string, object>() { { "abc", "xyz" } });
Assert.IsTrue(StringUtils.ToStringRepresentation(createdMetadata.Template) == "properties");
Assert.IsTrue(StringUtils.ToStringRepresentation(createdMetadata.Scope) == "global");
Assert.IsTrue(createdMetadata.Version == 0);
MetadataFull receivedMetadata = await client.FolderMetadata.GetFolderMetadataByIdAsync(folderId: folder.Id, scope: GetFolderMetadataByIdScope.Global, templateKey: "properties");
Assert.IsTrue(NullableUtils.Unwrap(receivedMetadata.ExtraData)["abc"] == "xyz");
Assert.IsTrue(StringUtils.ToStringRepresentation(NullableUtils.Unwrap(receivedMetadata.ExtraData)["abc"]) == "xyz");
const string newValue = "bar";
await client.FolderMetadata.UpdateFolderMetadataByIdAsync(folderId: folder.Id, scope: UpdateFolderMetadataByIdScope.Global, templateKey: "properties", requestBody: Array.AsReadOnly(new [] {new UpdateFolderMetadataByIdRequestBody() { Op = UpdateFolderMetadataByIdRequestBodyOpField.Replace, Path = "/abc", Value = newValue }}));
MetadataFull receivedUpdatedMetadata = await client.FolderMetadata.GetFolderMetadataByIdAsync(folderId: folder.Id, scope: GetFolderMetadataByIdScope.Global, templateKey: "properties");
Assert.IsTrue(NullableUtils.Unwrap(receivedUpdatedMetadata.ExtraData)["abc"] == newValue);
Assert.IsTrue(StringUtils.ToStringRepresentation(NullableUtils.Unwrap(receivedUpdatedMetadata.ExtraData)["abc"]) == newValue);
await client.FolderMetadata.DeleteFolderMetadataByIdAsync(folderId: folder.Id, scope: DeleteFolderMetadataByIdScope.Global, templateKey: "properties");
await Assert.That.IsExceptionAsync(async() => await client.FolderMetadata.GetFolderMetadataByIdAsync(folderId: folder.Id, scope: GetFolderMetadataByIdScope.Global, templateKey: "properties"));
await client.Folders.DeleteFolderByIdAsync(folderId: folder.Id);
}

[TestMethod]
public async System.Threading.Tasks.Task TestEnterpriseFolderMetadata() {
FolderFull folder = await new CommonsManager().CreateNewFolderAsync();
string templateKey = string.Concat("key", Utils.GetUUID());
MetadataTemplate template = await client.MetadataTemplates.CreateMetadataTemplateAsync(requestBody: new CreateMetadataTemplateRequestBody(scope: "enterprise", displayName: templateKey) { TemplateKey = templateKey, Fields = Array.AsReadOnly(new [] {new CreateMetadataTemplateRequestBodyFieldsField(type: CreateMetadataTemplateRequestBodyFieldsTypeField.String, key: "name", displayName: "name"),new CreateMetadataTemplateRequestBodyFieldsField(type: CreateMetadataTemplateRequestBodyFieldsTypeField.Float, key: "age", displayName: "age"),new CreateMetadataTemplateRequestBodyFieldsField(type: CreateMetadataTemplateRequestBodyFieldsTypeField.Date, key: "birthDate", displayName: "birthDate"),new CreateMetadataTemplateRequestBodyFieldsField(type: CreateMetadataTemplateRequestBodyFieldsTypeField.Enum, key: "countryCode", displayName: "countryCode") { Options = Array.AsReadOnly(new [] {new CreateMetadataTemplateRequestBodyFieldsOptionsField(key: "US"),new CreateMetadataTemplateRequestBodyFieldsOptionsField(key: "CA")}) },new CreateMetadataTemplateRequestBodyFieldsField(type: CreateMetadataTemplateRequestBodyFieldsTypeField.MultiSelect, key: "sports", displayName: "sports") { Options = Array.AsReadOnly(new [] {new CreateMetadataTemplateRequestBodyFieldsOptionsField(key: "basketball"),new CreateMetadataTemplateRequestBodyFieldsOptionsField(key: "football"),new CreateMetadataTemplateRequestBodyFieldsOptionsField(key: "tennis")}) }}) });
MetadataFull createdMetadata = await client.FolderMetadata.CreateFolderMetadataByIdAsync(folderId: folder.Id, scope: CreateFolderMetadataByIdScope.Enterprise, templateKey: templateKey, requestBody: new Dictionary<string, object>() { { "name", "John" }, { "age", 23 }, { "birthDate", "2001-01-03T02:20:50.520Z" }, { "countryCode", "US" }, { "sports", Array.AsReadOnly(new [] {"basketball","tennis"}) } });
Assert.IsTrue(StringUtils.ToStringRepresentation(createdMetadata.Template) == templateKey);
Assert.IsTrue(StringUtils.ToStringRepresentation(NullableUtils.Unwrap(createdMetadata.ExtraData)["name"]) == "John");
Assert.IsTrue(StringUtils.ToStringRepresentation(NullableUtils.Unwrap(createdMetadata.ExtraData)["age"]) == "23");
Assert.IsTrue(StringUtils.ToStringRepresentation(NullableUtils.Unwrap(createdMetadata.ExtraData)["birthDate"]) == "2001-01-03T02:20:50.520Z");
Assert.IsTrue(StringUtils.ToStringRepresentation(NullableUtils.Unwrap(createdMetadata.ExtraData)["countryCode"]) == "US");
await client.FolderMetadata.DeleteFolderMetadataByIdAsync(folderId: folder.Id, scope: DeleteFolderMetadataByIdScope.Enterprise, templateKey: templateKey);
await client.MetadataTemplates.DeleteMetadataTemplateAsync(scope: DeleteMetadataTemplateScope.Enterprise, templateKey: templateKey);
await client.Folders.DeleteFolderByIdAsync(folderId: folder.Id);
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,7 @@ public async System.Threading.Tasks.Task TestMetadataCascadePolicies() {
MetadataCascadePolicies policies = await client.MetadataCascadePolicies.GetMetadataCascadePoliciesAsync(queryParams: new GetMetadataCascadePoliciesQueryParams(folderId: folder.Id));
Assert.IsTrue(NullableUtils.Unwrap(policies.Entries).Count == 1);
await Assert.That.IsExceptionAsync(async() => await client.MetadataCascadePolicies.ApplyMetadataCascadePolicyAsync(metadataCascadePolicyId: cascadePolicyId, requestBody: new ApplyMetadataCascadePolicyRequestBody(conflictResolution: ApplyMetadataCascadePolicyRequestBodyConflictResolutionField.Overwrite)));
Dictionary<string, string> data = new Dictionary<string, string>() { { "testName", "xyz" } };
await client.FolderMetadata.CreateFolderMetadataByIdAsync(folderId: folder.Id, scope: CreateFolderMetadataByIdScope.Enterprise, templateKey: templateKey, requestBody: data);
await client.FolderMetadata.CreateFolderMetadataByIdAsync(folderId: folder.Id, scope: CreateFolderMetadataByIdScope.Enterprise, templateKey: templateKey, requestBody: new Dictionary<string, object>() { { "testName", "xyz" } });
await client.MetadataCascadePolicies.ApplyMetadataCascadePolicyAsync(metadataCascadePolicyId: cascadePolicyId, requestBody: new ApplyMetadataCascadePolicyRequestBody(conflictResolution: ApplyMetadataCascadePolicyRequestBodyConflictResolutionField.Overwrite));
await client.MetadataCascadePolicies.DeleteMetadataCascadePolicyByIdAsync(metadataCascadePolicyId: cascadePolicyId);
await Assert.That.IsExceptionAsync(async() => await client.MetadataCascadePolicies.GetMetadataCascadePolicyByIdAsync(metadataCascadePolicyId: cascadePolicyId));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public async System.Threading.Tasks.Task TestMetadataTemplates() {
Assert.IsTrue(NullableUtils.Unwrap(template.Fields).Count == 1);
Assert.IsTrue(NullableUtils.Unwrap(template.Fields)[0].Key == "testName");
Assert.IsTrue(NullableUtils.Unwrap(template.Fields)[0].DisplayName == "testName");
MetadataTemplate updatedTemplate = await client.MetadataTemplates.UpdateMetadataTemplateAsync(scope: UpdateMetadataTemplateScope.Enterprise, templateKey: templateKey, requestBody: Array.AsReadOnly(new [] {new UpdateMetadataTemplateRequestBody(op: UpdateMetadataTemplateRequestBodyOpField.AddField) { FieldKey = "newfieldname", Data = new Dictionary<string, string>() { { "type", "string" }, { "displayName", "newFieldName" } } }}));
MetadataTemplate updatedTemplate = await client.MetadataTemplates.UpdateMetadataTemplateAsync(scope: UpdateMetadataTemplateScope.Enterprise, templateKey: templateKey, requestBody: Array.AsReadOnly(new [] {new UpdateMetadataTemplateRequestBody(op: UpdateMetadataTemplateRequestBodyOpField.AddField) { FieldKey = "newfieldname", Data = new Dictionary<string, object>() { { "type", "string" }, { "displayName", "newFieldName" } } }}));
Assert.IsTrue(NullableUtils.Unwrap(updatedTemplate.Fields).Count == 2);
Assert.IsTrue(NullableUtils.Unwrap(updatedTemplate.Fields)[1].Key == "newfieldname");
Assert.IsTrue(NullableUtils.Unwrap(updatedTemplate.Fields)[1].DisplayName == "newFieldName");
Expand All @@ -45,7 +45,7 @@ public async System.Threading.Tasks.Task TestGetMetadataTemplateByInstance() {
FileFull file = await new CommonsManager().UploadNewFileAsync();
string templateKey = string.Concat("key", Utils.GetUUID());
MetadataTemplate template = await client.MetadataTemplates.CreateMetadataTemplateAsync(requestBody: new CreateMetadataTemplateRequestBody(scope: "enterprise", displayName: templateKey) { TemplateKey = templateKey, Fields = Array.AsReadOnly(new [] {new CreateMetadataTemplateRequestBodyFieldsField(type: CreateMetadataTemplateRequestBodyFieldsTypeField.String, key: "testName", displayName: "testName")}) });
MetadataFull createdMetadataInstance = await client.FileMetadata.CreateFileMetadataByIdAsync(fileId: file.Id, scope: CreateFileMetadataByIdScope.Enterprise, templateKey: templateKey, requestBody: new Dictionary<string, string>() { { "testName", "xyz" } });
MetadataFull createdMetadataInstance = await client.FileMetadata.CreateFileMetadataByIdAsync(fileId: file.Id, scope: CreateFileMetadataByIdScope.Enterprise, templateKey: templateKey, requestBody: new Dictionary<string, object>() { { "testName", "xyz" } });
MetadataTemplates metadataTemplates = await client.MetadataTemplates.GetMetadataTemplatesByInstanceIdAsync(queryParams: new GetMetadataTemplatesByInstanceIdQueryParams(metadataInstanceId: NullableUtils.Unwrap(createdMetadataInstance.Id)));
Assert.IsTrue(NullableUtils.Unwrap(metadataTemplates.Entries).Count == 1);
Assert.IsTrue(NullableUtils.Unwrap(metadataTemplates.Entries)[0].DisplayName == templateKey);
Expand Down
2 changes: 1 addition & 1 deletion Box.Sdk.Gen/Managers/FileMetadata/FileMetadataManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ public async System.Threading.Tasks.Task<MetadataFull> GetFileMetadataByIdAsync(
/// <param name="cancellationToken">
/// Token used for request cancellation.
/// </param>
public async System.Threading.Tasks.Task<MetadataFull> CreateFileMetadataByIdAsync(string fileId, CreateFileMetadataByIdScope scope, string templateKey, Dictionary<string, string> requestBody, CreateFileMetadataByIdHeaders? headers = default, System.Threading.CancellationToken? cancellationToken = null) {
public async System.Threading.Tasks.Task<MetadataFull> CreateFileMetadataByIdAsync(string fileId, CreateFileMetadataByIdScope scope, string templateKey, Dictionary<string, object> requestBody, CreateFileMetadataByIdHeaders? headers = default, System.Threading.CancellationToken? cancellationToken = null) {
headers = headers ?? new CreateFileMetadataByIdHeaders();
Dictionary<string, string> headersMap = Utils.PrepareParams(map: DictionaryUtils.MergeDictionaries(new Dictionary<string, string?>() { }, headers.ExtraHeaders));
FetchResponse response = await HttpClientAdapter.FetchAsync(string.Concat(this.NetworkSession.BaseUrls.BaseUrl, "/2.0/files/", StringUtils.ToStringRepresentation(fileId), "/metadata/", StringUtils.ToStringRepresentation(scope), "/", StringUtils.ToStringRepresentation(templateKey)), new FetchOptions(networkSession: this.NetworkSession) { Method = "POST", Headers = headersMap, Data = SimpleJsonSerializer.Serialize(requestBody), ContentType = "application/json", ResponseFormat = "json", Auth = this.Auth, CancellationToken = cancellationToken }).ConfigureAwait(false);
Expand Down
Loading

0 comments on commit 2a2208d

Please sign in to comment.