Skip to content

Commit

Permalink
fix(buildParams): use brackets for arrays
Browse files Browse the repository at this point in the history
  • Loading branch information
wweaver committed Aug 2, 2023
1 parent bebb9e1 commit f66d284
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 51 deletions.
4 changes: 2 additions & 2 deletions src/common/request/params.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,12 @@ describe('buildParams', () => {

describe('array', () => {
it('handles single', () => {
expect(buildParams({ a: [1] })).toBe('a=1')
expect(buildParams({ a: [1] })).toBe('a%5B%5D=1')
})

it('handles multiple', () => {
expect(buildParams({ a: [1, '2', true, undefined], b: ['foo', 'bar', null] })).toBe(
'a=1&a=2&a=true&b=foo&b=bar',
'a%5B%5D=1&a%5B%5D=2&a%5B%5D=true&b%5B%5D=foo&b%5B%5D=bar',
)
})
})
Expand Down
3 changes: 3 additions & 0 deletions src/common/request/params.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ export function buildParams(parameters?: RequestBody): string {
}

const searchParams = Object.entries(parameters).reduce((params, [key, value]) => {
if (Array.isArray(value)) {
return appendParam(params, `${key}[]`, value)
}
return appendParam(params, key, value)
}, new URLSearchParams())

Expand Down
91 changes: 43 additions & 48 deletions src/subscription/status/get.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,60 +14,55 @@ describe('/subscription/status/get', () => {
const apiKey = 'apiKey'
const data: ServerResponse = { message: 'success' }

it('calls request for multiple users with url and body', async () => {
mockedGet.mockResolvedValueOnce(data)
const body: SubscriptionStatusGetObject = {
subscription_group_id: 'subscription_group_id',
external_id: ['1', '2'],
}
expect(await get(apiUrl, apiKey, body)).toBe(data)
expect(mockedGet).toBeCalledWith(
`${apiUrl}/subscription/status/get?subscription_group_id=subscription_group_id&external_id=1&external_id=2`,
{
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${apiKey}`,
},
const testData: { message: string; body: SubscriptionStatusGetObject; expected: string }[] = [
{
message: 'multiple `external_id`s',
body: { subscription_group_id: 'subscription_group_id', external_id: ['1', '2'] },
expected: `${apiUrl}/subscription/status/get?subscription_group_id=subscription_group_id&external_id%5B%5D=1&external_id%5B%5D=2`,
},
{
message: 'single `external_id`',
body: { subscription_group_id: 'subscription_group_id', external_id: '1' },
expected: `${apiUrl}/subscription/status/get?subscription_group_id=subscription_group_id&external_id=1`,
},
{
message: 'multiple `email`s',
body: {
subscription_group_id: 'subscription_group_id',
email: ['example@braze.com', 'braze@example.com'],
},
)
expect(mockedGet).toBeCalledTimes(1)
})

it('calls request for email with url and body', async () => {
mockedGet.mockResolvedValueOnce(data)
const body: SubscriptionStatusGetObject = {
subscription_group_id: 'subscription_group_id',
email: 'example@braze.com',
}
expect(await get(apiUrl, apiKey, body)).toBe(data)
expect(mockedGet).toBeCalledWith(
`${apiUrl}/subscription/status/get?subscription_group_id=subscription_group_id&email=example%40braze.com`,
{
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${apiKey}`,
},
expected: `${apiUrl}/subscription/status/get?subscription_group_id=subscription_group_id&email%5B%5D=example%40braze.com&email%5B%5D=braze%40example.com`,
},
{
message: 'single `email`',
body: { subscription_group_id: 'subscription_group_id', email: 'example@braze.com' },
expected: `${apiUrl}/subscription/status/get?subscription_group_id=subscription_group_id&email=example%40braze.com`,
},
{
message: 'multiple `phone`s',
body: {
subscription_group_id: 'subscription_group_id',
phone: ['+11112223333', '+12223334444'],
},
)
expect(mockedGet).toBeCalledTimes(1)
})
expected: `${apiUrl}/subscription/status/get?subscription_group_id=subscription_group_id&phone%5B%5D=%2B11112223333&phone%5B%5D=%2B12223334444`,
},
{
message: 'single `phone`',
body: { subscription_group_id: 'subscription_group_id', phone: '+11112223333' },
expected: `${apiUrl}/subscription/status/get?subscription_group_id=subscription_group_id&phone=%2B11112223333`,
},
]

it('calls request for SMS with url and body', async () => {
it.each(testData)('calls request for ($message)', async ({ body, expected }) => {
mockedGet.mockResolvedValueOnce(data)
const body: SubscriptionStatusGetObject = {
subscription_group_id: 'subscription_group_id',
phone: '+11112223333',
}

expect(await get(apiUrl, apiKey, body)).toBe(data)
expect(mockedGet).toBeCalledWith(
`${apiUrl}/subscription/status/get?subscription_group_id=subscription_group_id&phone=%2B11112223333`,
{
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${apiKey}`,
},
expect(mockedGet).toBeCalledWith(expected, {
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${apiKey}`,
},
)
})
expect(mockedGet).toBeCalledTimes(1)
})
})
2 changes: 1 addition & 1 deletion src/subscription/user/status.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ describe('subscription.user.status()', () => {
}
expect(await status(apiUrl, apiKey, body)).toBe(data)
expect(mockedGet).toBeCalledWith(
`${apiUrl}/subscription/user/status?external_id=1&external_id=2`,
`${apiUrl}/subscription/user/status?external_id%5B%5D=1&external_id%5B%5D=2`,
{
headers: {
'Content-Type': 'application/json',
Expand Down

0 comments on commit f66d284

Please sign in to comment.