diff --git a/test/api/v3/integration/chat/POST-chat_seen.test.js b/test/api/v3/integration/chat/POST-chat_seen.test.js index 6073fc1204..9f90ca3296 100644 --- a/test/api/v3/integration/chat/POST-chat_seen.test.js +++ b/test/api/v3/integration/chat/POST-chat_seen.test.js @@ -3,30 +3,65 @@ import { } from '../../../../helpers/api-v3-integration.helper'; describe('POST /groups/:id/chat/seen', () => { - let groupWithChat, message, author, member; + context('Guild', () => { + let guild, guildLeader, guildMember, guildMessage; - before(async () => { - let { group, groupLeader, members } = await createAndPopulateGroup({ - groupDetails: { - type: 'guild', - privacy: 'public', - }, - members: 1, + before(async () => { + let { group, groupLeader, members } = await createAndPopulateGroup({ + groupDetails: { + type: 'guild', + privacy: 'public', + }, + members: 1, + }); + + guild = group; + guildLeader = groupLeader; + guildMember = members[0]; + + guildMessage = await guildLeader.post(`/groups/${guild._id}/chat`, { message: 'Some guild message' }); + guildMessage = guildMessage.message; }); - groupWithChat = group; - author = groupLeader; - member = members[0]; + it('clears new messages for a guild', async () => { + let user = await guildMember.get('/user'); - message = await author.post(`/groups/${groupWithChat._id}/chat`, { message: 'Some message' }); - message = message.message; + await guildMember.post(`/groups/${guild._id}/chat/seen`); + + let guildThatHasSeenChat = await guildMember.get('/user'); + + expect(guildThatHasSeenChat.newMessages).to.be.empty; + }); }); - it('clears new messages', async () => { - await member.post(`/groups/${groupWithChat._id}/chat/seen`); + context('Party', () => { + let party, partyLeader, partyMember, partyMessage; - let userThatHasSeenChat = await member.get('/user'); + before(async () => { + let { group, groupLeader, members } = await createAndPopulateGroup({ + groupDetails: { + type: 'party', + privacy: 'private', + }, + members: 1, + }); - expect(userThatHasSeenChat.newMessages).to.be.empty; + party = group; + partyLeader = groupLeader; + partyMember = members[0]; + + partyMessage = await partyLeader.post(`/groups/${party._id}/chat`, { message: 'Some party message' }); + partyMessage = partyMessage.message; + }); + + it('clears new messages for a party', async () => { + let user = await partyMember.get('/user'); + + await partyMember.post(`/groups/${party._id}/chat/seen`); + + let partyMemberThatHasSeenChat = await partyMember.get('/user'); + + expect(partyMemberThatHasSeenChat.newMessages).to.be.empty; + }); }); }); diff --git a/website/src/models/group.js b/website/src/models/group.js index 7e7e9c102b..246a2f0625 100644 --- a/website/src/models/group.js +++ b/website/src/models/group.js @@ -204,10 +204,17 @@ schema.methods.sendChat = function sendChat (message, user) { // var profileNames = [] // get usernames from regex of @xyz. how to handle space-delimited profile names? // User.update({'profile.name':{$in:profileNames}},lastSeenUpdate,{multi:true}).exec(); } else { - User.update({ - guilds: this._id, - _id: { $ne: user ? user._id : ''}, - }, lastSeenUpdate, {multi: true}).exec(); + let query = {}; + + if (this.type === 'party') { + query['party._id'] = this._id; + } else { + query.guilds = this._id; + } + + query._id = { $ne: user ? user._id : ''}; + + User.update(query, lastSeenUpdate, {multi: true}).exec(); } };