UNPKG

@nzz/q-server

Version:

**Maintainer**: [Franco Gervasi](https://github.com/fgervasi)

344 lines (314 loc) 9.55 kB
const Lab = require("@hapi/lab"); const Code = require("@hapi/code"); const lab = (exports.lab = Lab.script()); const clone = require("clone"); const expect = Code.expect; const before = lab.before; const after = lab.after; const it = lab.it; const items = require("./mock/items.js"); const plugins = require("./plugins.js"); let server = require("./server.js").getServer(); before(async () => { try { await server.register(plugins); await server.start(); } catch (err) { expect(err).to.not.exist(); } }); after(async () => { await server.stop({ timeout: 2000 }); server = null; }); lab.experiment("meta-properties", () => { const deleteMetaProperties = require("../helper/meta-properties") .deleteMetaProperties; it("strips meta properties", () => { let slimItem = deleteMetaProperties(clone(items[0])); expect(slimItem.editedBy).to.be.undefined(); expect(slimItem.createdBy).to.be.undefined(); expect(slimItem.department).to.be.undefined(); }); it("should only delete all meta properties", function() { let slimItem = deleteMetaProperties(clone(items[0])); expect(slimItem.data).to.not.be.undefined(); }); }); lab.experiment("server.method: getCacheControlDirectivesFromConfig", () => { it("returns Cache-Control: public if no config given", async () => { const configCacheControl = await server.methods.getCacheControlDirectivesFromConfig(); expect(configCacheControl[0]).to.be.equal("no-cache"); }); it("returns correct cache control header if maxAge given", async () => { const configCacheControl = await server.methods.getCacheControlDirectivesFromConfig( { public: true, maxAge: 1 } ); expect(configCacheControl[0]).to.be.equal("public"); expect(configCacheControl[1]).to.be.equal("max-age=1"); }); it("returns correct cache control header if sMaxAge given", async () => { const configCacheControl = await server.methods.getCacheControlDirectivesFromConfig( { sMaxAge: 1 } ); expect(configCacheControl[0]).to.be.equal("s-maxage=1"); }); it("returns correct cache control header if staleWhileRevalidate given", async () => { const configCacheControl = await server.methods.getCacheControlDirectivesFromConfig( { public: true, staleWhileRevalidate: 1 } ); expect(configCacheControl[0]).to.be.equal("public"); expect(configCacheControl[1]).to.be.equal("stale-while-revalidate=1"); }); it("returns correct cache control header if staleIfError given", async () => { const configCacheControl = await server.methods.getCacheControlDirectivesFromConfig( { public: true, staleIfError: 1 } ); expect(configCacheControl[0]).to.be.equal("public"); expect(configCacheControl[1]).to.be.equal("stale-if-error=1"); }); it("computes correct cache control headers if all config given", async () => { const configCacheControl = await server.methods.getCacheControlDirectivesFromConfig( require("./config/base.js").get("/cache/cacheControl") ); expect(configCacheControl[0]).to.be.equal("public"); expect(configCacheControl[1]).to.be.equal("max-age=1"); expect(configCacheControl[2]).to.be.equal("s-maxage=1"); expect(configCacheControl[3]).to.be.equal("stale-while-revalidate=1"); expect(configCacheControl[4]).to.be.equal("stale-if-error=1"); }); }); lab.experiment("rendering-info toolRuntimeConfig", () => { it("constructs correct default toolBaseUrl if no path given", async () => { const getCompiledToolRuntimeConfig = require("../plugins/core/rendering-info/helpers.js") .getCompiledToolRuntimeConfig; const toolRuntimeConfig = getCompiledToolRuntimeConfig(clone(items[0]), { serverWideToolRuntimeConfig: { toolBaseUrl: { protocol: "https", host: "q-server-host" } } }); expect(toolRuntimeConfig.toolBaseUrl).to.be.equal( "https://q-server-host/tools/tool1" ); }); it("constructs correct toolBaseUrl if path given", async () => { const getCompiledToolRuntimeConfig = require("../plugins/core/rendering-info/helpers.js") .getCompiledToolRuntimeConfig; const toolRuntimeConfig = getCompiledToolRuntimeConfig(clone(items[0]), { serverWideToolRuntimeConfig: { toolBaseUrl: { protocol: "https", host: "q-server-host", path: "/some-other/path" } } }); expect(toolRuntimeConfig.toolBaseUrl).to.be.equal( "https://q-server-host/some-other/path" ); }); it("applies toolEndpointConfig if given", async () => { const getCompiledToolRuntimeConfig = require("../plugins/core/rendering-info/helpers.js") .getCompiledToolRuntimeConfig; const toolRuntimeConfig = getCompiledToolRuntimeConfig(clone(items[0]), { serverWideToolRuntimeConfig: { foo: "server" }, toolEndpointConfig: { toolRuntimeConfig: { foo: "toolendpoint" } } }); expect(toolRuntimeConfig.foo).to.be.equal("toolendpoint"); }); it( "applies toolEndpointConfig and requestToolRuntimeConfig if given", { plan: 2 }, async () => { const getCompiledToolRuntimeConfig = require("../plugins/core/rendering-info/helpers.js") .getCompiledToolRuntimeConfig; const toolRuntimeConfig = getCompiledToolRuntimeConfig(clone(items[0]), { serverWideToolRuntimeConfig: { foo: "server" }, toolEndpointConfig: { toolRuntimeConfig: { foo: "toolendpoint", bar: "toolendpoint" } }, requestToolRuntimeConfig: { bar: "request" } }); expect(toolRuntimeConfig.foo).to.be.equal("toolendpoint"); expect(toolRuntimeConfig.bar).to.be.equal("request"); } ); it("validates a stringified object", async () => { const Joi = require("../helper/custom-joi.js"); const schema = Joi.object({ foo: Joi.string() }); expect(schema.validate('{"foo": "bar"}')).to.equal({ value: { foo: "bar" } }); }); it("validates a stringified array", async () => { const Joi = require("../helper/custom-joi.js"); const schema = Joi.array().items(Joi.string()); expect(schema.validate('["foo", "bar"]')).to.equal({ value: ["foo", "bar"] }); }); it("fails to validate invalid size object", { plan: 10 }, async () => { const validateSize = require("../plugins/core/rendering-info/size-helpers.js") .validateSize; try { validateSize({ width: [ { value: 500, comparison: ">" }, { value: 400, comparison: "<" } ] }); } catch (err) { expect(err).to.be.an.instanceof(Error); expect(err.message).to.be.equal( "The combination of values and comparison signs does not result in a meaningful range." ); } try { validateSize({ width: [ { value: 100, comparison: "=" }, { value: 200, comparison: "<" } ] }); } catch (err) { expect(err).to.be.an.instanceof(Error); expect(err.message).to.be.equal( "The combination of values and comparison signs does not result in a meaningful range." ); } try { validateSize({ width: [ { value: 100, comparison: ">" }, { value: 200, comparison: "=" } ] }); } catch (err) { expect(err).to.be.an.instanceof(Error); expect(err.message).to.be.equal( "The combination of values and comparison signs does not result in a meaningful range." ); } try { validateSize({ width: [ { value: 200, comparison: ">", unit: "px" }, { value: 300, comparison: "<", unit: "cm" } ] }); } catch (err) { expect(err).to.be.an.instanceof(Error); expect(err.message).to.be.equal( "Units are not the same for the given range." ); } try { validateSize({ width: [ { value: 200, comparison: ">" }, { value: 300, comparison: ">" } ] }); } catch (err) { expect(err).to.be.an.instanceof(Error); expect(err.message).to.be.equal( "The combination of values and comparison signs does not result in a meaningful range." ); } }); it("validates valid size object", { plan: 2 }, async () => { const validateSize = require("../plugins/core/rendering-info/size-helpers.js") .validateSize; let error; try { validateSize({ width: [ { value: 500, comparison: ">" }, { value: 800, comparison: "<" } ] }); } catch (err) { error = err; } expect(error).to.be.undefined(); error = undefined; try { validateSize({ width: [ { value: 200, comparison: "=" } ] }); } catch (err) { error = err; } expect(error).to.be.undefined(); }); });