Merge tag '21.54.0' into develop
[gitter.git] / test / request-web-tests / room-tests.js
blobf8a8a8702dfad835828ed29c71747fb96b1e9663
1 'use strict';
3 process.env.DISABLE_MATRIX_BRIDGE = '1';
4 process.env.DISABLE_API_LISTEN = '1';
5 process.env.DISABLE_API_WEB_LISTEN = '1';
7 const fixtureLoader = require('gitter-web-test-utils/lib/test-fixtures');
8 const fixtureUtils = require('gitter-web-test-utils/lib/fixture-utils');
9 const assert = require('assert');
10 const request = require('supertest');
11 const env = require('gitter-web-env');
12 const config = env.config;
13 const ensureMatrixFixtures = require('./utils/ensure-matrix-fixtures');
14 const registerTestSynapseUser = require('./utils/register-test-synapse-user');
16 const installBridge = require('gitter-web-matrix-bridge');
17 const matrixBridge = require('gitter-web-matrix-bridge/lib/matrix-bridge');
18 const GitterUtils = require('gitter-web-matrix-bridge/lib/gitter-utils');
19 const getMxidForGitterUser = require('gitter-web-matrix-bridge/lib/get-mxid-for-gitter-user');
21 const app = require('../../server/web');
23 const serverName = config.get('matrix:bridge:serverName');
24 const bridgePortFromConfig = config.get('matrix:bridge:applicationServicePort');
26 // Finds the regex in the text and creates an excerpt so the test failure message can more easily be understood
27 function findInText(text, regex, excerptBufferLength = 16) {
28   const result = text.match(regex);
30   if (result) {
31     return {
32       excerpt: text.substring(
33         Math.max(0, result.index - excerptBufferLength),
34         Math.min(result.index + result[0].length + excerptBufferLength, text.length - 1)
35       )
36     };
37   }
40 describe('Rooms', function() {
41   const fixture = fixtureLoader.setup({
42     user1: {
43       accessToken: 'web-internal'
44     },
45     user2: {
46       accessToken: 'web-internal'
47     },
48     troupeUnjoined1: {}
49   });
51   it(`Ensure there aren't unserialized documents handed off to the frontend`, async () => {
52     const result = await request(app)
53       .get(`/${fixture.troupeUnjoined1.uri}`)
54       .set('Authorization', `Bearer ${fixture.user1.accessToken}`)
55       .expect(200);
57     const idFindResults = findInText(result.text, /\b_id\b/m);
58     assert(
59       !idFindResults,
60       `response should not include unserialized \`_id\` property (expecting \`id\`): ${idFindResults &&
61         idFindResults.excerpt}`
62     );
64     const versionFindResults = findInText(result.text, /\b__v\b/m);
65     assert(
66       !versionFindResults,
67       `response should not include unserialized \`__v\` property (expecting \`v\` or nothing): ${versionFindResults &&
68         versionFindResults.excerpt}`
69     );
70   });
72   describe('Matrix DMs', () => {
73     let gitterUtils;
74     let stopBridge;
75     before(async () => {
76       await ensureMatrixFixtures();
78       stopBridge = await installBridge(bridgePortFromConfig + 1);
80       gitterUtils = new GitterUtils(matrixBridge);
81     });
83     after(async () => {
84       await stopBridge();
85     });
87     it(`Creates Matrix DM when visiting URL`, async () => {
88       const localPart = fixtureUtils.generateUsername().slice(1);
89       const mxid = `@${localPart}:${serverName}`;
90       await registerTestSynapseUser(localPart);
92       await request(app)
93         .get(`/matrix/${fixture.user1.id}/${mxid}`)
94         .set('Authorization', `Bearer ${fixture.user1.accessToken}`)
95         .expect(200);
96     });
98     it(`able to look at DM room for youself even when you're not joined`, async () => {
99       const mxid = `@${fixtureUtils.generateUsername().slice(1)}:${serverName}`;
101       const gitterRoom = await gitterUtils.createGitterDmRoomByGitterUserIdAndOtherPersonMxid(
102         fixture.user1.id,
103         mxid
104       );
106       await request(app)
107         .get(`/${gitterRoom.uri}`)
108         .set('Authorization', `Bearer ${fixture.user1.accessToken}`)
109         .expect(200);
110     });
112     it(`DM room is private`, async () => {
113       const mxid = `@${fixtureUtils.generateUsername().slice(1)}:${serverName}`;
115       const gitterRoom = await gitterUtils.createGitterDmRoomByGitterUserIdAndOtherPersonMxid(
116         fixture.user1.id,
117         mxid
118       );
120       await request(app)
121         .get(`/${gitterRoom.uri}`)
122         // User2 trying to view user1 room is not allowed
123         .set('Authorization', `Bearer ${fixture.user2.accessToken}`)
124         .expect(404);
125     });
127     it(`another user can't start a DM for another user by visiting their URL`, async () => {
128       const mxid = `@${fixtureUtils.generateUsername().slice(1)}:${serverName}`;
130       await request(app)
131         // DM between user1 and mxid
132         .get(`/matrix/${fixture.user1.id}/${mxid}`)
133         // Accessing from user2
134         .set('Authorization', `Bearer ${fixture.user2.accessToken}`)
135         .expect(403);
136     });
138     it(`can not start DM with the MXID for a Gitter user`, async () => {
139       const otherGitterUserMxid = getMxidForGitterUser(fixture.user2);
141       await request(app)
142         .get(`/matrix/${fixture.user1.id}/${otherGitterUserMxid}`)
143         .set('Authorization', `Bearer ${fixture.user1.accessToken}`)
144         .expect(404);
145     });
147     it(`Non-existant MXID shows a 404`, async () => {
148       const mxid = `@${fixtureUtils.generateUsername().slice(1)}:does-not-exist`;
150       await request(app)
151         .get(`/matrix/${fixture.user1.id}/${mxid}`)
152         .set('Authorization', `Bearer ${fixture.user1.accessToken}`)
153         .expect(404);
154     });
155   });