diff options
author | Alan Pearce | 2023-09-15 19:35:23 +0200 |
---|---|---|
committer | Alan Pearce | 2023-09-15 19:35:23 +0200 |
commit | 6474b1db0a4f8bdf3c83acd329cf822a9f45f563 (patch) | |
tree | 598a1e3bdc25c4d6f75773925d83a46bbbe19859 /test | |
parent | c936c99fad7e090a3caaaa6bdd5fbaf38d39abba (diff) | |
parent | e718339d93e2f60b6df55330aafb2d9536820ce4 (diff) | |
download | website-6474b1db0a4f8bdf3c83acd329cf822a9f45f563.tar.lz website-6474b1db0a4f8bdf3c83acd329cf822a9f45f563.tar.zst website-6474b1db0a4f8bdf3c83acd329cf822a9f45f563.zip |
Merge homestead repository
Diffstat (limited to 'test')
-rw-r--r-- | test/index.test.ts | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/test/index.test.ts b/test/index.test.ts new file mode 100644 index 0000000..2f682a9 --- /dev/null +++ b/test/index.test.ts @@ -0,0 +1,97 @@ +import { type Server } from "bun"; +import { expect, test, beforeAll, afterAll } from "bun:test"; + +import app from "../src/index"; + +const port = 33000; +const base = `http://localhost:${port}/`; +let server: Server; + +beforeAll(async function () { + server = Bun.serve(Object.assign({}, app, { port })); +}); + +afterAll(function () { + server.stop(); +}); + +test("/ returns 200", async function () { + const res = await fetch(base); + expect(res.status).toBe(200); +}); + +test("/asdf returns 404", async function () { + const res = await fetch(`${base}asdf`); + expect(res.status).toBe(404); +}); + +test("/ returns 304 with newer if-modified-since header", async function () { + const res = await fetch(base, { + headers: { + "if-modified-since": new Date().toUTCString(), + }, + }); + expect(res.status).toBe(304); + expect(res.headers.get("vary")).toBe("Accept-Encoding"); +}); + +test("/ returns 200 with older if-modified-since header", async function () { + const res = await fetch(base, { + headers: { + "if-modified-since": new Date(0).toUTCString(), + }, + }); + expect(res.status).toBe(200); +}); + +test("/ returns gzipped content with accept-encoding: gzip", async function () { + const res = await fetch(base, { + headers: { + "accept-encoding": "gzip", + }, + }); + expect(res.status).toBe(200); + // Bun 0.8.1 this doesn't work, but `verbose` shows it's there + // expect(res.headers.get("content-encoding")).toBe("gzip"); + // response is automatically gunzipped + const body = await res.text(); + expect(body.length).toBeGreaterThan( + Number(res.headers.get("content-length")), + ); +}); + +test("/ returns uncompressed content with accept-encoding: identity", async function () { + const res = await fetch(base, { + headers: { + "accept-encoding": "identity", + }, + }); + expect(res.status).toBe(200); + const body = await res.text(); + expect(body.length).toBe(Number(res.headers.get("content-length"))); +}); + +test("/ returns brotli-compressed content with accept-encoding: br", async function () { + const res = await fetch(base, { + headers: { + "accept-encoding": "br", + }, + }); + expect(res.status).toBe(200); + expect(res.headers.get("content-encoding")).toBe("br"); + const body = await res.text(); + expect(body.length).toBeLessThan(Number(res.headers.get("content-length"))); +}); + +test("/ returns zstd-compressed content with accept-encoding: zstd", async function () { + const res = await fetch(base, { + headers: { + "accept-encoding": "zstd", + }, + }); + expect(res.status).toBe(200); + expect(res.headers.get("content-encoding")).toBe("zstd"); + expect(res.headers.get("vary")).toBe("Accept-Encoding"); + const body = await res.text(); + expect(body.length).toBeLessThan(Number(res.headers.get("content-length"))); +}); |