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");
        }
Esempio n. 2
0
        /// <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");
        }