Ejemplo n.º 1
0
def test_room_users(db, socket):
    ru = RoomUserFactory()
    svc = RoomService(db, socket, ru.user)
    data = svc.execute('users', {'room_id': ru.room_id})

    assert data.get('users') is not None
    assert len(data.get('users')) == 1
Ejemplo n.º 2
0
def test_message_not_in_room(db, socket):
    room = RoomFactory()
    ru = RoomUserFactory()

    svc = RoomService(db, socket, ru.user)

    with pytest.raises(ServiceError):
        svc.execute('message', {'room_id': room.id, 'message': 'test'})

    assert len(list(ru.room.recent_messages(db))) == 0
    assert len(list(room.recent_messages(db))) == 0
Ejemplo n.º 3
0
def test_message(db, socket):
    ru = RoomUserFactory()
    svc = RoomService(db, socket, ru.user)
    svc.execute('message', {'room_id': ru.room_id, 'message': 'test'})

    assert db.query(RoomMessage).count() == 1

    msg = db.query(RoomMessage).first()
    assert msg.message == 'test'
    assert msg.user == ru.user
    assert msg.room == ru.room
Ejemplo n.º 4
0
def test_create_default_room(db):
    user = UserFactory()

    svc = RoomService(db)
    svc.create_default_room('test room')

    assert db.query(Room).count() == 1

    room = db.query(Room).first()
    assert room.name == 'test room'
    assert room.is_default
    assert db.query(RoomUser).filter_by(user=user, room=room).count() == 1
Ejemplo n.º 5
0
    def _join_open_rooms_and_games(self):
        for room in Room.open_rooms(self.db, self.user):
            RoomService(self.db, self.socket, self.user).join_room(room.id)

            if room.type == 'game':
                GameService(self.db, self.socket,
                            self.user).subscribe(room.game.id)
Ejemplo n.º 6
0
def test_room_users_offline(db, socket):
    room = RoomFactory()
    ru = RoomUserFactory(room=room, user__is_online=True)
    RoomUserFactory(room=room, user__is_online=False)
    ru2 = RoomUserFactory(room=room, user__is_online=True)

    svc = RoomService(db, socket, ru.user)
    data = svc.execute('users', {'room_id': ru.room_id})

    users = data.get('users')
    user_ids = [u['user_id'] for u in users]

    assert users is not None
    assert len(users) == 2
    assert ru.user_id in user_ids
    assert ru2.user_id in user_ids
Ejemplo n.º 7
0
    def close_game(self, game_id):
        game = self.db.query(Game).filter_by(id=game_id).one()

        self.unsubscribe(game.id)
        RoomService(self.db, self.socket, self.user).leave_room(game.room_id)

        if game.is_demo and game.demo_owner == self.user:
            self.socket.publish('game_finished', game.to_frontend())
Ejemplo n.º 8
0
def test_join_room(db, socket):
    user = UserFactory()
    room = RoomFactory()
    svc = RoomService(db, socket, user)
    socket.subscribe('room_user/' + str(room.id))

    svc.join_room(room.id)

    assert db.query(RoomUser).count() == 1
    ru = db.query(RoomUser).first()
    assert ru.room == room
    assert ru.user == user

    assert len(socket.sent_messages) == 1
    assert socket.sent_messages[0]['method'] == 'room_user'
    assert socket.sent_messages[0]['data']['user_id'] == user.id
    assert socket.sent_messages[0]['data']['user_display'] == user.display
    assert socket.sent_messages[0]['data']['user_rating'] == user.rating
Ejemplo n.º 9
0
    def disconnect(self):
        self._delete_connection()
        self._check_is_online()

        if self.user:
            self.db.query(Automatch).filter((Automatch.user == self.user) & (
                Automatch.preset != 'correspondence')).delete()

        UserService(self.db, self.socket, self.user).publish_status()
        RoomService(self.db, self.socket, self.user).publish_user_rooms()
        GameService(self.db, self.socket, self.user).publish_demos()
Ejemplo n.º 10
0
    def open_game(self, game_id):
        game = self.db.query(Game).filter_by(id=game_id).one()

        if game.is_private and game.black_user != self.user and game.white_user != self.user:
            raise NotAllowedError('this game is private')

        RoomService(self.db, self.socket, self.user).join_room(game.room_id, True)

        self.subscribe(game.id)
        self.socket.send('game_data', game.to_frontend(full=True))

        if game.is_demo and game.demo_owner == self.user:
            self.socket.publish('game_started', game.to_frontend())
Ejemplo n.º 11
0
def test_leave_room(db, socket):
    user = UserFactory()
    room = RoomFactory()
    svc = RoomService(db, socket, user)

    svc.join_room(room.id)
    svc.leave_room(room.id)

    assert db.query(RoomUser).count() == 0
Ejemplo n.º 12
0
def test_close_direct(db, socket):
    user = UserFactory()
    other = UserFactory()

    svc = RoomService(db, socket, user)
    svc.execute('open_direct', {'user_id': other.id})
    svc.execute('close_direct', {'user_id': other.id})

    room = db.query(Room).first()
    assert room.users.count() == 0
Ejemplo n.º 13
0
def test_message_direct_joins_other(db, socket):
    user = UserFactory()
    other = UserFactory()

    svc = RoomService(db, socket, user)
    svc.open_direct(other.id)

    room = db.query(Room).first()
    svc.execute('message', {'room_id': room.id, 'message': 'test'})

    assert room.users.count() == 2
Ejemplo n.º 14
0
def main():
    define_options()
    options.parse_command_line()

    settings.LISTEN_PORT += options.port_offset

    create_db()

    if options.prepare_startup:
        prepare_startup()
    elif options.create_room:
        with session() as db:
            RoomService(db).create_default_room(options.create_room)
    else:
        if settings.DEBUG:
            add_reload_hook(prepare_startup)
        run_app()
Ejemplo n.º 15
0
    def connect(self):
        self.socket.send('connection_data', self._connection_data())

        self.socket.subscribe('game_started')
        self.socket.subscribe('game_finished')
        self.socket.subscribe('user_status')

        if self.user:
            self.socket.subscribe('direct_message/' + str(self.user.id))
            self.socket.subscribe('automatch_status/' + str(self.user.id))
            self.socket.subscribe('challenges/' + str(self.user.id))

        self._join_open_rooms_and_games()
        self._insert_connection()
        self._check_is_online()

        UserService(self.db, self.socket, self.user).publish_status()
        RoomService(self.db, self.socket, self.user).publish_user_rooms()
        GameService(self.db, self.socket, self.user).publish_demos()
Ejemplo n.º 16
0
def test_open_direct(db, socket):
    user = UserFactory()
    other = UserFactory()

    svc = RoomService(db, socket, user)
    direct = svc.execute('open_direct', {'user_id': other.id})

    assert db.query(Room).count() == 1
    room = db.query(Room).first()
    assert room.users.count() == 1
    assert room.users.first().user == user

    svc = RoomService(db, socket, other)
    other_direct = svc.open_direct(user.id)
    assert db.query(Room).count() == 1
    other_room = db.query(Room).first()
    assert other_room == room
    assert room.users.count() == 2
    assert room.users.all()[1].user == other

    assert direct['room'] == other_direct['room']
Ejemplo n.º 17
0
def test_message_direct(db, socket):
    user = UserFactory()
    other = UserFactory()
    svc = RoomService(db, socket, user)
    socket.subscribe('direct_message/' + str(user.id))
    socket.subscribe('direct_message/' + str(other.id))

    svc.open_direct(other.id)
    room = db.query(Room).first()

    svc.execute('message', {'room_id': room.id, 'message': 'test'})

    assert db.query(RoomMessage).count() == 1
    assert len(socket.sent_messages) == 2
    assert socket.sent_messages[0]['method'] == 'direct_message'
    assert socket.sent_messages[0]['data']['room_id'] == room.id
    assert socket.sent_messages[1]['method'] == 'direct_message'
    assert socket.sent_messages[1]['data']['room_id'] == room.id

    direct = DirectRoom.filter_by_users(db, user, other).one()
    assert not direct.user_one_has_unread
    assert direct.user_two_has_unread
Ejemplo n.º 18
0
def test_users_max(db, socket):
    room = RoomFactory()

    svc = RoomService(db, socket, UserFactory())
    svc.join_room(room.id)
    assert room.users_max == 1

    svc = RoomService(db, socket, UserFactory())
    svc.join_room(room.id)
    assert room.users_max == 2

    svc.leave_room(room.id)
    assert room.users_max == 2

    svc = RoomService(db, socket, UserFactory(is_online=False))
    svc.join_room(room.id)
    assert room.users_max == 2