Skip to content

Commit e1e1cff

Browse files
added session and mongo-connect packages, refined tests.
1 parent 88fde23 commit e1e1cff

5 files changed

Lines changed: 163 additions & 52 deletions

File tree

package-lock.json

Lines changed: 99 additions & 41 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,18 @@
2020
"chai-http": "^3.0.0",
2121
"concurrently": "^3.5.1",
2222
"mocha": "^5.0.4",
23-
"nodemon": "^1.9.1",
24-
"superagent": "^3.8.2"
23+
"nodemon": "^1.9.1"
2524
},
2625
"dependencies": {
2726
"basic-auth": "^2.0.0",
2827
"bcrypt": "^1.0.3",
2928
"body-parser": "~1.18.2",
3029
"config": "^1.30.0",
30+
"connect-mongo": "^2.0.1",
3131
"cookie-parser": "~1.4.3",
3232
"debug": "~2.6.9",
3333
"express": "~4.15.5",
34+
"express-session": "^1.15.6",
3435
"mongoose": "^5.0.10",
3536
"mongoose-seed": "^0.4.1",
3637
"morgan": "~1.9.0",

src/app.js

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ const data = require('./data/data.json');
1010
const User = require('./models/user');
1111
const Course = require('./models/course');
1212
const Review = require('./models/review');
13+
const session = require('express-session');
14+
const MongoStore = require('connect-mongo')(session);
1315

1416
const config = require('config');
1517
const dbConfig = config.get('DBHost');
@@ -54,6 +56,17 @@ app.set('view engine', 'pug');
5456
// uncomment after placing your favicon in /public
5557
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
5658

59+
app.use(session({
60+
secret: "The Session secret, which should not be public. Put into a secrets.js",
61+
resave: true,
62+
saveUninitialized: false,
63+
store: new MongoStore({
64+
mongooseConnection: db //db must first be defined.
65+
})
66+
}));
67+
68+
69+
5770
if(config.util.getEnv('NODE_ENV') !== 'test') {
5871
app.use(logger('dev'));
5972
}
@@ -67,7 +80,7 @@ app.use('/api/users', user);
6780

6881
// catch 404 and forward to error handler
6982
app.use(function(req, res, next) {
70-
var err = new Error('Not Found');
83+
const err = new Error('Not Found');
7184
err.status = 404;
7285
next(err);
7386
});
@@ -78,7 +91,7 @@ app.use(function(err, req, res, next) {
7891
res.locals.message = err.message;
7992
res.locals.error = req.app.get('env') === 'development' ? err : {};
8093

81-
let status = err.status || 500;
94+
const status = err.status || 500;
8295
// render the error page
8396
res.status(status).json({success: false, status: status, message: err.message});
8497
});

src/routes/user.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ import {authorizeUser} from "../middleware/index";
66
/* GET home page. */
77
router.get('/', authorizeUser, (req, res, next) => {
88
console.log(req.session.userId);
9-
res.send('test');
9+
let status = 200;
10+
res.status(status).json({success: true, message: "User Successfully retrieved", status: status});
1011
});
1112

1213

test/user_test.js

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,57 @@ const should = chai.should();
1010
const expect = chai.expect;
1111

1212
const postAPI = '/api/users';
13+
const getAPI = postAPI;
1314

1415

1516
describe('Users', () => {
16-
beforeEach((done) => {
17-
User.remove({}, (err) => {
18-
done();
19-
});
20-
});
2117

2218
describe('/GET users', () => {
23-
//it('shoul')
19+
it('should not GET if auth headers are missing', (done) => {
20+
chai.request(server)
21+
.get(getAPI)
22+
.end((err, res) => {
23+
res.should.have.status(401);
24+
res.body.should.have.property('success').equal(false);
25+
res.body.should.have.property('message').equal("Access Denied: Please supply login credentials!");
26+
done();
27+
});
28+
});
29+
it('should not GET if auth headers supplied are invalid', (done) => {
30+
let auth = {
31+
user: 'user@notValidEmail.com',
32+
pass: 'notValidPass'
33+
};
34+
getAuthRequest(auth, 401, false, "Access Denied: Wrong email or password", done);
35+
});
2436

37+
it('should GET if auth headers are present', (done) => {
38+
let auth = {
39+
user: 'joe@smith.com',
40+
pass: 'password'
41+
};
42+
getAuthRequest(auth, 200, true, "User Successfully retrieved", done);
43+
});
44+
45+
function getAuthRequest(auth, status, success, msg, done){
46+
chai.request(server)
47+
.get(getAPI)
48+
.auth(auth.user, auth.pass)
49+
.end((err, res) => {
50+
res.should.have.status(status);
51+
res.body.should.have.property('success').equal(success);
52+
res.body.should.have.property('message').equal(msg);
53+
done();
54+
});
55+
}
2556
});
2657

2758
describe('/POST users', () => {
59+
beforeEach((done) => {
60+
User.remove({}, (err) => {
61+
done();
62+
});
63+
});
2864
let user400 = {
2965
emailAddress: 'wre23sd',
3066
password: 'password',
@@ -96,6 +132,7 @@ describe('Users', () => {
96132
.send(user)
97133
.end((err, res) => {
98134
res.should.have.status(422);
135+
res.body.should.have.property('success').equal(false);
99136
done();
100137
});
101138
}
@@ -106,6 +143,7 @@ describe('Users', () => {
106143
.end((err, res) => {
107144
res.should.have.status(400);
108145
res.body.should.have.property('message').equal("Malformed Email Supplied");
146+
res.body.should.have.property('success').equal(false);
109147
done();
110148
});
111149
}

0 commit comments

Comments
 (0)