Files
medusa-store/packages/modules/file/integration-tests/__tests__/module.spec.ts
Stevche Radevski c4a0b63778 feat: Add support for uploading a file directly to the file provider from the client (#12224)
* feat: Add support for uploading a file directly to the file provider from the client

* fix: Add missing types and add a couple of module tests

* fix: Allow nested routes, add test for it
2025-04-18 10:22:00 +02:00

94 lines
2.5 KiB
TypeScript

import { IFileModuleService } from "@medusajs/framework/types"
import { Module, Modules } from "@medusajs/framework/utils"
import { moduleIntegrationTestRunner } from "@medusajs/test-utils"
import { FileModuleService } from "@services"
import { resolve } from "path"
jest.setTimeout(100000)
const moduleOptions = {
providers: [
{
resolve: resolve(
process.cwd() +
"/integration-tests/__fixtures__/providers/default-provider"
),
id: "default-provider",
},
],
}
moduleIntegrationTestRunner<IFileModuleService>({
moduleName: Modules.FILE,
moduleOptions: moduleOptions,
testSuite: ({ service }) => {
describe("File Module Service", () => {
it(`should export the appropriate linkable configuration`, () => {
const linkable = Module(Modules.FILE, {
service: FileModuleService,
}).linkable
expect(Object.keys(linkable)).toEqual(["file"])
Object.keys(linkable).forEach((key) => {
delete linkable[key].toJSON
})
expect(linkable).toEqual({
file: {
id: {
entity: "File",
field: "file",
linkable: "file_id",
primaryKey: "id",
serviceName: "file",
},
},
})
})
it("creates and gets a file", async () => {
const res = await service.createFiles({
filename: "test.jpg",
mimeType: "image/jpeg",
content: Buffer.from("test"),
})
expect(res).toEqual({
id: "test.jpg",
url: "test.jpg",
})
// The fake provider returns the file content as the url
const downloadUrl = await service.retrieveFile("test.jpg")
expect(await new Response(downloadUrl.url).text()).toEqual("test")
})
it("generates a presigned upload URL", async () => {
const res = await service.getUploadFileUrls({
filename: "test.jpg",
mimeType: "image/jpeg",
})
expect(res).toEqual({
url: "presigned-url/test.jpg",
key: "test.jpg",
})
})
it("fails to get a presigned upload URL if a filename isn't provided", async () => {
const err = await service
.getUploadFileUrls({
filename: "",
mimeType: "image/jpeg",
})
.catch((err) => err)
expect(err.message).toEqual(
"File name is required to get a presigned upload URL"
)
})
})
},
})