unpkg/server/__tests__/server-test.js

218 lines
5.9 KiB
JavaScript
Raw Normal View History

2018-02-18 02:00:56 +00:00
const request = require("supertest");
const createServer = require("../createServer");
const clearBlacklist = require("./utils/clearBlacklist");
const withBlacklist = require("./utils/withBlacklist");
const withRevokedToken = require("./utils/withRevokedToken");
const withToken = require("./utils/withToken");
2017-11-25 21:25:01 +00:00
describe("The server", () => {
2018-02-18 02:00:56 +00:00
let server;
2017-11-11 20:18:13 +00:00
beforeEach(() => {
2018-02-18 02:00:56 +00:00
server = createServer();
});
2017-11-11 20:18:13 +00:00
2017-11-25 21:25:01 +00:00
it("rejects invalid package names", done => {
2017-11-11 20:18:13 +00:00
request(server)
2017-11-25 21:25:01 +00:00
.get("/_invalid/index.js")
2017-11-11 20:18:13 +00:00
.end((err, res) => {
2018-02-18 02:00:56 +00:00
expect(res.statusCode).toBe(403);
done();
});
});
2017-11-11 20:18:13 +00:00
2017-11-25 21:25:01 +00:00
it("redirects invalid query params", done => {
2017-11-11 20:18:13 +00:00
request(server)
2017-11-25 21:25:01 +00:00
.get("/react?main=index&invalid")
2017-11-11 20:18:13 +00:00
.end((err, res) => {
2018-02-18 02:00:56 +00:00
expect(res.statusCode).toBe(302);
expect(res.headers.location).toBe("/react?main=index");
done();
});
});
2017-11-11 20:18:13 +00:00
2017-11-25 21:25:01 +00:00
it("redirects /_meta to ?meta", done => {
2017-11-11 20:18:13 +00:00
request(server)
2017-11-25 21:25:01 +00:00
.get("/_meta/react?main=index")
2017-11-11 20:18:13 +00:00
.end((err, res) => {
2018-02-18 02:00:56 +00:00
expect(res.statusCode).toBe(302);
expect(res.headers.location).toBe("/react?main=index&meta");
done();
});
});
2017-11-11 20:18:13 +00:00
2017-11-25 21:25:01 +00:00
it("does not serve blacklisted packages", done => {
withBlacklist(["bad-package"], () => {
2017-11-11 20:18:13 +00:00
request(server)
2017-11-25 21:25:01 +00:00
.get("/bad-package/index.js")
2017-11-11 20:18:13 +00:00
.end((err, res) => {
2018-02-18 02:00:56 +00:00
expect(res.statusCode).toBe(403);
done();
});
});
});
2017-11-11 20:18:13 +00:00
2017-11-25 21:25:01 +00:00
describe("POST /_auth", () => {
it("creates a new auth token", done => {
2017-11-11 20:18:13 +00:00
request(server)
2017-11-25 21:25:01 +00:00
.post("/_auth")
2017-11-11 20:18:13 +00:00
.end((err, res) => {
2018-02-18 02:00:56 +00:00
expect(res.body).toHaveProperty("token");
done();
});
});
});
2017-11-11 20:18:13 +00:00
2017-11-25 21:25:01 +00:00
describe("GET /_auth", () => {
describe("with no auth", () => {
it("echoes back null", done => {
2017-11-11 20:18:13 +00:00
request(server)
2017-11-25 21:25:01 +00:00
.get("/_auth")
2017-11-11 20:18:13 +00:00
.end((err, res) => {
2018-02-18 02:00:56 +00:00
expect(res.body).toHaveProperty("auth");
expect(res.body.auth).toBe(null);
done();
});
});
});
2017-11-11 20:18:13 +00:00
2017-11-25 21:25:01 +00:00
describe("with a revoked auth token", () => {
it("echoes back null", done => {
2017-11-11 20:18:13 +00:00
withRevokedToken({ some: { scope: true } }, token => {
request(server)
2017-11-25 21:25:01 +00:00
.get("/_auth?token=" + token)
2017-11-11 20:18:13 +00:00
.end((err, res) => {
2018-02-18 02:00:56 +00:00
expect(res.body).toHaveProperty("auth");
expect(res.body.auth).toBe(null);
done();
});
});
});
});
2017-11-11 20:18:13 +00:00
2017-11-25 21:25:01 +00:00
describe("with a valid auth token", () => {
it("echoes back the auth payload", done => {
2017-11-11 20:18:13 +00:00
withToken({ some: { scope: true } }, token => {
request(server)
2017-11-25 21:25:01 +00:00
.get("/_auth?token=" + token)
2017-11-11 20:18:13 +00:00
.end((err, res) => {
2018-02-18 02:00:56 +00:00
expect(res.body).toHaveProperty("auth");
expect(typeof res.body.auth).toBe("object");
done();
});
});
});
});
});
2017-11-11 20:18:13 +00:00
2017-11-25 21:25:01 +00:00
describe("GET /_publicKey", () => {
it("echoes the public key", done => {
2017-11-11 20:18:13 +00:00
request(server)
2017-11-25 21:25:01 +00:00
.get("/_publicKey")
2017-11-11 20:18:13 +00:00
.end((err, res) => {
2018-02-18 02:00:56 +00:00
expect(res.text).toMatch(/PUBLIC KEY/);
done();
});
});
});
2017-11-11 20:18:13 +00:00
2017-11-25 21:25:01 +00:00
describe("POST /_blacklist", () => {
2018-02-18 02:00:56 +00:00
afterEach(clearBlacklist);
2017-11-15 00:46:59 +00:00
2017-11-25 21:25:01 +00:00
describe("with no auth", () => {
it("is forbidden", done => {
2017-11-11 20:18:13 +00:00
request(server)
2017-11-25 21:25:01 +00:00
.post("/_blacklist")
2017-11-11 20:18:13 +00:00
.end((err, res) => {
2018-02-18 02:00:56 +00:00
expect(res.statusCode).toBe(403);
done();
});
});
});
2017-11-11 20:18:13 +00:00
describe('with the "blacklist.add" scope', () => {
2017-11-25 21:25:01 +00:00
it("can add to the blacklist", done => {
2017-11-11 20:18:13 +00:00
withToken({ blacklist: { add: true } }, token => {
request(server)
2017-11-25 21:25:01 +00:00
.post("/_blacklist")
.send({ token, packageName: "bad-package" })
2017-11-11 20:18:13 +00:00
.end((err, res) => {
2018-02-18 02:00:56 +00:00
expect(res.statusCode).toBe(200);
expect(res.headers["content-location"]).toEqual(
"/_blacklist/bad-package"
);
expect(res.body.ok).toBe(true);
done();
});
});
});
});
});
2017-11-11 20:18:13 +00:00
2017-11-25 21:25:01 +00:00
describe("GET /_blacklist", () => {
describe("with no auth", () => {
it("is forbidden", done => {
2017-11-11 20:18:13 +00:00
request(server)
2017-11-25 21:25:01 +00:00
.get("/_blacklist")
2017-11-11 20:18:13 +00:00
.end((err, res) => {
2018-02-18 02:00:56 +00:00
expect(res.statusCode).toBe(403);
done();
});
});
});
2017-11-11 20:18:13 +00:00
describe('with the "blacklist.read" scope', () => {
2017-11-25 21:25:01 +00:00
it("can read the blacklist", done => {
2017-11-11 20:18:13 +00:00
withToken({ blacklist: { read: true } }, token => {
request(server)
2017-11-25 21:25:01 +00:00
.get("/_blacklist?token=" + token)
2017-11-11 20:18:13 +00:00
.end((err, res) => {
2018-02-18 02:00:56 +00:00
expect(res.statusCode).toBe(200);
done();
});
});
});
});
});
2017-11-11 20:18:13 +00:00
2017-11-25 21:25:01 +00:00
describe("DELETE /_blacklist/:packageName", () => {
describe("with no auth", () => {
it("is forbidden", done => {
2017-11-11 20:18:13 +00:00
request(server)
2017-11-25 21:25:01 +00:00
.delete("/_blacklist/bad-package")
2017-11-11 20:18:13 +00:00
.end((err, res) => {
2018-02-18 02:00:56 +00:00
expect(res.statusCode).toBe(403);
done();
});
});
});
2017-11-11 20:18:13 +00:00
describe('with the "blacklist.remove" scope', () => {
2017-11-25 21:25:01 +00:00
it("can remove a package from the blacklist", done => {
2017-11-11 20:18:13 +00:00
withToken({ blacklist: { remove: true } }, token => {
request(server)
2017-11-25 21:25:01 +00:00
.delete("/_blacklist/bad-package")
2017-11-11 20:18:13 +00:00
.send({ token })
.end((err, res) => {
2018-02-18 02:00:56 +00:00
expect(res.statusCode).toBe(200);
expect(res.body.ok).toBe(true);
done();
});
});
});
2017-11-25 21:25:01 +00:00
it("can remove a scoped package from the blacklist", done => {
withToken({ blacklist: { remove: true } }, token => {
request(server)
2017-11-25 21:25:01 +00:00
.delete("/_blacklist/@scope/bad-package")
.send({ token })
.end((err, res) => {
2018-02-18 02:00:56 +00:00
expect(res.statusCode).toBe(200);
expect(res.body.ok).toBe(true);
done();
});
});
});
});
});
});