UNPKG

rest-methods

Version:

Declaratively publish functions for remote invocation.

164 lines (130 loc) 4.24 kB
import { expect } from "chai"; import Server from "../../src/server/server"; import manifest from "../../src/server/manifest"; import { getMethods } from "../../src/server/manifest"; describe("Server:manifest", () => { describe("getMethods(server)", () => { let server; beforeEach(() => { server = Server(); }); it("returns an empty object (no methods registered)", () => { expect(getMethods(server)).to.eql({}); }); it("does not add method definitions that are empty", () => { server.methods({ "foo": {} }); expect(getMethods(server)).to.eql({}); }); it("retrieves a single method with a GET verb", () => { server.methods({ "foo": { get: (id) => {} } // NB: The parameter is stripped off and ignored. }); expect(getMethods(server)).to.eql({ "foo": { name: "foo", url: "/foo", get: {} } }); }); it("retrieves a single method with a GET verb with a URL parameter", () => { server.methods({ "foo": { url: "foo/:id", get: (id, ignored) => {} } }); expect(getMethods(server)).to.eql({ "foo": { name: "foo", url: "/foo/:id", get: { params: [{ name:"id" }] } } }); }); it("retrieves a single method with a PUT verb that has parameters", () => { server.methods({ "foo": { put: (text, number) => {} } }); expect(getMethods(server)).to.eql({ "foo": { name: "foo", url: "/foo", put: { params: [{ name:"text" }, { name:"number" }] } } }); }); it("retrieves a single method with a GET verb", () => { server.methods({ "foo": { get: () => {} } }); expect(getMethods(server)).to.eql({ "foo": { name: "foo", url: "/foo", get: {} } }); }); it("stores the full code-path in the method name", () => { server.methods({ "foo/bar/user": { get: () => {} } }); expect(getMethods(server)["foo/bar/user"].name).to.equal("foo.bar.user"); }); it("retrieves methods for each HTTP verb from a single method registration", () => { server.methods({ "foo": (text) => {} }); let methods = getMethods(server); expect(methods.foo.url).to.equal("/foo"); expect(methods.foo.get).to.eql({}); // No params. expect(methods.foo.put).to.eql({ params:[{ name: "text" }] }); expect(methods.foo.post).to.eql({ params:[{ name: "text" }] }); expect(methods.foo.delete).to.eql({}); // No params. }); it("prefixes the base-url to the methods route", () => { server = Server({ basePath:"//v1///" }) server.methods({ "foo": (text) => {} }); expect(getMethods(server).foo.url).to.equal("/v1/foo"); }); it("has a custom url", () => { server.methods({ "foo": { url: "/thing/:id", get:(id) => {} } }); expect(getMethods(server).foo.url).to.equal("/thing/:id"); }); }); describe("manifest (default)", () => { it("has the service name", () => { let server = Server(); expect(manifest(server).name).to.eql(server.name); server = Server({ name:"Foo" }); expect(manifest(server).name).to.eql("Foo"); }); it("has default version", () => { let server = Server(); expect(manifest(server).version).to.eql("0.0.0"); }); it("has specified version", () => { let server = Server({ version: "1.2.3" }); expect(manifest(server).version).to.eql("1.2.3"); }); it("has basePath", () => { let server = Server({ basePath: "//api///" }); expect(manifest(server).basePath).to.eql("/api"); }); it("has no methods", () => { let server = Server(); expect(manifest(server).methods).to.eql({}); }); it("has methods", () => { let server = Server(); server.methods({ "foo": (text) => {} }); expect(manifest(server).methods).not.to.equal(undefined); expect(manifest(server).methods).to.eql(getMethods(server)); }); }); });