payload-plugin-cloud-storage
Version:
Remote storage plugin for Payload CMS.
102 lines (83 loc) • 2.23 kB
text/typescript
import uploadHook from './uploadHook'
import type { AdapterInterface, UploadedFile } from '../adapter.d'
import { mock as mockInterface } from 'jest-mock-extended'
describe('uploadHook', () => {
let adapter: AdapterInterface<unknown, unknown>
beforeEach(() => {
adapter = mockInterface<AdapterInterface<unknown, unknown>>()
})
const testFile = mockInterface<UploadedFile>({
name: 'test.image',
mimetype: 'image'
})
it('can make a hook that calls adapters upload method', () => {
const initializedHook = uploadHook(adapter)
const req = {
files: {
file: testFile
}
}
initializedHook({
// @ts-expect-error no req mocking
req
})
expect(adapter.upload).toBeCalledWith(testFile)
expect(adapter.upload).toBeCalledTimes(1)
})
it('can fetch first file from array of files', () => {
const initializedHook = uploadHook(adapter)
const testFile2 = mockInterface<UploadedFile>({
name: 'test.image'
})
const req = {
files: {
file: [
testFile2,
testFile
]
}
}
initializedHook({
// @ts-expect-error no req mocking
req
})
expect(adapter.upload).toBeCalledWith(testFile2)
expect(adapter.upload).toBeCalledTimes(1)
})
it('can process req.payloadUploadSizes', () => {
const initializedHook = uploadHook(adapter)
const req = {
files: {
file: testFile
},
payloadUploadSizes: {
mobile: 'fake buffer'
}
}
const data = {
sizes: {
mobile: {
filename: 'resize.image',
mimeType: 'image'
}
}
}
// @ts-expect-error no req mocking
initializedHook({ data, req })
expect(adapter.upload).toBeCalledWith(testFile)
expect(adapter.upload).toBeCalledWith({
name: 'resize.image',
mimetype: 'image',
data: 'fake buffer'
})
expect(adapter.upload).toBeCalledTimes(2)
})
it('does nothing if no uploaded file', () => {
const initializedHook = uploadHook(adapter)
const req = {
}
// @ts-expect-error no req mocking
initializedHook({ req })
expect(adapter.upload).not.toBeCalled()
})
})