diff --git a/test/api/v3/integration/chat/GET-chat.test.js b/test/api/v3/integration/chat/GET-chat.test.js index 34f4316dad..47c11a870f 100644 --- a/test/api/v3/integration/chat/GET-chat.test.js +++ b/test/api/v3/integration/chat/GET-chat.test.js @@ -3,6 +3,7 @@ import { createAndPopulateGroup, translate as t, } from '../../../../helpers/api-integration/v3'; +import { model as Group } from '../../../../../website/server/models/group'; describe('GET /groups/:groupId/chat', () => { let user; @@ -37,4 +38,34 @@ describe('GET /groups/:groupId/chat', () => { }); }); }); + + context('public Guild', () => { + let group; + before(async () => { + ({ group } = await createAndPopulateGroup({ + groupDetails: { + name: 'test group', + type: 'guild', + privacy: 'private', + }, + members: 1, + upgradeToGroupPlan: true, + chat: [ + 'Hello', + 'Welcome to the Guild', + ], + })); + + // Creation API is shut down, we need to simulate an extant public group + await Group.updateOne({ _id: group._id }, { $set: { privacy: 'public' }, $unset: { 'purchased.plan': 1 } }).exec(); + }); + + it('returns error if user attempts to fetch a sunset Guild', async () => { + await expect(user.get(`/groups/${group._id}/chat`)).to.eventually.be.rejected.and.eql({ + code: 400, + error: 'BadRequest', + message: t('featureRetired'), + }); + }); + }); }); diff --git a/test/api/v3/integration/chat/POST-chat.like.test.js b/test/api/v3/integration/chat/POST-chat.like.test.js index e605958be8..6bbe3c0415 100644 --- a/test/api/v3/integration/chat/POST-chat.like.test.js +++ b/test/api/v3/integration/chat/POST-chat.like.test.js @@ -4,6 +4,7 @@ import { createAndPopulateGroup, translate as t, } from '../../../../helpers/api-integration/v3'; +import { model as Group } from '../../../../../website/server/models/group'; describe('POST /chat/:chatId/like', () => { let user; @@ -111,4 +112,18 @@ describe('POST /chat/:chatId/like', () => { message: t('groupNotFound'), }); }); + + it('does not like a message that belongs to a sunset public group', async () => { + const message = await anotherUser.post(`/groups/${groupWithChat._id}/chat`, { message: testMessage }); + + // Creation API is shut down, we need to simulate an extant public group + await Group.updateOne({ _id: groupWithChat._id }, { $set: { privacy: 'public' }, $unset: { 'purchased.plan': 1 } }).exec(); + + await expect(user.post(`/groups/${groupWithChat._id}/chat/${message.message.id}/like`)) + .to.eventually.be.rejected.and.eql({ + code: 400, + error: 'BadRequest', + message: t('featureRetired'), + }); + }); }); diff --git a/website/server/controllers/api-v3/chat.js b/website/server/controllers/api-v3/chat.js index cef8f8c185..e0a0aa381f 100644 --- a/website/server/controllers/api-v3/chat.js +++ b/website/server/controllers/api-v3/chat.js @@ -82,8 +82,11 @@ api.getChat = { if (validationErrors) throw validationErrors; const { groupId } = req.params; - const group = await Group.getGroup({ user, groupId, fields: 'chat' }); + const group = await Group.getGroup({ user, groupId, fields: 'chat privacy' }); if (!group) throw new NotFound(res.t('groupNotFound')); + if (group.privacy === 'public') { + throw new BadRequest(res.t('featureRetired')); + } const groupChat = await Group.toJSONCleanChat(group, user); res.respond(200, groupChat.chat); @@ -294,6 +297,9 @@ api.likeChat = { const group = await Group.getGroup({ user, groupId }); if (!group) throw new NotFound(res.t('groupNotFound')); + if (group.privacy === 'public') { + throw new BadRequest(res.t('featureRetired')); + } const message = await Chat.findOne({ _id: req.params.chatId, groupId: group._id }).exec(); if (!message) throw new NotFound(res.t('messageGroupChatNotFound'));