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 express = require("express");
const exphbs = require("express-handlebars");
const path = require("path");
const indexRouter = require("./routes/index");
const pageRouter = require("./routes/pages");
const editingRouter = require("./routes/editing");
const SITE_NAME = require("./config").SITE_NAME;
const app = express();
app.engine(".html", exphbs({ extname: ".html", helpers: { SITE_NAME } }));
app.set("view engine", ".html");
app.use(
"/static/semantic/",
express.static(path.join(__dirname, "node_modules", "semantic-ui-css"))
);
app.use(
"/static/font-awesome/",
express.static(path.join(__dirname, "node_modules", "font-awesome"))
);
app.use("/static/", express.static(path.join(__dirname, "static")));
app.use("/", indexRouter);
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));
const request = require("supertest");
const app = require("./app");
const db = require("./db");
beforeAll(done => {
db.init(done);
});
describe("Authentication", () => {
test("/edit GET", done => {
request(app)
.get("/edit/Foo")
.then(res => {
expect(res.statusCode).toBe(401);
expect(res.headers["www-authenticate"]).toBe("Basic");
done();
});
});
test("/edit POST", done => {
db.createPage("EditAuthExample", "foo bar", (err, page) => {
expect(err).toBeNull();
request(app)
.post("/edit/" + page.rowid)
.type("form")
.send({ name: "EditPostExample", content: "hello world" })
.then(res => {
expect(res.statusCode).toBe(401);
expect(res.headers["www-authenticate"]).toBe("Basic");
done();
});
});
});
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
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 : {};
const ADMIN_PASSWORD = process.env.ADMIN_PASSWORD || "admin";
// render the error page
res.status(err.status || 500);
res.render("error");
describe("Editing", () => {
test("/new GET", done => {
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 express = require("express");
const exphbs = require("express-handlebars");
const path = require("path");
const indexRouter = require("./routes/index");
const pageRouter = require("./routes/pages");
const editingRouter = require("./routes/editing");
const app = express();
app.engine(".html", exphbs({ extname: ".html" }));
app.set("view engine", ".html");
app.use(
"/static/semantic/",
express.static(path.join(__dirname, "node_modules", "semantic-ui-css"))
);
app.use(
"/static/font-awesome/",
express.static(path.join(__dirname, "node_modules", "font-awesome"))
);
app.use("/static/", express.static(path.join(__dirname, "static")));
app.use("/", indexRouter);
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));
const request = require("supertest");
const app = require("./app");
const db = require("./db");
beforeAll(done => {
db.init(done);
});
describe("Authentication", () => {
test("Editing pages", done => {
request(app)
.get("/edit/Foo")
.then(res => {
expect(res.statusCode).toBe(401);
expect(res.headers["www-authenticate"]).toBe("Basic");
done();
});
});
test("Creating pages", done => {
request(app)
.get("/new")
.then(res => {
expect(res.statusCode).toBe(401);
expect(res.headers["www-authenticate"]).toBe("Basic");
done();
});
});
});
// error handler
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 : {};
const ADMIN_PASSWORD = process.env.ADMIN_PASSWORD || "admin";
// render the error page
res.status(err.status || 500);
res.render("error");
describe("Editing", () => {
test("/new GET", done => {
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);
});