/api/user/connect/persons (GET)
await global.api.user.connect.Persons.get(req) Located in Stripe Connect module API
Returns array
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 stripeid | |
invalid-stripeid | missing querystring stripeid |
invalid-account | ineligible accessing account |
invalid-stripe-account | ineligible stripe account for individual |
Receives
API routes may receive parameters from the URL and POST supporting simple and multipart:
Field | Value | Required | Type |
---|---|---|---|
all | boolean | optional | URL |
limit | integer | optional | URL |
offset | integer | optional | URL |
NodeJS source (edit on github)
If you see a problem with the source submit a pull request on Github.
const connect = require('../../../../../index.js')
module.exports = {
get: async (req) => {
if (!req.query || !req.query.stripeid) {
throw new Error('invalid-stripeid')
}
const stripeAccount = await global.api.user.connect.StripeAccount.get(req)
if (!stripeAccount) {
throw new Error('invalid-stripeid')
}
if (stripeAccount.business_type !== 'company') {
throw new Error('invalid-stripe-account')
}
let personids
if (req.query.all) {
personids = await connect.StorageList.listAll(`${req.appid}/stripeAccount/persons/${req.query.stripeid}`)
} else {
const offset = req.query.offset ? parseInt(req.query.offset, 10) : 0
const limit = req.query.limit ? parseInt(req.query.limit, 10) : global.pageSize
personids = await connect.StorageList.list(`${req.appid}/stripeAccount/persons/${req.query.stripeid}`, offset, limit)
}
if (!personids || !personids.length) {
return
}
const persons = []
for (const id of personids) {
req.query.personid = id
const person = await global.api.user.connect.Person.get(req)
persons.push(person)
}
return persons
}
}
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')
const DashboardTestHelper = require('@userdashboard/dashboard/test-helper.js')
describe('/api/user/connect/persons', function () {
this.timeout(30 * 60 * 1000)
const cachedResponses = {}
const cachedPersons = []
before(async () => {
await DashboardTestHelper.setupBeforeEach()
await TestHelper.setupBeforeEach()
global.delayDiskWrites = true
const user = await TestHelper.createUser()
await TestHelper.createStripeAccount(user, {
country: 'AT',
type: 'company'
})
await TestHelper.createPerson(user, {
relationship_representative: 'true',
relationship_executive: 'true',
relationship_title: 'SVP Testing',
relationship_percent_ownership: '0'
})
cachedPersons.unshift(user.representative.id)
for (let i = 0, len = 2; i < len; i++) {
await TestHelper.createPerson(user, {
relationship_director: 'true',
relationship_executive: 'true',
relationship_title: 'SVP Testing',
relationship_percent_ownership: '0'
})
cachedPersons.unshift(user.director.id)
await TestHelper.createPerson(user, {
relationship_owner: 'true',
relationship_executive: 'true',
relationship_title: 'SVP Testing',
relationship_percent_ownership: '11'
})
cachedPersons.unshift(user.owner.id)
}
const req1 = TestHelper.createRequest(`/api/user/connect/persons?stripeid=${user.stripeAccount.id}`)
req1.account = user.account
req1.session = user.session
cachedResponses.returns = await req1.get()
global.pageSize = 3
cachedResponses.pageSize = await req1.get()
const req2 = TestHelper.createRequest(`/api/user/connect/persons?stripeid=${user.stripeAccount.id}&offset=1`)
req2.account = user.account
req2.session = user.session
cachedResponses.offset = await req2.get()
const req3 = TestHelper.createRequest(`/api/user/connect/persons?stripeid=${user.stripeAccount.id}&limit=1`)
req3.account = user.account
req3.session = user.session
cachedResponses.limit = await req3.get()
const req4 = TestHelper.createRequest(`/api/user/connect/persons?stripeid=${user.stripeAccount.id}&all=true`)
req4.account = user.account
req4.session = user.session
cachedResponses.all = await req4.get()
})
describe('exceptions', () => {
describe('invalid-stripeid', () => {
it('missing querystring stripeid', async () => {
const user = await TestHelper.createUser()
await TestHelper.createStripeAccount(user, {
country: 'US',
type: 'individual'
})
const req = TestHelper.createRequest('/api/user/connect/persons')
req.account = user.account
req.session = user.session
let errorMessage
try {
await req.get()
} catch (error) {
errorMessage = error.message
}
assert.strictEqual(errorMessage, 'invalid-stripeid')
})
it('invalid querystring stripeid', async () => {
const user = await TestHelper.createUser()
const req = TestHelper.createRequest('/api/user/connect/persons?stripeid=invalid')
req.account = user.account
req.session = user.session
let errorMessage
try {
await req.get()
} catch (error) {
errorMessage = error.message
}
assert.strictEqual(errorMessage, 'invalid-stripeid')
})
})
describe('invalid-account', () => {
it('ineligible accessing account', async () => {
const user = await TestHelper.createUser()
await TestHelper.createStripeAccount(user, {
country: 'US',
type: 'company'
})
const user2 = await TestHelper.createUser()
const req = TestHelper.createRequest(`/api/user/connect/persons?stripeid=${user.stripeAccount.id}`)
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('invalid-stripe-account', () => {
it('ineligible stripe account for individual', async () => {
const user = await TestHelper.createUser()
await TestHelper.createStripeAccount(user, {
country: 'US',
type: 'individual'
})
const req = TestHelper.createRequest(`/api/user/connect/persons?stripeid=${user.stripeAccount.id}`)
req.account = user.account
req.session = user.session
let errorMessage
try {
await req.get()
} catch (error) {
errorMessage = error.message
}
assert.strictEqual(errorMessage, 'invalid-stripe-account')
})
})
})
describe('receives', function () {
it('optional querystring offset (integer)', async () => {
const offset = 1
const personsNow = cachedResponses.offset
for (let i = 0, len = global.pageSize; i < len; i++) {
assert.strictEqual(personsNow[i].id, cachedPersons[offset + i])
}
})
it('optional querystring limit (integer)', async () => {
const limit = 1
const personsNow = cachedResponses.limit
assert.strictEqual(personsNow.length, limit)
})
it('optional querystring all (boolean)', async () => {
const personsNow = cachedResponses.all
assert.strictEqual(personsNow.length, cachedPersons.length)
})
})
describe('returns', function () {
it('array', async () => {
const persons = cachedResponses.returns
assert.strictEqual(persons.length, global.pageSize)
})
})
describe('configuration', function () {
it('environment PAGE_SIZE', async () => {
global.pageSize = 3
const persons = cachedResponses.pageSize
assert.strictEqual(persons.length, global.pageSize)
})
})
})