Skip to content

Commit

Permalink
added get /messages
Browse files Browse the repository at this point in the history
  • Loading branch information
abarnhard committed Aug 29, 2014
1 parent 6cb438d commit f45c9ab
Show file tree
Hide file tree
Showing 8 changed files with 46 additions and 159 deletions.
7 changes: 4 additions & 3 deletions app/controllers/messages.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
'use strict';

var Message = require('../models/message');
var User = require('../models/user'),
moment = require('moment');

exports.index = function(req, res){
Message.find(res.locals.user._id, req.query, function(err, messages){
res.render('messages/index', {messages:messages, query:req.query});
User.fetchMessages(res.locals.user._id, req.query, function(err, messages){
res.render('messages/index', {messages:messages, query:req.query, moment:moment});
});
};

22 changes: 1 addition & 21 deletions app/models/message.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
'use strict';

var User = require('./user'),
async = require('async');

function Message(fromId, toId, body){
this.fromId = fromId;
this.toId = toId;
Expand All @@ -19,13 +16,7 @@ Message.find = function(toId, query, cb){
var filter = {toId:toId},
sort = {};
sort.sent = (query.sort) ? query.sort * 1 : 1;
Message.collection.find(filter).sort(sort).toArray(function(err, objs){
// console.log('***objs', objs);
async.map(objs, getSenderInfo, function(err2, fullMessages){
// console.log(fullMessages);
cb(null, fullMessages);
});
});
Message.collection.find(filter).sort(sort).toArray(cb);
};

Message.findOne = function(query, cb){
Expand All @@ -42,14 +33,3 @@ Message.countUnreadForUser = function(id, cb){

module.exports = Message;

// helper functions
function getSenderInfo(message, done){
User.findById(message.fromId, function(err, user){
console.log(user);
message.fromName = user.name;
message.fromEmail = user.email;
// console.log(message);
done(null, message);
});
}

22 changes: 21 additions & 1 deletion app/models/user.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
var bcrypt = require('bcrypt'),
_ = require('lodash'),
Mongo = require('mongodb'),
Message = require('./message');
Message = require('./message'),
async = require('async');

function User(){
}
Expand Down Expand Up @@ -65,6 +66,14 @@ User.find = function(query, cb){
User.collection.findOne(query, cb);
};

User.fetchMessages = function(userId, query, cb){
Message.find(userId, query, function(err, messages){
async.map(messages, addSenderInfo, function(err2, fullMessages){
cb(err2, fullMessages);
});
});
};

User.prototype.send = function(receiver, data, cb){
switch(data.mtype){
case 'text':
Expand All @@ -81,6 +90,17 @@ User.prototype.send = function(receiver, data, cb){
module.exports = User;

// Helper Functions

function addSenderInfo(message, done){
User.findById(message.fromId, function(err, user){
// console.log(user);
message.fromName = user.name;
message.fromEmail = user.email;
// console.log(message);
done(null, message);
});
}

function sendText(to, body, cb){
if(!to){return cb();}

Expand Down
6 changes: 3 additions & 3 deletions app/views/messages/index.jade
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ block content
th Message
tbody
each message in messages
tr
tr(style="background-color:#{(message.isRead) ? 'white' : 'whitesmoke'};")
td: a(href='/users/#{message.fromEmail}')= message.fromName
td= message.sent
td= message.body
td= moment(message.sent).format('MMM Do YY')
td: a(href='/messages/#{message._id}')= message.body.substr(0, 10)

block scripts

112 changes: 6 additions & 106 deletions test/acceptance/message.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ var expect = require('chai').expect,
cookie = null,
request = require('supertest');

describe('users', function(){
describe('messages', function(){
before(function(done){
request(app).get('/').end(done);
});
Expand All @@ -28,115 +28,15 @@ describe('users', function(){
});
});

describe('get /profile/edit', function(){
it('should show the edit profile page', function(done){
describe('get /messages', function(){
it('should show messages page for logged in user', function(done){
request(app)
.get('/profile/edit')
.get('/messages')
.set('cookie', cookie)
.end(function(err, res){
expect(res.status).to.equal(200);
expect(res.text).to.include('nodeapptest+bob@gmail.com');
expect(res.text).to.include('Email');
expect(res.text).to.include('Phone');
expect(res.text).to.include('Visible');
done();
});
});
});

describe('put /profile', function(){
it('should edit the profile in database', function(done){
request(app)
.post('/profile')
.send('_method=put&visible=public&email=a%40b.com&phone=555-555-5555&photo=someUrl&tagline=some+tagline&facebook=facebookUrl&twitter=%40twitterhandle')
.set('cookie', cookie)
.end(function(err, res){
expect(res.status).to.equal(302);
expect(res.headers.location).to.equal('/profile');
done();
});
});
});

describe('get /profile', function(){
it('should show the logged in users profile page', function(done){
request(app)
.post('/profile')
.send('_method=put&visible=public&email=a%40b.com&phone=555-555-5555&photo=someUrl&tagline=some+tagline&facebook=facebookUrl&twitter=%40twitterhandle')
.set('cookie', cookie)
.end(function(err, res){
request(app)
.get('/profile')
.set('cookie', cookie)
.end(function(err, res){
expect(res.status).to.equal(200);
expect(res.text).to.include('Phone');
expect(res.text).to.include('Twitter');
expect(res.text).to.include('Facebook');
done();
});
});
});
});

describe('get /users', function(){
it('should show links to public user profiles', function(done){
request(app)
.get('/users')
.set('cookie', cookie)
.end(function(err, res){
expect(res.status).to.equal(200);
expect(res.text).to.not.include('Bob');
expect(res.text).to.include('John');
expect(res.text).to.not.include('Sue');
done();
});
});
});

describe('get /users/email', function(){
it('should return the profile page for a public profile', function(done){
request(app)
.get('/users/nodeapptest+john@gmail.com')
.set('cookie', cookie)
.end(function(err, res){
expect(res.status).to.equal(200);
expect(res.text).to.include('John');
done();
});
});
it('should redirect away from private profile', function(done){
request(app)
.get('/users/nodeapptest+sue@gmail.com')
.set('cookie', cookie)
.end(function(err, res){
expect(res.status).to.equal(302);
expect(res.headers.location).to.equal('/users');
done();
});
});
});

describe('post /message/userId', function(){
it('should send a text message to recipient', function(done){
request(app)
.post('/message/000000000000000000000003')
.send('mtype=text&message=hey')
.set('cookie', cookie)
.end(function(err, res){
expect(res.status).to.equal(302);
expect(res.headers.location).to.equal('/users/nodeapptest+john@gmail.com');
done();
});
});
it('should send an email message to recipient', function(done){
request(app)
.post('/message/000000000000000000000003')
.send('mtype=email&message=hey')
.set('cookie', cookie)
.end(function(err, res){
expect(res.status).to.equal(302);
expect(res.headers.location).to.equal('/users/nodeapptest+john@gmail.com');
expect(res.text).to.include('Sue');
expect(res.text).to.include('Message');
done();
});
});
Expand Down
14 changes: 0 additions & 14 deletions test/acceptance/users.js
Original file line number Diff line number Diff line change
Expand Up @@ -153,19 +153,5 @@ describe('users', function(){
});
});

describe('get /messages', function(){
it('should show messages page for logged in user', function(done){
request(app)
.get('/messages')
.set('cookie', cookie)
.end(function(err, res){
expect(res.status).to.equal(200);
expect(res.text).to.include('Sue');
expect(res.text).to.include('Message');
done();
});
});
});

});

11 changes: 0 additions & 11 deletions test/unit/message.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,17 +36,6 @@ describe('Message', function(){
});
});

describe('.find', function(){
it('should return all messages for a user', function(done){
var id = Mongo.ObjectID('000000000000000000000001');
Message.find(id, {}, function(err, messages){
expect(messages).to.have.length(2);
expect(messages[0].fromName).to.equal('Sue');
done();
});
});
});

describe('#save', function(){
it('should save a message in the database', function(done){
var from = Mongo.ObjectID(),
Expand Down
11 changes: 11 additions & 0 deletions test/unit/user.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,17 @@ describe('User', function(){
});
});

describe('.fetchMessages', function(){
it('should return all messages for a user', function(done){
var id = Mongo.ObjectID('000000000000000000000001');
User.fetchMessages(id, {}, function(err, messages){
expect(messages).to.have.length(2);
expect(messages[0].fromName).to.equal('Sue');
done();
});
});
});

describe('#send', function(){
it('should send a text message to a user', function(done){
User.findById('000000000000000000000001', function(err, sender){
Expand Down

0 comments on commit f45c9ab

Please sign in to comment.