Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions lib-es5/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ exports.resources = function resources(callback) {
if (options.start_at != null && Object.prototype.toString.call(options.start_at) === '[object Date]') {
options.start_at = options.start_at.toUTCString();
}
return call_api("get", uri, pickOnlyExistingValues(options, "next_cursor", "max_results", "prefix", "tags", "context", "direction", "moderations", "start_at"), callback, options);
return call_api("get", uri, pickOnlyExistingValues(options, "next_cursor", "max_results", "prefix", "tags", "context", "direction", "moderations", "start_at", "metadata"), callback, options);
};

exports.resources_by_tag = function resources_by_tag(tag, callback) {
Expand All @@ -64,7 +64,7 @@ exports.resources_by_tag = function resources_by_tag(tag, callback) {
uri = void 0;
resource_type = options.resource_type || "image";
uri = ["resources", resource_type, "tags", tag];
return call_api("get", uri, pickOnlyExistingValues(options, "next_cursor", "max_results", "tags", "context", "direction", "moderations"), callback, options);
return call_api("get", uri, pickOnlyExistingValues(options, "next_cursor", "max_results", "tags", "context", "direction", "moderations", "metadata"), callback, options);
};

exports.resources_by_context = function resources_by_context(key, value, callback) {
Expand All @@ -75,7 +75,7 @@ exports.resources_by_context = function resources_by_context(key, value, callbac
uri = void 0;
resource_type = options.resource_type || "image";
uri = ["resources", resource_type, "context"];
params = pickOnlyExistingValues(options, "next_cursor", "max_results", "tags", "context", "direction", "moderations");
params = pickOnlyExistingValues(options, "next_cursor", "max_results", "tags", "context", "direction", "moderations", "metadata");
params.key = key;
if (value != null) {
params.value = value;
Expand All @@ -90,7 +90,7 @@ exports.resources_by_moderation = function resources_by_moderation(kind, status,
uri = void 0;
resource_type = options.resource_type || "image";
uri = ["resources", resource_type, "moderations", kind, status];
return call_api("get", uri, pickOnlyExistingValues(options, "next_cursor", "max_results", "tags", "context", "direction", "moderations"), callback, options);
return call_api("get", uri, pickOnlyExistingValues(options, "next_cursor", "max_results", "tags", "context", "direction", "moderations", "metadata"), callback, options);
};

exports.resources_by_ids = function resources_by_ids(public_ids, callback) {
Expand Down
8 changes: 4 additions & 4 deletions lib/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,21 +38,21 @@ exports.resources = function resources(callback, options = {}) {
if ((options.start_at != null) && Object.prototype.toString.call(options.start_at) === '[object Date]') {
options.start_at = options.start_at.toUTCString();
}
return call_api("get", uri, pickOnlyExistingValues(options, "next_cursor", "max_results", "prefix", "tags", "context", "direction", "moderations", "start_at"), callback, options);
return call_api("get", uri, pickOnlyExistingValues(options, "next_cursor", "max_results", "prefix", "tags", "context", "direction", "moderations", "start_at", "metadata"), callback, options);
};

exports.resources_by_tag = function resources_by_tag(tag, callback, options = {}) {
let resource_type, uri;
resource_type = options.resource_type || "image";
uri = ["resources", resource_type, "tags", tag];
return call_api("get", uri, pickOnlyExistingValues(options, "next_cursor", "max_results", "tags", "context", "direction", "moderations"), callback, options);
return call_api("get", uri, pickOnlyExistingValues(options, "next_cursor", "max_results", "tags", "context", "direction", "moderations", "metadata"), callback, options);
};

exports.resources_by_context = function resources_by_context(key, value, callback, options = {}) {
let params, resource_type, uri;
resource_type = options.resource_type || "image";
uri = ["resources", resource_type, "context"];
params = pickOnlyExistingValues(options, "next_cursor", "max_results", "tags", "context", "direction", "moderations");
params = pickOnlyExistingValues(options, "next_cursor", "max_results", "tags", "context", "direction", "moderations", "metadata");
params.key = key;
if (value != null) {
params.value = value;
Expand All @@ -64,7 +64,7 @@ exports.resources_by_moderation = function resources_by_moderation(kind, status,
let resource_type, uri;
resource_type = options.resource_type || "image";
uri = ["resources", resource_type, "moderations", kind, status];
return call_api("get", uri, pickOnlyExistingValues(options, "next_cursor", "max_results", "tags", "context", "direction", "moderations"), callback, options);
return call_api("get", uri, pickOnlyExistingValues(options, "next_cursor", "max_results", "tags", "context", "direction", "moderations", "metadata"), callback, options);
};

exports.resources_by_ids = function resources_by_ids(public_ids, callback, options = {}) {
Expand Down
79 changes: 79 additions & 0 deletions test/integration/api/admin/api_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@ const EXPLICIT_TRANSFORMATION2 = {
overlay: `text:Arial_60:${TEST_TAG}`
};

const METADATA_EXTERNAL_ID = "metadata_external_id_" + TEST_TAG;
const METADATA_DEFAULT_VALUE = "metadata_default_value_" + TEST_TAG;


function getAllTags({ resources }) {
Expand All @@ -87,6 +89,12 @@ describe("api", function () {
before(function () {
this.timeout(TIMEOUT.LONG);
return Q.allSettled([
cloudinary.v2.api.add_metadata_field({
external_id: METADATA_EXTERNAL_ID,
label: METADATA_EXTERNAL_ID,
type: 'string',
default_value: METADATA_DEFAULT_VALUE
}),
uploadImage({
public_id: PUBLIC_ID,
tags: UPLOAD_TAGS,
Expand Down Expand Up @@ -123,6 +131,7 @@ describe("api", function () {
expect().fail("Missing key and secret. Please set CLOUDINARY_URL.");
}
return Q.allSettled([
cloudinary.v2.api.delete_metadata_field(METADATA_EXTERNAL_ID),
cloudinary.v2.api.delete_resources_by_tag(TEST_TAG),
cloudinary.v2.api.delete_upload_preset(API_TEST_UPLOAD_PRESET1),
cloudinary.v2.api.delete_upload_preset(API_TEST_UPLOAD_PRESET2),
Expand Down Expand Up @@ -157,6 +166,76 @@ describe("api", function () {
expect(resource.type).to.eql("upload");
});
});
it("should allow listing resources with metadata", async function () {
this.timeout(TIMEOUT.MEDIUM);
let result = await cloudinary.v2.api.resources({
type: "upload",
prefix: PUBLIC_ID,
metadata: true
});
result.resources.forEach((resource) => {
expect(resource).to.have.property('metadata');
});
result = await cloudinary.v2.api.resources({
type: "upload",
prefix: PUBLIC_ID,
metadata: false
});
result.resources.forEach((resource) => {
expect(resource).to.not.have.property('metadata');
});
});
it("should allow listing resources by tag with metadata", async function () {
this.timeout(TIMEOUT.MEDIUM);
let result = await cloudinary.v2.api.resources_by_tag(TEST_TAG, {
metadata: true
});
result.resources.forEach((resource) => {
expect(resource).to.have.property('metadata');
});
result = await cloudinary.v2.api.resources_by_tag(TEST_TAG, {
metadata: false
});
result.resources.forEach((resource) => {
expect(resource).to.not.have.property('metadata');
});
});
it("should allow listing resources by context with metadata", async function () {
this.timeout(TIMEOUT.MEDIUM);
let result = await cloudinary.v2.api.resources_by_context(contextKey, null, {
metadata: true
});
result.resources.forEach((resource) => {
expect(resource).to.have.property('metadata');
});
result = await cloudinary.v2.api.resources_by_context(contextKey, null, {
metadata: false
});
result.resources.forEach((resource) => {
expect(resource).to.not.have.property('metadata');
});
});
it("should allow listing resources by moderation with metadata", async function () {
this.timeout(TIMEOUT.MEDIUM);
const moderation = "manual";
const status = "pending";
await uploadImage({
moderation,
tags: [TEST_TAG]
});
let result = await cloudinary.v2.api.resources_by_moderation(moderation, status, {
metadata: true
});
result.resources.forEach((resource) => {
expect(resource).to.have.property('metadata');
});
result = await cloudinary.v2.api.resources_by_moderation(moderation, status, {
metadata: false
});
result.resources.forEach((resource) => {
expect(resource).to.not.have.property('metadata');
});
});
it("should allow listing resources by type", function () {
this.timeout(TIMEOUT.MEDIUM);
return uploadImage({
Expand Down