deno.land / x / opine@2.3.4 / test / units / res.format.test.ts
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288import { opine, Router } from "../../mod.ts";import { expect, superdeno } from "../deps.ts";import { after, describe, it } from "../utils.ts";import type { NextFunction, Opine, OpineRequest, OpineResponse,} from "../../src/types.ts";
const app1 = opine();
app1.use(function (req, res, next) { res.format({ "text/plain": function () { res.send("hey"); },
"text/html": function () { res.send("<p>hey</p>"); },
"application/json": function (a: any, b: any, c: any) { expect(req).toEqual(a); expect(res).toEqual(b); expect(next).toEqual(c); res.send({ message: "hey" }); }, });});
app1.use( function ( err: any, req: OpineRequest, res: OpineResponse, next: NextFunction, ) { if (!err.types) { throw err; }
res.setStatus(err.status).send("Supports: " + err.types.join(", ")); },);
const app2 = opine();
app2.use(function (req, res, next) { res.format({ text: function () { res.send("hey"); }, html: function () { res.send("<p>hey</p>"); }, json: function () { res.send({ message: "hey" }); }, });});
app2.use( function ( err: any, req: OpineRequest, res: OpineResponse, next: NextFunction, ) { res.setStatus(err.status).send("Supports: " + err.types.join(", ")); },);
const app3 = opine();
app3.use(function (req, res, next) { res.format({ text: function () { res.send("hey"); }, default: function () { res.send("default"); }, });});
const app4 = opine();
app4.get("/", function (req, res, next) { res.format({ text: function () { res.send("hey"); }, html: function () { res.send("<p>hey</p>"); }, json: function () { res.send({ message: "hey" }); }, });});
app4.use( function ( err: any, req: OpineRequest, res: OpineResponse, next: NextFunction, ) { res.setStatus(err.status).send("Supports: " + err.types.join(", ")); },);
const app5 = opine();
app5.use(function (req, res, next) { res.format({ default: function () { res.send("hey"); }, });});
describe("res", function () { describe(".format(obj)", function () { describe("with canonicalized mime types", function () { test(app1); });
describe("with extnames", function () { test(app2); });
describe("with parameters", function () { const app = opine();
app.use(function (req, res, next) { res.format({ "text/plain; charset=utf-8": function () { res.send("hey"); }, "text/html; foo=bar; bar=baz": function () { res.send("<p>hey</p>"); }, "application/json; q=0.5": function () { res.send({ message: "hey" }); }, }); });
app.use( function ( err: any, req: OpineRequest, res: OpineResponse, next: NextFunction, ) { res.setStatus(err.status).send("Supports: " + err.types.join(", ")); }, );
test(app); });
describe("given .default", function () { it("should be invoked instead of auto-responding", function (done) { superdeno(app3) .get("/") .set("Accept", "text/html") .expect("default", done); });
it("should work when only .default is provided", function (done) { superdeno(app5) .get("/") .set("Accept", "*/*") .expect("hey", done); }); });
describe("in router", function () { test(app4); });
describe("in router", function () { const app = opine(); const router = Router();
router.get("/", function (req, res, next) { res.format({ text: function () { res.send("hey"); }, html: function () { res.send("<p>hey</p>"); }, json: function () { res.send({ message: "hey" }); }, }); });
router.use( function ( err: any, req: OpineRequest, res: OpineResponse, next: NextFunction, ) { res.setStatus(err.status).send("Supports: " + err.types.join(", ")); }, );
app.use(router);
test(app); }); });});
function test(app: Opine) { it("should utilize q values in negotiation", function (done) { superdeno(app) .get("/") .set("Accept", "text/html; q=.5, application/json, */*; q=.1") .expect({ "message": "hey" }, done); });
it("should allow wildcard type/subtypes", function (done) { superdeno(app) .get("/") .set("Accept", "text/html; q=.5, application/*, */*; q=.1") .expect({ "message": "hey" }, done); });
it("should default the Content-Type", function (done) { superdeno(app) .get("/") .set("Accept", "text/html; q=.5, text/plain") .expect("Content-Type", "text/plain; charset=utf-8") .expect("hey", done); });
it("should set the correct charset for the Content-Type", function (done) { const cb = after(3, done);
superdeno(app) .get("/") .set("Accept", "text/html") .expect("Content-Type", "text/html; charset=utf-8", cb);
superdeno(app) .get("/") .set("Accept", "text/plain") .expect("Content-Type", "text/plain; charset=utf-8", cb);
superdeno(app) .get("/") .set("Accept", "application/json") .expect("Content-Type", "application/json; charset=utf-8", cb); });
it("should vary: Accept", function (done) { superdeno(app) .get("/") .set("Accept", "text/html; q=.5, text/plain") .expect("vary", /Accept/, done); });
describe("when Accept is not present", function () { it("should invoke the first callback", function (done) { superdeno(app) .get("/") .expect("hey", done); }); });
describe("when no match is made", function () { it("should should respond with 406 not acceptable", function (done) { superdeno(app) .get("/") .set("Accept", "foo/bar") .expect("Supports: text/plain, text/html, application/json") .expect(406, done); }); });}
Version Info