UNPKG

webcom-reach

Version:
298 lines (278 loc) 9.53 kB
/* put in comment some tests becaue of authentication webcom changes import {OPENED, CONNECTED, MODERATOR, NONE, ONGOING} from '../../src/core/util/constants'; import {OPENED, CONNECTED} from '../../src/core/util/constants'; import Reach from '../../src/Reach'; import Room from '../../src/core/Room'; import Invite from '../../src/core/Invite'; import Participant from '../../src/core/Participant'; import * as log from '../util/logger'; import * as config from '../util/config'; import * as namespace from '../util/namespace'; import Message from '../../src/core/Message'; describe('Rooms /', () => { let ref, user; const getRooms = (u, own = true) => { return ref.rooms() .then(rooms => rooms.filter( room => { const owners = u.some(_u => _u.uid === room.owner); return room.status === OPENED && owners === own; }) ); }; const getRoom = (u, own) => { return getRooms(u, own).then(rooms => rooms.pop()); }; const joinRoom = (u, own) => { return getRoom(u, own).then(room => room.join()); }; const invite = (from, to, room, role, text) => { eslint-disable-line max-params return ref.users() .then(users => { const _userTo = users.filter(u => u.uid === to.uid)[0]; log.g('warn', 'Invite a user to a room', [room, from, _userTo]); return room.invite([_userTo], role, text); }); }; const checkInvite = (data, from, to , room, role, text) => { eslint-disable-line max-params log.g('info', 'Invited a user to a room', [data.room].concat(data.invites)); Check room expect(data.room instanceof Room).toBeTruthy(); expect(data.room.uid).toBe(room.uid); Check invites expect(data.invites).toBeAnArrayOf(Invite); expect(data.invites.length).toBe(1); expect(data.invites[0].from).toBe(from.uid); expect(data.invites[0].to).toBe(to.uid); expect(data.invites[0].room).toBe(room.uid); expect(data.invites[0].status).toBe(ONGOING); expect(data.invites[0].topic).toBe(text); const _inviteId = data.invites[0].uid; return new Promise( (resolve, reject) => { ref.base.child(`_/rooms/${room.uid}/participants`).once('value', d => { resolve(d.val()); }, reject); }) .then(participants => { Check participants expect(participants[to.uid]).toBeDefined(); expect(participants[to.uid].role).toBe(role); }) .then(() => new Promise((resolve, reject) => { ref.base.child(`_/invites/${to.uid}/${_inviteId}`).once('value', dataSnapShot => { const values = dataSnapShot.val(); expect(values.from).toBe(from.uid); expect(values.room).toBe(room.uid); expect(values.status).toBe(ONGOING); expect(values.topic).toBe(text); resolve(); }, e => { log.e(e); reject(e); }); })); }; beforeAll(done => { ref = new Reach(global.env.base); done(); }); describe('Unauthenticated Users / ', () => { beforeAll(done => { Ensure we are not authenticated ref.logout().then(done, done); }); it('Should not be able to list rooms', done => { ref.rooms() .then(() => { done.fail('Should not have been able to list rooms'); }) .catch(e => { //expect(e).toBePermissionDenied(); done(e); }); }); }); describe('Authenticated Users / ', () => { beforeAll(done => { user = global.env.createdUsers[0]; ref.login(user.email, user.password, 'Homer').then(() => { done(); }, e => { log.e(e); done(e); }); }); it('Should be able to list rooms', done => { ref.rooms() .then(rooms => { log.g('info', `Listed ${rooms.length} room(s)`, rooms); expect(rooms).toBeDefined(); expect(rooms).toBeAnArrayOf(Room); expect(rooms.length).toBeGreaterThan(0); done(); }).catch(e => { log.d(e); done(e); }); }); it('Should be able to create a room', done => { ref.createRoom('My Test Room') .then(room => { log.g('info', 'Created 1 room', room); expect(room instanceof Room).toBeTruthy(); expect(room.name).toBe('My Test Room'); expect(room.owner).toBe(user.uid); done(); }).catch(e => { log.d(e); done(e); }); }); it('Should be able to join his own room', done => { joinRoom([user]) .then(() => { done(); }).catch(e => { expect(e).not.toBePermissionDenied(); done(e); }); }); it('Should be able to list the participants of a joined room', done => { joinRoom([user]) .then(room => room.participants()) .then(participants => { log.g('info', 'Room participants', participants); expect(participants).toBeAnArrayOf(Participant); const u = participants.filter(participant => participant.uid === user.uid); expect(u.length).toBe(1); expect(u[0].status).toBe(CONNECTED); }) .then(() => { done(); }).catch(e => { expect(e).not.toBePermissionDenied(); done(e); }); }); it('Should be able to send a message within a joined room', done => { joinRoom([user]) .then(room => room.sendMessage('test message')) .then(message => { log.g('info', 'Sent message', [message]); expect(message instanceof Message).toBeTruthy(); expect(message.from).toBe(user.uid); expect(message.text).toBe('test message'); }) .then(() => { done(); }) .catch(e => { log.e(e); expect(e).not.toBePermissionDenied(); done(e); }); }); it('Should not be able to join a room when uninvited', done => { getRooms([global.env.createdUsers[1]]) .then(user1Rooms => { log.g('info', 'User 1\'s rooms', user1Rooms); expect(user1Rooms.length).toBeGreaterThan(0); return user1Rooms.pop().join(); }) .then(() => { done.fail('Should not have been able to join a room uninvited'); }).catch(e => { expect(e).toBePermissionDenied(); done(e); }); }); it('Should not be able to list the participants of a room he has not joined', done => { getRoom([user, global.env.createdUsers[3]], false) .then(room => room.participants()) .then(() => { done .fail('Should not have been able to list the participants of a room he has not joined'); }).catch(e => { expect(e).toBePermissionDenied(); done(e); }); }); it('Should not be able to send a message to a room he has not joined', done => { getRoom([user, global.env.createdUsers[3]], false) .then(room => room.sendMessage('test message')) .then(() => { done.fail('Should not have been able to send a message to a room he has not joined'); }) .catch(e => { expect(e).toBePermissionDenied(); done(e); }); }); it('Should be able to invite a user to a room as the OWNER', done => { const _user = global.env.createdUsers[2]; let _room; getRoom([user]) .then(room => { _room = room; return invite(user, _user, _room, MODERATOR, 'Test invite single user'); }) .then(data => checkInvite(data, user, _user, _room, MODERATOR, 'Test invite single user')) .then(() => {done();}) .catch(e => { log.e(e); done.fail(e.message); }); }); it('Should be ale to invite a list of users', done => { let _room, _users; getRoom([user]) .then(room => { _room = room; log.i(_room); return ref.users(); }) .then(users => { log.i(users); _users = users; return _room.invite(users, NONE, 'Test invite multiple users'); }) .then(data => { log.g('info', 'Invited multiple users', [data.room].concat(data.invites)); expect(data.room instanceof Room).toBeTruthy(); expect(data.room.uid).toBe(_room.uid); expect(data.invites).toBeAnArrayOf(Invite); expect(data.invites.length).toBe(_users.length); return namespace.get(`_/rooms/${_room.uid}/participants`); }) .then(snap => { _users.every(u => expect(snap.hasChild(u.uid)).toBeTruthy()); expect(snap.numChildren()).toBe(_users.length + 1); }) .then(() => {done();}) .catch(e => { log.e(e); done.fail(e.message); }); }); it('Should be able to invite a user to a room as a MODERATOR', done => { const _user = global.env.createdUsers[3]; let _room; getRoom([global.env.createdUsers[2]]) .then(room => { _room = room; return invite(user, _user, _room, NONE, 'Test invite single user as MODERATOR'); }) .then(data => checkInvite(data, user, _user, _room, NONE, 'Test invite single user as MODERATOR')) .then(() => {done();}) .catch(e => { log.e(e); done.fail(e.message); }); }); }); }); */