public async Task ExecuteMetadataQuery_ForSmallFile_ShouldBeAbleToFindThisFileByMetadata() { var adminFolder = await CreateFolderAsAdmin("0"); var metadataFields = new Dictionary <string, object> { { "status", "active" } }; var uploadedFileWithTemplateKey = await CreateSmallFileWithMetadata(adminFolder.Id, metadataFields); var templateKey = uploadedFileWithTemplateKey.Item2; var metadataQueryKey = $"enterprise_{EnterpriseId}.{templateKey}"; var queryRequest = new BoxMetadataQueryRequest { AncestorFolderId = adminFolder.Id, From = metadataQueryKey, Fields = new List <string>() { $"metadata.{metadataQueryKey}.status" }, Query = "status = :value", QueryParameters = new Dictionary <string, object>() { { "value", "active" } } }; var response = await AdminClient.MetadataManager.ExecuteMetadataQueryAsync(queryRequest); Assert.AreEqual(response.Entries.Count, 1); Assert.AreEqual(((BoxFile)response.Entries[0]).Metadata[$"enterprise_{EnterpriseId}"][templateKey]["status"].Value, "active"); }
/// <summary> /// Allows you to query by metadata on Box items with fields passed in /// </summary> /// <param name="queryRequest">Request object.</param> /// <returns>A collection of items and their associated metadata</returns> public async Task <BoxCollectionMarkerBased <BoxItem> > ExecuteMetadataQueryAsync(BoxMetadataQueryRequest queryRequest) { queryRequest.From.ThrowIfNullOrWhiteSpace("from"); queryRequest.AncestorFolderId.ThrowIfNullOrWhiteSpace("ancestorFolderId"); JObject bodyObject = GetMetadataQueryBody(queryRequest.From, queryRequest.AncestorFolderId, queryRequest.Query, queryRequest.QueryParameters, queryRequest.OrderBy, queryRequest.Fields, queryRequest.Limit, queryRequest.Marker); BoxRequest request = new BoxRequest(_config.MetadataQueryUri) .Method(RequestMethod.Post) .Payload(_converter.Serialize(bodyObject)); request.ContentType = Constants.RequestParameters.ContentTypeJson; if (queryRequest.AutoPaginate) { return(await AutoPaginateMarkerMetadataQueryV2 <BoxItem>(request).ConfigureAwait(false)); } else { IBoxResponse <BoxCollectionMarkerBased <BoxItem> > response = await ToResponseAsync <BoxCollectionMarkerBased <BoxItem> >(request).ConfigureAwait(false); return(response.ResponseObject); } }
public async Task ExecuteMetadataQueryWithoutUseIndexWithFields_ValidResponse() { /*** Arrange ***/ IBoxRequest boxRequest = null; Handler.Setup(h => h.ExecuteAsync <BoxCollectionMarkerBased <BoxItem> >(It.IsAny <IBoxRequest>())) .Returns(Task.FromResult <IBoxResponse <BoxCollectionMarkerBased <BoxItem> > >(new BoxResponse <BoxCollectionMarkerBased <BoxItem> >() { Status = ResponseStatus.Success, ContentString = LoadFixtureFromJson("Fixtures/BoxMetadata/ExecuteMetadataWithFieldsQuery200.json") })) .Callback <IBoxRequest>(r => boxRequest = r); /*** Act ***/ var queryParams = new Dictionary <string, object> { { "arg", 100 } }; var orderByList = new List <BoxMetadataQueryOrderBy>(); var orderBy = new BoxMetadataQueryOrderBy() { FieldKey = "amount", Direction = BoxSortDirection.ASC }; orderByList.Add(orderBy); var marker = "q3f87oqf3qygou5t478g9gwrbul"; var metadataRequest = new BoxMetadataQueryRequest { From = "enterprise_67890.catalogImages", Query = "photographer = :arg", QueryParameters = new Dictionary <string, object> { { "arg", "Bob Dylan" } }, AncestorFolderId = "5555", OrderBy = orderByList, Marker = marker, AutoPaginate = false, Fields = new List <string> { "id", "name", "sha1", "metadata.enterprise_240748.catalogImages.photographer" } }; BoxCollectionMarkerBased <BoxItem> items = await _metadataManager.ExecuteMetadataQueryAsync(metadataRequest); /*** Assert ***/ // Request check Assert.IsNotNull(boxRequest); Assert.AreEqual(RequestMethod.Post, boxRequest.Method); Assert.AreEqual(MetadataQueryUri, boxRequest.AbsoluteUri.AbsoluteUri); var payload = JObject.Parse(boxRequest.Payload); Assert.AreEqual("enterprise_67890.catalogImages", payload["from"]); Assert.AreEqual("photographer = :arg", payload["query"]); Assert.AreEqual("5555", payload["ancestor_folder_id"]); var payloadFields = JArray.Parse(payload["fields"].ToString()); Assert.AreEqual("id", payloadFields[0]); Assert.AreEqual("name", payloadFields[1]); Assert.AreEqual("sha1", payloadFields[2]); Assert.AreEqual("metadata.enterprise_240748.catalogImages.photographer", payloadFields[3]); Assert.AreEqual(marker, payload["marker"]); Assert.AreEqual("Bob Dylan", payload["query_params"]["arg"]); var payloadOrderBy = JArray.Parse(payload["order_by"].ToString()); Assert.AreEqual("amount", payloadOrderBy[0]["field_key"]); Assert.AreEqual("ASC", payloadOrderBy[0]["direction"]); // Response check Assert.AreEqual(items.Entries[0].Type, "file"); Assert.AreEqual(items.Entries[0].Id, "1244738582"); Assert.AreEqual(items.Entries[0].Name, "Very Important.docx"); Assert.AreEqual(items.Entries[1].Type, "folder"); Assert.AreEqual(items.Entries[1].Id, "124242482"); Assert.AreEqual(items.Entries[1].Name, "Also Important.docx"); var file = (BoxFile)items.Entries[0]; Assert.AreEqual(file.Metadata["enterprise_67890"]["catalogImages"]["photographer"].Value, "Bob Dylan"); }