onfido-sdk-ui
Version:
JavaScript SDK view layer for Onfido identity verification
115 lines (96 loc) • 3.24 kB
text/typescript
import { jwtToken } from '~jest/responses'
import { uploadBinaryMedia } from '~utils/onfidoApi'
import { hmac256 } from '~utils/blob'
import { performHttpReq } from '~utils/http'
jest.mock('~utils/blob')
jest.mock('~utils/http')
const url = 'https://test.url.com'
const documentCapture = {
file: new Blob(),
filename: 'applicant_selfie.jpg',
sdkMetadata: {},
}
const mockedHmac256 = hmac256 as jest.MockedFunction<typeof hmac256>
const mockedPerformHttpReq = performHttpReq as jest.MockedFunction<
typeof performHttpReq
>
describe('onfidoApi', () => {
describe('uploadBinaryMedia', () => {
afterEach(() => {
jest.clearAllMocks()
})
describe('with valid data', () => {
beforeEach(() => {
mockedPerformHttpReq.mockImplementation((_params, onSuccess) =>
onSuccess({ media_id: 'fake-media-id' })
)
})
it('sends correct request', async () => {
const response = await uploadBinaryMedia(documentCapture, url, jwtToken)
expect(response).toEqual({ media_id: 'fake-media-id' })
expect(mockedHmac256).not.toHaveBeenCalled()
const [params] = mockedPerformHttpReq.mock.calls[0]
expect(params).toMatchObject({
endpoint: `${url}/v4/binary_media`,
token: `Bearer ${jwtToken}`,
})
})
describe('with HMAC included', () => {
beforeEach(() => {
Blob.prototype.arrayBuffer = jest
.fn()
.mockResolvedValue(new ArrayBuffer(0))
mockedHmac256.mockResolvedValue('fake-hmac')
})
it('sends correct request', async () => {
const response = await uploadBinaryMedia(
documentCapture,
url,
jwtToken,
true
)
expect(response).toEqual({ media_id: 'fake-media-id' })
// hmac256() to be called with jwtToken's uuid
expect(mockedHmac256.mock.calls[0][0]).toEqual('oghRY_bk774')
const [params] = mockedPerformHttpReq.mock.calls[0]
expect(params).toMatchObject({
endpoint: `${url}/v4/binary_media`,
headers: { 'X-Video-Auth': 'fake-hmac' },
token: `Bearer ${jwtToken}`,
})
})
})
})
describe('with request error', () => {
beforeEach(() => {
mockedPerformHttpReq.mockImplementation(
(_params, _onSuccess, onError) =>
onError({
status: 401,
response: JSON.stringify({ error: 'unauthorized' }),
})
)
})
it('should call onError callback', async () => {
await expect(
uploadBinaryMedia(documentCapture, url, jwtToken)
).rejects.toMatchObject({
status: 401,
response: { error: 'unauthorized' },
})
})
})
describe('with invalid data', () => {
it('should call onError callback with TypeError', async () => {
const promise = uploadBinaryMedia(
{ ...documentCapture, file: {} as Blob },
url,
jwtToken
)
await expect(promise).rejects.toMatchObject(
/TypeError: file.arrayBuffer is not a function/
)
})
})
})
})