Skip to content
This repository was archived by the owner on Nov 16, 2023. It is now read-only.

change tests to not always pass #38

Merged
merged 10 commits into from
Dec 14, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -98,4 +98,4 @@
"tslint": "^5.8.0",
"typescript": "^2.4.0"
}
}
}
137 changes: 137 additions & 0 deletions src/app.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
/**
* Module dependencies.
*/
import * as express from "express";
import * as compression from "compression"; // compresses requests
import * as session from "express-session";
import * as bodyParser from "body-parser";
import * as logger from "morgan";
import * as lusca from "lusca";
import * as dotenv from "dotenv";
import * as mongo from "connect-mongo";
import * as flash from "express-flash";
import * as path from "path";
import * as mongoose from "mongoose";
import * as passport from "passport";
import expressValidator = require("express-validator");

const MongoStore = mongo(session);

/**
* Load environment variables from .env file, where API keys and passwords are configured.
*/
dotenv.config({ path: ".env.example" });


/**
* Controllers (route handlers).
*/
import * as homeController from "./controllers/home";
import * as userController from "./controllers/user";
import * as apiController from "./controllers/api";
import * as contactController from "./controllers/contact";

/**
* API keys and Passport configuration.
*/
import * as passportConfig from "./config/passport";

/**
* Create Express server.
*/
const app = express();

/**
* Connect to MongoDB.
*/
// mongoose.Promise = global.Promise;
mongoose.connect(process.env.MONGODB_URI || process.env.MONGOLAB_URI);

mongoose.connection.on("error", () => {
console.log("MongoDB connection error. Please make sure MongoDB is running.");
process.exit();
});



/**
* Express configuration.
*/
app.set("port", process.env.PORT || 3000);
app.set("views", path.join(__dirname, "../views"));
app.set("view engine", "pug");
app.use(compression());
app.use(logger("dev"));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(expressValidator());
app.use(session({
resave: true,
saveUninitialized: true,
secret: process.env.SESSION_SECRET,
store: new MongoStore({
url: process.env.MONGODB_URI || process.env.MONGOLAB_URI,
autoReconnect: true
})
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
app.use(lusca.xframe("SAMEORIGIN"));
app.use(lusca.xssProtection(true));
app.use((req, res, next) => {
res.locals.user = req.user;
next();
});
app.use((req, res, next) => {
// After successful login, redirect back to the intended page
if (!req.user &&
req.path !== "/login" &&
req.path !== "/signup" &&
!req.path.match(/^\/auth/) &&
!req.path.match(/\./)) {
req.session.returnTo = req.path;
} else if (req.user &&
req.path == "/account") {
req.session.returnTo = req.path;
}
next();
});
app.use(express.static(path.join(__dirname, "public"), { maxAge: 31557600000 }));

/**
* Primary app routes.
*/
app.get("/", homeController.index);
app.get("/login", userController.getLogin);
app.post("/login", userController.postLogin);
app.get("/logout", userController.logout);
app.get("/forgot", userController.getForgot);
app.post("/forgot", userController.postForgot);
app.get("/reset/:token", userController.getReset);
app.post("/reset/:token", userController.postReset);
app.get("/signup", userController.getSignup);
app.post("/signup", userController.postSignup);
app.get("/contact", contactController.getContact);
app.post("/contact", contactController.postContact);
app.get("/account", passportConfig.isAuthenticated, userController.getAccount);
app.post("/account/profile", passportConfig.isAuthenticated, userController.postUpdateProfile);
app.post("/account/password", passportConfig.isAuthenticated, userController.postUpdatePassword);
app.post("/account/delete", passportConfig.isAuthenticated, userController.postDeleteAccount);
app.get("/account/unlink/:provider", passportConfig.isAuthenticated, userController.getOauthUnlink);

/**
* API examples routes.
*/
app.get("/api", apiController.getApi);
app.get("/api/facebook", passportConfig.isAuthenticated, passportConfig.isAuthorized, apiController.getFacebook);

/**
* OAuth authentication routes. (Sign in)
*/
app.get("/auth/facebook", passport.authenticate("facebook", { scope: ["email", "public_profile"] }));
app.get("/auth/facebook/callback", passport.authenticate("facebook", { failureRedirect: "/login" }), (req, res) => {
res.redirect(req.session.returnTo || "/");
});

module.exports = app;
142 changes: 3 additions & 139 deletions src/server.ts
Original file line number Diff line number Diff line change
@@ -1,142 +1,6 @@
/**
* Module dependencies.
*/
import * as express from "express";
import * as compression from "compression"; // compresses requests
import * as session from "express-session";
import * as expressValidator from "express-validator";
import * as bodyParser from "body-parser";
import * as logger from "morgan";
import * as errorHandler from "errorhandler";
import * as lusca from "lusca";
import * as dotenv from "dotenv";
import * as mongo from "connect-mongo";
import * as flash from "express-flash";
import * as path from "path";
import * as mongoose from "mongoose";
import * as passport from "passport";


const MongoStore = mongo(session);

/**
* Load environment variables from .env file, where API keys and passwords are configured.
*/
dotenv.config({ path: ".env.example" });


/**
* Controllers (route handlers).
*/
import * as homeController from "./controllers/home";
import * as userController from "./controllers/user";
import * as apiController from "./controllers/api";
import * as contactController from "./controllers/contact";

/**
* API keys and Passport configuration.
*/
import * as passportConfig from "./config/passport";

/**
* Create Express server.
*/
const app = express();

/**
* Connect to MongoDB.
*/
// mongoose.Promise = global.Promise;
mongoose.connect(process.env.MONGODB_URI || process.env.MONGOLAB_URI, {
useMongoClient: true
});
mongoose.connection.on("error", () => {
console.log("MongoDB connection error. Please make sure MongoDB is running.");
process.exit();
});



/**
* Express configuration.
*/
app.set("port", process.env.PORT || 3000);
app.set("views", path.join(__dirname, "../views"));
app.set("view engine", "pug");
app.use(compression());
app.use(logger("dev"));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(expressValidator());
app.use(session({
resave: true,
saveUninitialized: true,
secret: process.env.SESSION_SECRET,
store: new MongoStore({
url: process.env.MONGODB_URI || process.env.MONGOLAB_URI,
autoReconnect: true
})
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
app.use(lusca.xframe("SAMEORIGIN"));
app.use(lusca.xssProtection(true));
app.use((req, res, next) => {
res.locals.user = req.user;
next();
});
app.use((req, res, next) => {
// After successful login, redirect back to the intended page
if (!req.user &&
req.path !== "/login" &&
req.path !== "/signup" &&
!req.path.match(/^\/auth/) &&
!req.path.match(/\./)) {
req.session.returnTo = req.path;
} else if (req.user &&
req.path == "/account") {
req.session.returnTo = req.path;
}
next();
});
app.use(express.static(path.join(__dirname, "public"), { maxAge: 31557600000 }));

/**
* Primary app routes.
*/
app.get("/", homeController.index);
app.get("/login", userController.getLogin);
app.post("/login", userController.postLogin);
app.get("/logout", userController.logout);
app.get("/forgot", userController.getForgot);
app.post("/forgot", userController.postForgot);
app.get("/reset/:token", userController.getReset);
app.post("/reset/:token", userController.postReset);
app.get("/signup", userController.getSignup);
app.post("/signup", userController.postSignup);
app.get("/contact", contactController.getContact);
app.post("/contact", contactController.postContact);
app.get("/account", passportConfig.isAuthenticated, userController.getAccount);
app.post("/account/profile", passportConfig.isAuthenticated, userController.postUpdateProfile);
app.post("/account/password", passportConfig.isAuthenticated, userController.postUpdatePassword);
app.post("/account/delete", passportConfig.isAuthenticated, userController.postDeleteAccount);
app.get("/account/unlink/:provider", passportConfig.isAuthenticated, userController.getOauthUnlink);

/**
* API examples routes.
*/
app.get("/api", apiController.getApi);
app.get("/api/facebook", passportConfig.isAuthenticated, passportConfig.isAuthorized, apiController.getFacebook);

/**
* OAuth authentication routes. (Sign in)
*/
app.get("/auth/facebook", passport.authenticate("facebook", { scope: ["email", "public_profile"] }));
app.get("/auth/facebook/callback", passport.authenticate("facebook", { failureRedirect: "/login" }), (req, res) => {
res.redirect(req.session.returnTo || "/");
});

const app = require("./app");

/**
* Error Handler. Provides full stack - remove for production
Expand All @@ -146,9 +10,9 @@ app.use(errorHandler());
/**
* Start Express server.
*/
app.listen(app.get("port"), () => {
const server = app.listen(app.get("port"), () => {
console.log((" App is running at http://localhost:%d in %s mode"), app.get("port"), app.get("env"));
console.log(" Press CTRL-C to stop\n");
});

module.exports = app;
export = server;
9 changes: 3 additions & 6 deletions test/api.test.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
import * as supertest from "supertest";
import * as app from "../src/server";
import * as request from "supertest";
import * as app from "../src/app";

describe("GET /api", () => {
const request = supertest(app);

it("should return 200 OK", () => {
request
.get("/api")
return request(app).get("/api")
.expect(200);
});
});
8 changes: 3 additions & 5 deletions test/app.test.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import * as supertest from "supertest";
import * as app from "../src/server";
import * as request from "supertest";
import * as app from "../src/app";

describe("GET /random-url", () => {
const request = supertest(app);

it("should return 404", (done) => {
request.get("/reset")
request(app).get("/reset")
.expect(404, done);
});
});
8 changes: 3 additions & 5 deletions test/contact.test.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import * as supertest from "supertest";
import * as app from "../src/server";
import * as request from "supertest";
import * as app from "../src/app";

describe("GET /contact", () => {
const request = supertest(app);

it("should return 200 OK", (done) => {
request.get("/contact")
request(app).get("/contact")
.expect(200, done);
});
});
8 changes: 3 additions & 5 deletions test/home.test.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import * as supertest from "supertest";
import * as app from "../src/server";
import * as request from "supertest";
import * as app from "../src/app";

describe("GET /", () => {
const request = supertest(app);

it("should return 200 OK", (done) => {
request.get("/")
request(app).get("/")
.expect(200, done);
});
});
18 changes: 8 additions & 10 deletions test/user.test.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
import * as supertest from "supertest";
import * as app from "../src/server";

const request = supertest(app);
import * as request from "supertest";
import * as app from "../src/app";

describe("GET /login", () => {
it("should return 200 OK", (done) => {
request.get("/login")
.expect(200, done);
it("should return 200 OK", () => {
return request(app).get("/login")
.expect(200);
});
});

describe("GET /signup", () => {
it("should return 200 OK", (done) => {
request.get("/signup")
.expect(200, done);
it("should return 200 OK", () => {
return request(app).get("/signup")
.expect(200);
});
});