Files
medusa-store/integration-tests/http/__tests__/upload/admin/presigned-urls.spec.ts

85 lines
2.3 KiB
TypeScript

import { join } from "path"
import { readFile } from "fs/promises"
import { medusaIntegrationTestRunner } from "@medusajs/test-utils"
import {
adminHeaders,
createAdminUser,
} from "../../../../helpers/create-admin-user"
import { AdminUploadPreSignedUrlRequest } from "@medusajs/types"
jest.setTimeout(30000)
const PRODUCTS_FILE_PATH = join(__dirname, "./__fixtures__", "products.csv")
const getUploadReq = (file: File) => {
return {
body: {
mime_type: file.type,
originalname: file.name,
size: file.size,
access: "public",
} satisfies AdminUploadPreSignedUrlRequest,
meta: {
headers: {
...adminHeaders.headers,
},
},
}
}
medusaIntegrationTestRunner({
testSuite: ({ dbConnection, getContainer, api }) => {
beforeEach(async () => {
await createAdminUser(dbConnection, adminHeaders, getContainer())
})
describe("POST /admin/uploads/presigned-urls", () => {
it("should generate a signed URL to upload a file", async () => {
const file = new File(
[await readFile(PRODUCTS_FILE_PATH)],
"products.csv",
{
type: "text/csv",
}
)
const { body, meta } = getUploadReq(file)
const response = await api.post(
"/admin/uploads/presigned-urls",
body,
meta
)
expect(response.data).toEqual(
expect.objectContaining({
filename: expect.stringContaining(".csv"),
extension: "csv",
mime_type: "text/csv",
size: file.size,
url: "/admin/uploads",
})
)
expect(response.status).toEqual(200)
})
it("should return error when mime type is invalid", async () => {
const file = new File(
[await readFile(PRODUCTS_FILE_PATH)],
"products.csv"
)
const { body, meta } = getUploadReq(file)
try {
await api.post("/admin/uploads/presigned-urls", body, meta)
} catch (error) {
expect(error.response.data).toEqual({
code: "invalid_data",
type: "invalid_data",
message: 'Invalid file type ""',
})
expect(error.response.status).toEqual(400)
}
})
})
},
})