diff --git a/config/environments/test.js b/config/environments/test.js index 6edc603..5f7d0f9 100644 --- a/config/environments/test.js +++ b/config/environments/test.js @@ -3,7 +3,7 @@ var config = { port: 9000, mongo: { - uri: "mongodb://localhost/swsgather_development" + uri: "mongodb://localhost/swsgather_test" }, secret_token: "" }; diff --git a/db/models/message.js b/db/models/message.js index 3185db8..c4783e9 100644 --- a/db/models/message.js +++ b/db/models/message.js @@ -9,10 +9,12 @@ var messageSchema = new Schema({ avatar: String }, content: { type: String, required: true }, - createdAt: { type: Date, default: Date.now, required: true } + createdAt: { type: Date, default: Date.now, required: true }, + deleted: { type: Boolean, default: false } }); -messageSchema.index({ createdAt: 1 }); +messageSchema.index({ createdAt: -1 }); +messageSchema.index({ deleted: 1, createdAt: -1 }); // Class Methods @@ -33,7 +35,7 @@ messageSchema.methods.toJson = function () { messageSchema.statics.list = function (options, callback) { - return this.find().sort({createdAt: 1}).limit(30).exec(callback); + return this.find({deleted: false}).sort({createdAt: -1}).limit(30).exec(callback); }; module.exports = mongoose.model('message', messageSchema); diff --git a/spec/helpers/index.js b/spec/helpers/index.js index a7aa811..d21d65e 100644 --- a/spec/helpers/index.js +++ b/spec/helpers/index.js @@ -59,4 +59,16 @@ var random = helpers.random = function (n) { return Math.floor(Math.random () * n); } +helpers.createMessage = function (options, callback) { + var content = options.content || "Test content"; + var user = options.user || createUser(); + Message.create({ + author: { + username: user.username, + avatar: user.avatar + }, + content: content + }, callback); +}; + module.exports = helpers; \ No newline at end of file diff --git a/spec/message.js b/spec/message.js index 8408fab..ba6040c 100644 --- a/spec/message.js +++ b/spec/message.js @@ -38,21 +38,14 @@ describe("Message Model", function () { }); describe(".list", function () { - before(function (done) { - var instructions = [helper.clearDb.bind(null)]; - var create = function (content) { - return function (callback) { - Message.create({ - author: { - username: user.username, - avatar: user.avatar - }, - content: content - }, callback); - } - }; + beforeEach(function (done) { + var instructions = [];//[helper.clearDb.bind(null)]; for (var i = 0; i < 31; i++) { - instructions.push(create(i)); + instructions.push(function (content) { + return function (callback) { + return helper.createMessage({content: content}, callback); + } + }(i)); } async.series(instructions, done); }); @@ -63,10 +56,31 @@ describe("Message Model", function () { assert.isTrue(messages.reduce(function (acc, message, index, arr) { if (index === 0) return true; if (acc === false) return false; - return arr[index - 1].createdAt < message.createdAt; + return arr[index - 1].createdAt > message.createdAt; + })); + assert.isTrue(messages.some(function (message) { + return message.content === "30"; })); done(); }); }); + it ("does not list deleted messages", function (done) { + helper.createMessage({ + content: "FOOBAR" + }, function(error, message) { + if (error) return done(error); + message.deleted = true; + message.save(function (error, message) { + if (error) return done(error); + assert.isTrue(message.deleted); + Message.list({}, function (error, messages) { + assert.isTrue(messages.every(function (elem) { + return elem.id !== message.id; + })); + done(); + }); + }); + }); + }); }); }); \ No newline at end of file