| 1 | import { assert, describe, it } from "@effect/vitest" |
| 2 | import * as Mime from "effect/http/Mime" |
| 3 | import * as Option from "effect/Option" |
| 4 | |
| 5 | describe("Mime", () => { |
| 6 | it("looks up common static file types", () => { |
| 7 | assert.deepStrictEqual(Mime.getType("index.html"), Option.some("text/html")) |
| 8 | assert.deepStrictEqual(Mime.getType("styles.css"), Option.some("text/css")) |
| 9 | assert.deepStrictEqual(Mime.getType("app.js"), Option.some("text/javascript")) |
| 10 | assert.deepStrictEqual(Mime.getType("image.png"), Option.some("image/png")) |
| 11 | assert.deepStrictEqual(Mime.getType("document.pdf"), Option.some("application/pdf")) |
| 12 | assert.deepStrictEqual(Mime.getType("font.woff2"), Option.some("font/woff2")) |
| 13 | }) |
| 14 | |
| 15 | it("looks up standard MIME types", () => { |
| 16 | assert.deepStrictEqual(Mime.getType("feed.atom"), Option.some("application/atom+xml")) |
| 17 | assert.deepStrictEqual(Mime.getType("archive.jar"), Option.some("application/java-archive")) |
| 18 | assert.deepStrictEqual(Mime.getType("calendar.ics"), Option.some("text/calendar")) |
| 19 | assert.deepStrictEqual(Mime.getType("model.glb"), Option.some("model/gltf-binary")) |
| 20 | }) |
| 21 | |
| 22 | it("returns none for unknown and missing extensions", () => { |
| 23 | assert.deepStrictEqual(Mime.getType("file.unknown"), Option.none()) |
| 24 | assert.deepStrictEqual(Mime.getType("/directory/file"), Option.none()) |
| 25 | }) |
| 26 | |
| 27 | it("handles extensions case-insensitively", () => { |
| 28 | assert.deepStrictEqual(Mime.getType("/directory/INDEX.HTML"), Option.some("text/html")) |
| 29 | assert.deepStrictEqual(Mime.getType("PHOTO.JpEg"), Option.some("image/jpeg")) |
| 30 | }) |
| 31 | |
| 32 | it("exposes reverse lookups at the module level", () => { |
| 33 | assert.deepStrictEqual(Mime.getExtension("text/html; charset=utf-8"), Option.some("html")) |
| 34 | assert.deepStrictEqual(Mime.getAllExtensions("text/html"), Option.some(new Set(["html", "htm", "shtml"]))) |
| 35 | assert.deepStrictEqual( |
| 36 | Mime.getAllExtensions("text/html; charset=utf-8"), |
| 37 | Option.some(new Set(["html", "htm", "shtml"])) |
| 38 | ) |
| 39 | }) |
| 40 | }) |