diff --git a/schemas/organization.getMetadata.json b/schemas/organization.getMetadata.json index 1671d533a..865d48cdc 100644 --- a/schemas/organization.getMetadata.json +++ b/schemas/organization.getMetadata.json @@ -6,6 +6,10 @@ "properties": { "organizationId": { "type": "string" + }, + "audience": { + "type": "string", + "minLength": 1 } } } diff --git a/schemas/organization.updateMetadata.json b/schemas/organization.updateMetadata.json index fd13087ad..f6f25d780 100644 --- a/schemas/organization.updateMetadata.json +++ b/schemas/organization.updateMetadata.json @@ -8,6 +8,10 @@ "organizationId": { "type": "string" }, + "audience": { + "type": "string", + "minLength": 1 + }, "metadata": { "$ref": "common.json#/definitions/metadata" } diff --git a/src/actions/organization/getMetadata.js b/src/actions/organization/getMetadata.js index 65ec7a54d..a55810dc3 100644 --- a/src/actions/organization/getMetadata.js +++ b/src/actions/organization/getMetadata.js @@ -15,9 +15,9 @@ const { getOrganizationMetadata, checkOrganizationExists } = require('../../util * @apiSuccess (Response) {Object} data.attributes.metadata - organization metadata */ async function organizationMetadata({ params }) { - const { organizationId } = params; + const { organizationId, audience } = params; - const metadata = await getOrganizationMetadata.call(this, organizationId); + const metadata = await getOrganizationMetadata.call(this, organizationId, audience); return { data: { id: organizationId, diff --git a/src/actions/organization/updateMetadata.js b/src/actions/organization/updateMetadata.js index fbce53774..2a5186e28 100644 --- a/src/actions/organization/updateMetadata.js +++ b/src/actions/organization/updateMetadata.js @@ -21,18 +21,18 @@ const { checkOrganizationExists, getOrganizationMetadata } = require('../../util */ async function updateOrganizationMetadata({ params }) { const { config } = this; - const { metadata, organizationId } = params; - const { audience } = config.organizations; + const { metadata, organizationId, audience } = params; + const { audience: defaultAudience } = config.organizations; if (metadata) { await setOrganizationMetadata.call(this, { organizationId, - audience, + audience: audience || defaultAudience, metadata, }); } - const data = await getOrganizationMetadata.call(this, organizationId); + const data = await getOrganizationMetadata.call(this, organizationId, audience); return { data: { id: organizationId, diff --git a/src/utils/organization/getOrganizationMetadata.js b/src/utils/organization/getOrganizationMetadata.js index 5eb019b06..3b0da4ddd 100644 --- a/src/utils/organization/getOrganizationMetadata.js +++ b/src/utils/organization/getOrganizationMetadata.js @@ -3,11 +3,11 @@ const { ORGANIZATIONS_METADATA } = require('../../constants'); const redisKey = require('../key'); const JSONParse = require('../safeParse'); -async function getOrganizationMetadata(organizationId) { +async function getOrganizationMetadata(organizationId, audience) { const { redis, config } = this; - const { audience } = config.organizations; + const { audience: defaultAudience } = config.organizations; - const metadata = await redis.hgetall(redisKey(organizationId, ORGANIZATIONS_METADATA, audience)); + const metadata = await redis.hgetall(redisKey(organizationId, ORGANIZATIONS_METADATA, audience || defaultAudience)); return mapValues(metadata, JSONParse); } diff --git a/test/suites/organization/updateMetadata.js b/test/suites/organization/updateMetadata.js index 60d78d56d..90c37216f 100644 --- a/test/suites/organization/updateMetadata.js +++ b/test/suites/organization/updateMetadata.js @@ -39,6 +39,36 @@ describe('#update metadata organization', function registerSuite() { }); }); + it('must be able to update and get custom audience organization metadata', async function test() { + const updatedOpts = { + organizationId: this.organization.id, + audience: 'test-audience', + metadata: { + $set: { address: 'test-audience' }, + }, + }; + + await this.dispatch('users.organization.updateMetadata', updatedOpts) + .reflect() + .then(inspectPromise(true)) + .then((createdOrganization) => { + assert(createdOrganization.data.attributes.address === 'test-audience'); + }); + + const opts = { + organizationId: this.organization.id, + audience: 'test-audience', + }; + + return this.dispatch('users.organization.getMetadata', opts) + .reflect() + .then(inspectPromise(true)) + .then((response) => { + assert.ok(response.data.attributes); + assert(response.data.attributes.address === 'test-audience'); + }); + }); + it('must return organization not found error', async function test() { const opts = { organizationId: '1234',