Skip to content

Commit

Permalink
fix(user-subscriptions): pass brackets for array syntax
Browse files Browse the repository at this point in the history
  • Loading branch information
wweaver committed Aug 2, 2023
1 parent bebb9e1 commit 34c64b0
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 49 deletions.
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'

Check failure

Code scanning / CodeQL

Hard-coded credentials Critical

The hard-coded value "apiKey" is used as
authorization header
.
The hard-coded value "apiKey" is used as
authorization header
.
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)
})
})
12 changes: 11 additions & 1 deletion src/subscription/status/get.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,18 @@ import type { SubscriptionStatusGetObject } from './types'
* @returns - Braze response.
*/
export function get(apiUrl: string, apiKey: string, body: SubscriptionStatusGetObject) {
const newBody = Object.entries(body).reduce((agg, [key, value]) => {
switch (key) {
case 'email':
case 'external_id':
case 'phone':
return { ...agg, [Array.isArray(value) ? key + '[]' : key]: value }
default:
return { ...agg, [key]: value }
}
}, {})
return _get(
`${apiUrl}/subscription/status/get?${buildParams(body)}`,
`${apiUrl}/subscription/status/get?${buildParams(newBody)}`,
buildOptions({ apiKey }),
) as Promise<{
status: Record<string, 'Subscribed' | 'Unsubscribed' | 'Unknown'>
Expand Down

0 comments on commit 34c64b0

Please sign in to comment.