Merge branch 'fix-ci-yaml-container-scanning' into 'develop'
[gitter.git] / modules / rooms / test / room-context-service-test.js
blob2ebc885e9873bbccaab40303191c819b1c5ae041
1 'use strict';
3 var proxyquireNoCallThru = require('proxyquire').noCallThru();
4 var assert = require('assert');
5 var mockito = require('jsmockito').JsMockito;
6 var Promise = require('bluebird');
8 var fixtureLoader = require('gitter-web-test-utils/lib/test-fixtures');
10 describe('room-context-service', function() {
11   var createPolicyForRoom, createPolicyForOneToOne, roomContextService, access;
13   var fixture = fixtureLoader.setup({
14     user1: {},
15     user2: {},
16     troupe1: {
17       users: ['user1', 'user2']
18     },
19     troupe2: {}
20   });
22   beforeEach(function() {
23     createPolicyForRoom = mockito.mockFunction();
24     createPolicyForOneToOne = mockito.mockFunction();
25     access = false;
27     mockito
28       .when(createPolicyForRoom)()
29       .then(function() {
30         return Promise.resolve({
31           canRead: function() {
32             return Promise.resolve(access);
33           }
34         });
35       });
37     mockito
38       .when(createPolicyForOneToOne)()
39       .then(function() {
40         return Promise.resolve({
41           canRead: function() {
42             return Promise.resolve(access);
43           },
44           canJoin: function() {
45             return Promise.resolve(access);
46           }
47         });
48       });
50     roomContextService = proxyquireNoCallThru('../lib/room-context-service', {
51       'gitter-web-permissions/lib/policy-factory': {
52         createPolicyForRoom: createPolicyForRoom,
53         createPolicyForOneToOne: createPolicyForOneToOne
54       }
55     });
56   });
58   it('should generate context for non-members', function() {
59     access = true;
60     return roomContextService
61       .findContextForUri(fixture.user1, fixture.troupe2.uri, {})
62       .then(function(roomContext) {
63         assert(!roomContext.roomMember);
64       });
65   });
67   it('should generate context for members', function() {
68     access = true;
69     return roomContextService
70       .findContextForUri(fixture.user1, fixture.troupe1.uri, {})
71       .then(function(roomContext) {
72         assert(roomContext.roomMember);
73       });
74   });
76   it('should throw for users without access to the room', function() {
77     access = false;
79     return roomContextService
80       .findContextForUri(fixture.user1, fixture.troupe2.uri, {})
81       .then(function(/*roomContext*/) {})
82       .catch(function(err) {
83         assert.strictEqual(err.status, 404);
84       });
85   });
87   it('should generate context for 1:1', function() {
88     access = true;
90     return roomContextService
91       .findContextForUri(fixture.user1, fixture.user2.username, {})
92       .then(function(roomContext) {
93         assert(roomContext.roomMember);
94       });
95   });
97   it('should throw a redirect for 1:1 same user', function() {
98     return roomContextService
99       .findContextForUri(fixture.user1, fixture.user1.username, {})
100       .then(function(roomContext) {
101         assert.strictEqual(roomContext.ownUrl, true);
102         assert.strictEqual(roomContext.uri, fixture.user1.username);
103       });
104   });
106   it('should be logged in to see a 1:1', function() {
107     return roomContextService.findContextForUri(null, fixture.user1.username, {}).then(
108       function(/*roomContext*/) {
109         assert.ok(false);
110       },
111       function(err) {
112         assert.strictEqual(err.status, 401);
113       }
114     );
115   });