/api/user/organizations/membership (GET)
await global.api.user.organizations.Membership.get(req) Located in Organizations module API
Returns object
Exceptions
These exceptions are thrown (NodeJS) or returned as JSON (HTTP) if you provide incorrect data or do not meet the requirements:
Exception | Circumstances |
---|---|
invalid querystring membershipid | |
invalid-membershipid | missing querystring membershipid |
invalid-account | accessing account must be organization member or owner |
NodeJS source (edit on github)
If you see a problem with the source submit a pull request on Github.
const organizations = require('../../../../../index.js')
module.exports = {
get: async (req) => {
if (!req.query || !req.query.membershipid) {
throw new Error('invalid-membershipid')
}
let membership = await organizations.Storage.read(`${req.appid}/membership/${req.query.membershipid}`)
if (!membership) {
throw new Error('invalid-membershipid')
}
membership = JSON.parse(membership)
if (membership.object !== 'membership') {
throw new Error('invalid-membershipid')
}
if (membership.accountid !== req.account.accountid) {
req.query.organizationid = membership.organizationid
const organization = await global.api.user.organizations.Organization.get(req)
if (!organization) {
throw new Error('invalid-membershipid')
}
if (organization.ownerid !== req.account.accountid) {
const member = await organizations.Storage.exists(`${req.appid}/map/organizationid/membershipid/${req.account.accountid}/${req.query.organizationid}`)
if (!member) {
throw new Error('invalid-account')
}
}
}
req.query.profileid = membership.profileid
req.storage = organizations
const profile = await global.api.administrator.Profile.get(req)
const requireProfileFields = global.membershipProfileFields
for (const field of requireProfileFields) {
if (field === 'full-name') {
membership.firstName = profile.firstName
membership.lastName = profile.lastName
} else {
const displayName = global.profileFieldMap[field]
membership[displayName] = profile[displayName]
}
}
return membership
}
}
Test source (edit on github)
Tests perform real HTTP requests against a running Dashboard server.
/* eslint-env mocha */
const assert = require('assert')
const TestHelper = require('../../../../../test-helper.js')
describe('/api/user/organizations/membership', () => {
describe('exceptions', () => {
describe('invalid-membershipid', () => {
it('missing querystring membershipid', async () => {
const user = await TestHelper.createUser()
const req = TestHelper.createRequest('/api/user/organizations/membership')
req.account = user.account
req.session = user.session
let errorMessage
try {
await req.get()
} catch (error) {
errorMessage = error.message
}
assert.strictEqual(errorMessage, 'invalid-membershipid')
})
it('invalid querystring membershipid', async () => {
const user = await TestHelper.createUser()
const req = TestHelper.createRequest('/api/user/organizations/membership?membershipid=invalid')
req.account = user.account
req.session = user.session
let errorMessage
try {
await req.get()
} catch (error) {
errorMessage = error.message
}
assert.strictEqual(errorMessage, 'invalid-membershipid')
})
})
describe('invalid-account', () => {
it('accessing account must be organization member or owner', async () => {
const owner = await TestHelper.createUser()
const user = await TestHelper.createUser()
global.userProfileFields = ['display-name', 'display-email']
await TestHelper.createProfile(owner, {
'display-name': owner.profile.firstName,
'display-email': owner.profile.contactEmail
})
await TestHelper.createProfile(user, {
'display-name': user.profile.firstName,
'display-email': user.profile.contactEmail
})
await TestHelper.createOrganization(owner, {
email: owner.profile.displayEmail,
name: 'My organization',
profileid: owner.profile.profileid
})
await TestHelper.createInvitation(owner)
await TestHelper.acceptInvitation(user, owner)
const user2 = await TestHelper.createUser()
const req = TestHelper.createRequest(`/api/user/organizations/membership?membershipid=${user.membership.membershipid}`)
req.account = user2.account
req.session = user2.session
let errorMessage
try {
await req.get()
} catch (error) {
errorMessage = error.message
}
assert.strictEqual(errorMessage, 'invalid-account')
})
})
})
describe('returns', () => {
it('object', async () => {
const owner = await TestHelper.createUser()
const user = await TestHelper.createUser()
global.userProfileFields = ['display-name', 'display-email']
await TestHelper.createProfile(owner, {
'display-name': owner.profile.firstName,
'display-email': owner.profile.contactEmail
})
await TestHelper.createProfile(user, {
'display-name': user.profile.firstName,
'display-email': user.profile.contactEmail
})
await TestHelper.createOrganization(owner, {
email: owner.profile.displayEmail,
name: 'My organization',
profileid: owner.profile.profileid
})
await TestHelper.createInvitation(owner)
await TestHelper.acceptInvitation(user, owner)
const req = TestHelper.createRequest(`/api/user/organizations/membership?membershipid=${user.membership.membershipid}`)
req.account = user.account
req.session = user.session
req.filename = __filename
req.saveResponse = true
const membership = await req.get()
assert.strictEqual(membership.object, 'membership')
})
})
})