UNPKG

@quyse/client-zip

Version:

A tiny and fast client-side streaming ZIP generator

66 lines (52 loc) 3.16 kB
import { assertEquals, assertThrows } from "https://deno.land/std@0.132.0/testing/asserts.ts" import { normalizeMetadata } from "../src/metadata.ts" const encodedName = new TextEncoder().encode("test.txt") const encodedFolderName = new TextEncoder().encode("root/folder/") /************************************** Responses **************************************/ Deno.test("normalizeMetadata needs a filename along Responses with insufficient metadata", () => { assertThrows(() => normalizeMetadata(new Response("four", { headers: { "content-disposition": "attachment" } })), Error, "The file must have a name.") }) Deno.test("normalizeMetadata guesses filename from Content-Disposition", () => { const metadata = normalizeMetadata(new Response("four", { headers: { "content-disposition": "attachment; filename=test.txt; size=0" } })) assertEquals(metadata, { uncompressedSize: 0n, encodedName, nameIsBuffer: false }) }) Deno.test("normalizeMetadata guesses filename from non latin Content-Disposition", () => { const metadata = normalizeMetadata(new Response("four", { headers: { "content-disposition": "attachment; filename* = UTF-8''%CF%8C%CE%BD%CE%BF%CE%BC%CE%B1%20%CE%B1%CF%81%CF%87%CE%B5%CE%AF%CE%BF%CF%85.txt" } })) assertEquals(metadata, { uncompressedSize: 0n,encodedName: new TextEncoder().encode("όνομα αρχείου.txt"), nameIsBuffer: false }) }) Deno.test("normalizeMetadata guesses filename from a Response URL", () => { const response = Object.create(Response.prototype, { url: { get() { return "https://example.com/path/test.txt" } }, headers: { get() { return new Headers() } } }) const metadata = normalizeMetadata(response) assertEquals(metadata, { uncompressedSize: 0n, encodedName, nameIsBuffer: false }) }) Deno.test("normalizeMetadata guesses filename from a Response URL with trailing slash", () => { const response = Object.create(Response.prototype, { url: { get() { return "https://example.com/path/test.txt/" } }, headers: { get() { return new Headers() } } }) const metadata = normalizeMetadata(response) assertEquals(metadata, { uncompressedSize: 0n, encodedName, nameIsBuffer: false }) }) /************************************** Files **************************************/ Deno.test("normalizeMetadata reads filename and size from a File", () => { const metadata = normalizeMetadata(new File(["four"], "test.txt")) assertEquals(metadata, { uncompressedSize: 4n, encodedName, nameIsBuffer: false }) }) /************************************** Folders **************************************/ Deno.test("normalizeMetadata fixes trailing slashes in folder names", () => { const metadata = normalizeMetadata(undefined, new TextEncoder().encode("root/folder")) assertEquals(metadata, { uncompressedSize: 0n, encodedName: encodedFolderName, nameIsBuffer: true }) }) Deno.test("normalizeMetadata fixes trailing slashes in file names", () => { const metadata = normalizeMetadata(undefined, encodedFolderName, 0n) assertEquals(metadata, { uncompressedSize: 0n, encodedName: new TextEncoder().encode("root/folder"), nameIsBuffer: true }) })