Skip to content

Commit

Permalink
Add authenticate.js tests and improve functions
Browse files Browse the repository at this point in the history
  • Loading branch information
jpenna committed Jan 23, 2017
1 parent 11e2463 commit a7ce18b
Show file tree
Hide file tree
Showing 5 changed files with 109 additions and 16 deletions.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
"mocha": "^3.2.0",
"react": "^15.4.2",
"react-dom": "^15.4.2",
"supertest": "^2.0.1",
"webpack": "^1.14.0"
}
}
2 changes: 1 addition & 1 deletion public/views/chatRoom/components/chatRoom.react.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ class ChatRoom extends React.Component {

this.setState({ chats });
}

scrollBottom() {
const messageArea = document.getElementsByClassName('messages-container');
messageArea[0].scrollTop = messageArea[0].scrollHeight;
Expand Down
2 changes: 1 addition & 1 deletion server/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ app.use((req, res) => {
server.listen(process.env.PORT);


module.exports = { io };
module.exports = { app, io };

// run bot
require('./bot/bot');
99 changes: 93 additions & 6 deletions server/tests/web/authenticate.test.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,101 @@
/* eslint no-undef:off */

const expect = require('expect');
const request = require('supertest');
const { app } = require('../../server');
const { User } = require('../../db/model/user');

describe('authenticate', () => {
describe('GET /views/chatRoom', () => {
before(() => {
token = '123';
});

beforeEach(() => {
findUserSpy = expect.spyOn(User, 'findUserByToken');
});

afterEach(() => {
findUserSpy.restore();
});

it('should check token cookie', (done) => {
request(app)
.get('/views')
.set('Cookie', `token=${token}`)
.end((err) => {
expect(findUserSpy).toHaveBeenCalled();
expect(findUserSpy.calls[0].arguments).toEqual(token);
done(err);
});
});

it('should redirect 401 to /views/login if no token cookie found', (done) => {
findUserSpy.reset();

request(app)
.get('/views')
.expect(401)
.expect('x-authorization', 'No token cookie')
.expect('location', '/views/login')
.end((err) => {
expect(findUserSpy).toNotHaveBeenCalled();
done(err);
});
});

it('should redirect 401 to /views/login if no user found', (done) => {
findUserSpy.andReturn(new Promise(resolve => resolve()));

request(app)
.get('/views')
.set('Cookie', `token=${token}`)
.expect(401)
.expect('x-authorization', 'No user found')
.expect('location', '/views/login')
.end((err) => {
done(err);
});
});

it('should redirect 401 to /views/login if token expired', (done) => {
findUserSpy.andReturn(new Promise((resolve) => {
resolve(
{ expiration_date: new Date().getTime() - 9999999 }
);
}));

request(app)
.get('/views')
.set('Cookie', `token=${token}`)
.expect(401)
.expect('x-authorization', 'Token expired')
.expect('location', '/views/login')
.end((err) => {
expect(findUserSpy).toHaveBeenCalled();
done(err);
});
});

it('should should call next()', (done) => {
findUserSpy.andReturn(new Promise((resolve) => {
resolve(
{ expiration_date: new Date().getTime() + 99999999 }
);
}));

describe('auth GET /views/chatRoom', () => {
it('should check token cookie');
it('should redirect 401 to /views/login if no token cookie found');
it('should redirect 401 to /views/login if no user found');
it('should redirect 401 to /views/login if token expired');
it('should should call next()');
request(app)
.get('/views')
.set('Cookie', `token=${token}`)
.expect(301)
.end((err) => {
done(err);
});
});
});

describe('auth POST /sendcode', () => {
// better to separate each reaquest on it's own function?
it('should create user if not registered');
it('should set token cookie');
});
Expand Down
21 changes: 13 additions & 8 deletions server/web/authenticate.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@ auth.use(cookieParser());

// Check if user can access chatRoom on request
auth.get('/views', (req, res, next) => {

// Check token cookie
if (req.cookies && req.cookies.token) {

// Check token cookie value on DB
User.findUserByToken(req.cookies.token).then((result) => {

if (result) {
const date = new Date().getTime();
const expiration = new Date(result.expiration_date).getTime();
Expand All @@ -30,19 +30,24 @@ auth.get('/views', (req, res, next) => {
if (date < expiration) {
return next();
}
console.log('Token expired');
}
res.set('x-authorization', 'Token expired')
.redirect(401, '/views/login');


// No user found or token expired
console.log('No user found');
res.redirect(401, '/views/login');
} else {
// No user found or token expired
res.set('x-authorization', 'No user found')
.redirect(401, '/views/login');

}
});

} else {
// No cookie token
console.log('No cookie token');
res.redirect(401, '/views/login');
res.set('x-authorization', 'No token cookie')
.redirect(401, '/views/login');
}

});

// Route for Facebook authentication handlers
Expand Down

0 comments on commit a7ce18b

Please sign in to comment.