From ca0aeb809d3e1707bf7b3ddd95c4b84db41508d3 Mon Sep 17 00:00:00 2001 From: Leonardo Ostjen Couto Date: Fri, 18 Mar 2022 13:58:48 -0300 Subject: [PATCH] [FIX] auto-join team channels not honoring user preferences (#24779) * fixed subscriptions w/o notifications pref * added tests * typo * removed unwantend method call * moved some tests to sync methods * finally fixed tests --- server/sdk/types/ITeamService.ts | 1 + server/services/team/service.ts | 1 + tests/end-to-end/api/25-teams.js | 97 ++++++++++++++++++++++++++++++++ 3 files changed, 99 insertions(+) diff --git a/server/sdk/types/ITeamService.ts b/server/sdk/types/ITeamService.ts index 79f1151d03b5..805544e70f57 100644 --- a/server/sdk/types/ITeamService.ts +++ b/server/sdk/types/ITeamService.ts @@ -26,6 +26,7 @@ export interface IUserInfo { username?: string; name: string; status: string; + settings?: Record; } export interface ITeamMemberInfo { diff --git a/server/services/team/service.ts b/server/services/team/service.ts index 49295aaa7640..37dc3475d839 100644 --- a/server/services/team/service.ts +++ b/server/services/team/service.ts @@ -669,6 +669,7 @@ export class TeamService extends ServiceClassInternal implements ITeamService { username: user.username, name: user.name, status: user.status, + settings: user.settings, }, roles: record.roles, createdBy: { diff --git a/tests/end-to-end/api/25-teams.js b/tests/end-to-end/api/25-teams.js index 50ad66ae6404..83129073c185 100644 --- a/tests/end-to-end/api/25-teams.js +++ b/tests/end-to-end/api/25-teams.js @@ -1461,6 +1461,8 @@ describe('[Teams]', () => { describe('/teams.update', () => { let testTeam; let testTeam2; + let testTeam3; + before('Create test team', (done) => { const teamName = `test-team-name${Date.now()}`; request @@ -1491,6 +1493,21 @@ describe('[Teams]', () => { }); }); + before('Create test team', (done) => { + const teamName3 = `test-team-name${Date.now()}`; + request + .post(api('teams.create')) + .set(credentials) + .send({ + name: teamName3, + type: 0, + }) + .end((err, res) => { + testTeam3 = res.body.team; + done(); + }); + }); + it('should update team name', async () => { const testTeamName = `test-team-name-changed${Date.now()}`; const updateResponse = await request @@ -1534,6 +1551,86 @@ describe('[Teams]', () => { expect(teamInfo).to.have.property('type', 1); }); + describe('should update team room to default and invite users with the right notification preferences', () => { + let userWithPrefs; + let userCredentials; + let createdRoom; + + before(async () => { + userWithPrefs = await createUser(); + userCredentials = await login(userWithPrefs.username, password); + + createdRoom = await request + .post(api('channels.create')) + .set(credentials) + .send({ + name: `${Date.now()}-testTeam3`, + }); + + await request + .post(api('teams.addRooms')) + .set(credentials) + .send({ + rooms: [createdRoom.body.channel._id], + teamId: testTeam3._id, + }); + }); + + it('should update user prefs', async () => { + await request + .post(methodCall('saveUserPreferences')) + .set(userCredentials) + .send({ + message: JSON.stringify({ + method: 'saveUserPreferences', + params: [{ emailNotificationMode: 'nothing' }], + }), + }) + .expect(200); + }); + + it('should add user with prefs to team', (done) => { + request + .post(api('teams.addMembers')) + .set(credentials) + .send({ + teamName: testTeam3.name, + members: [ + { + userId: userWithPrefs._id, + roles: ['member'], + }, + ], + }) + .end(done); + }); + + it('should update team channel to auto-join', async () => { + const response = await request.post(api('teams.updateRoom')).set(credentials).send({ + roomId: createdRoom.body.channel._id, + isDefault: true, + }); + expect(response.body).to.have.property('success', true); + }); + + it('should return the user subscription with the right notification preferences', (done) => { + request + .get(api('subscriptions.getOne')) + .set(userCredentials) + .query({ + roomId: createdRoom.body.channel._id, + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('subscription').and.to.be.an('object'); + expect(res.body).to.have.nested.property('subscription.emailNotifications').and.to.be.equal('nothing'); + }) + .end(done); + }); + }); + it('should update team name and type at once', async () => { const testTeamName = `test-team-name-changed${Date.now()}`; const updateResponse = await request