Making the JS sample file more interesting

Use a file pair that have both additions and removals
pull/25/head
Wilfred Hughes 2019-11-18 17:59:04 +07:00
parent 7dd2825254
commit 44ae3a980f
2 changed files with 176 additions and 85 deletions

@ -1,48 +1,109 @@
const createError = require("http-errors"); const request = require("supertest");
const express = require("express"); const app = require("./app");
const exphbs = require("express-handlebars"); const db = require("./db");
const path = require("path");
beforeAll(done => {
const indexRouter = require("./routes/index"); db.init(done);
const pageRouter = require("./routes/pages"); });
const editingRouter = require("./routes/editing");
const SITE_NAME = require("./config").SITE_NAME; describe("Authentication", () => {
test("/edit GET", done => {
const app = express(); request(app)
.get("/edit/Foo")
app.engine(".html", exphbs({ extname: ".html", helpers: { SITE_NAME } })); .then(res => {
app.set("view engine", ".html"); expect(res.statusCode).toBe(401);
expect(res.headers["www-authenticate"]).toBe("Basic");
app.use( done();
"/static/semantic/", });
express.static(path.join(__dirname, "node_modules", "semantic-ui-css")) });
); test("/edit POST", done => {
app.use( db.createPage("EditAuthExample", "foo bar", (err, page) => {
"/static/font-awesome/", expect(err).toBeNull();
express.static(path.join(__dirname, "node_modules", "font-awesome"))
); request(app)
.post("/edit/" + page.rowid)
app.use("/static/", express.static(path.join(__dirname, "static"))); .type("form")
.send({ name: "EditPostExample", content: "hello world" })
app.use("/", indexRouter); .then(res => {
app.use("/", editingRouter); expect(res.statusCode).toBe(401);
// Needs to come last, so we register /:name after other routes. expect(res.headers["www-authenticate"]).toBe("Basic");
app.use("/", pageRouter); done();
});
// catch 404 and forward to error handler });
app.use(function(req, res, next) { });
next(createError(404));
test("/new GET", done => {
request(app)
.get("/new")
.then(res => {
expect(res.statusCode).toBe(401);
expect(res.headers["www-authenticate"]).toBe("Basic");
done();
});
});
test("/new POST", done => {
request(app)
.post("/new")
.type("form")
.send({ name: "FooBarBaz", content: "hello world" })
.expect(401, done);
});
}); });
// error handler const ADMIN_PASSWORD = process.env.ADMIN_PASSWORD || "admin";
app.use(function(err, req, res) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get("env") === "development" ? err : {};
// render the error page describe("Editing", () => {
res.status(err.status || 500); test("/new GET", done => {
res.render("error"); request(app)
.get("/new")
.auth("admin", ADMIN_PASSWORD)
.expect(200, done);
});
test("/new POST", done => {
request(app)
.post("/new")
.type("form")
.send({ name: "FooBar", content: "hello world" })
.auth("admin", ADMIN_PASSWORD)
.expect(302, done);
});
test("/edit GET", done => {
db.createPage("EditGetExample", "foo bar", (err, page) => {
expect(err).toBeNull();
request(app)
.get("/edit/" + page.rowid)
.auth("admin", ADMIN_PASSWORD)
.expect(200, done);
});
});
test("/edit POST", done => {
db.createPage("EditPostExample", "foo bar", (err, page) => {
expect(err).toBeNull();
request(app)
.post("/edit/" + page.rowid)
.type("form")
.send({ name: "EditPostExample", content: "hello world" })
.auth("admin", ADMIN_PASSWORD)
.expect(302, done);
});
});
}); });
module.exports = app; describe("Viewing", () => {
test("/all", done => {
request(app)
.get("/all")
.expect(200, done);
});
test("/AnExamplePage", done => {
db.createPage("AnExamplePage", "foo bar", () => {
request(app)
.get("/AnExamplePage")
.expect(200, done);
});
});
});

@ -1,47 +1,77 @@
const createError = require("http-errors"); const request = require("supertest");
const express = require("express"); const app = require("./app");
const exphbs = require("express-handlebars"); const db = require("./db");
const path = require("path");
beforeAll(done => {
const indexRouter = require("./routes/index"); db.init(done);
const pageRouter = require("./routes/pages"); });
const editingRouter = require("./routes/editing");
describe("Authentication", () => {
const app = express(); test("Editing pages", done => {
request(app)
app.engine(".html", exphbs({ extname: ".html" })); .get("/edit/Foo")
app.set("view engine", ".html"); .then(res => {
expect(res.statusCode).toBe(401);
app.use( expect(res.headers["www-authenticate"]).toBe("Basic");
"/static/semantic/", done();
express.static(path.join(__dirname, "node_modules", "semantic-ui-css")) });
); });
app.use(
"/static/font-awesome/", test("Creating pages", done => {
express.static(path.join(__dirname, "node_modules", "font-awesome")) request(app)
); .get("/new")
.then(res => {
app.use("/static/", express.static(path.join(__dirname, "static"))); expect(res.statusCode).toBe(401);
expect(res.headers["www-authenticate"]).toBe("Basic");
app.use("/", indexRouter); done();
app.use("/", editingRouter); });
// Needs to come last, so we register /:name after other routes. });
app.use("/", pageRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
}); });
// error handler const ADMIN_PASSWORD = process.env.ADMIN_PASSWORD || "admin";
app.use(function(err, req, res) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get("env") === "development" ? err : {};
// render the error page describe("Editing", () => {
res.status(err.status || 500); test("/new GET", done => {
res.render("error"); request(app)
.get("/new")
.auth("admin", ADMIN_PASSWORD)
.expect(200, done);
});
test("/new POST", done => {
request(app)
.post("/new")
.type("form")
.send({ name: "FooBar", content: "hello world" })
.auth("admin", ADMIN_PASSWORD)
.expect(302, done);
});
test("/edit GET", done => {
db.createPage("EditGetExample", "foo bar", (err, page) => {
expect(err).toBeNull();
request(app)
.get("/edit/" + page.rowid)
.auth("admin", ADMIN_PASSWORD)
.expect(200, done);
});
});
test("/edit GET", done => {
db.createPage("EditPostExample", "foo bar", (err, page) => {
expect(err).toBeNull();
request(app)
.post("/edit/" + page.rowid)
.type("form")
.send({ name: "EditPostExample", content: "hello world" })
.auth("admin", ADMIN_PASSWORD)
.expect(302, done);
});
});
}); });
module.exports = app; test("/all", done => {
request(app)
.get("/all")
.expect(200, done);
});