Exemple #1
0
def test_open_room_logs(db, socket):
    game = GameFactory()

    svc = GameService(db, socket)
    svc.execute('open_game', {'game_id': game.id})

    assert len(list(filter(lambda l: l['method'] == 'room_logs', socket.sent_messages))) == 1
Exemple #2
0
def test_confirm_score_finished(db, socket):
    game = GameFactory(stage='finished', result='B+1.5')
    svc = GameService(db, socket, game.black_user)
    svc.user = game.black_user

    with pytest.raises(InvalidStageError):
        svc.execute('confirm_score', {'game_id': game.id, 'result': 'B+1.5'})
Exemple #3
0
def test_resign_counting(db, socket):
    game = GameFactory(stage='counting')
    svc = GameService(db, socket, game.black_user)

    svc.execute('move', {'game_id': game.id, 'move': RESIGN})

    assert game.stage == 'finished'
Exemple #4
0
def test_toggle_marked_dead_finished(db, socket):
    game = GameFactory(stage='finished')
    svc = GameService(db, socket, game.black_user)
    svc.user = game.black_user

    with pytest.raises(InvalidStageError):
        svc.execute('toggle_marked_dead', {'game_id': game.id, 'coord': 30})
Exemple #5
0
def test_demo_tool_triangle(db, socket):
    game = DemoGameFactory()
    svc = GameService(db, socket, game.demo_control)

    svc.execute('demo_tool_triangle', {'game_id': game.id, 'coord': 180})

    assert game.board.current_node.symbols['180'] == SYMBOL_TRIANGLE
Exemple #6
0
def test_resign(db, socket, board):
    game = GameFactory(stage='counting', board=board)
    svc = GameService(db, socket, game.black_user)

    svc.execute('move', {'game_id': game.id, 'move': RESIGN})

    assert game.stage == 'finished'
    assert game.result == 'W+R'
Exemple #7
0
def test_move_finished(db, socket):
    game = GameFactory(stage='finished')
    svc = GameService(db, socket, game.black_user)

    with pytest.raises(InvalidStageError):
        svc.execute('move', {'game_id': game.id, 'move': 30})

    assert game.board.at(30) == EMPTY
Exemple #8
0
def test_move(db, socket):
    game = GameFactory()

    svc = GameService(db, socket, game.black_user)
    svc.execute('move', {'game_id': game.id, 'move': 30})

    assert game.board.at(30) == BLACK
    assert game.board.current == WHITE
Exemple #9
0
def test_resume_from_counting_time(db, socket):
    game = GameFactory(stage='counting')
    svc = GameService(db, socket, game.black_user)

    game.timing.timing_updated_at = datetime.utcnow() - timedelta(minutes=10)
    svc.execute('resume_from_counting', {'game_id': game.id})

    assert (game.timing.timing_updated_at - datetime.utcnow()).total_seconds() < 3
Exemple #10
0
def test_start_delay(db, socket):
    game = GameFactory(timing__start_at=datetime.utcnow() + timedelta(seconds=10))
    svc = GameService(db, socket, game.black_user)

    with pytest.raises(GameHasNotStartedError):
        svc.execute('move', {'game_id': game.id, 'move': 30})

    assert game.board.at(30) == EMPTY
Exemple #11
0
def test_move_current_color(db, socket):
    game = GameFactory()
    svc = GameService(db, socket, game.white_user)

    with pytest.raises(InvalidPlayerError):
        svc.execute('move', {'game_id': game.id, 'move': 30})

    assert game.board.at(30) == EMPTY
Exemple #12
0
def test_open_room(db, socket):
    game = GameFactory()
    user = UserFactory()

    svc = GameService(db, socket, user)
    svc.execute('open_game', {'game_id': game.id})

    assert len(user.rooms) == 1
    assert user.rooms[0].room.game == game
Exemple #13
0
def test_close_game_demo(db, socket):
    game = DemoGameFactory()
    socket.subscribe('game_finished')

    svc = GameService(db, socket, game.demo_owner)
    svc.execute('close_game', {'game_id': game.id})

    assert len(socket.sent_messages) == 1
    assert socket.sent_messages[0]['method'] == 'game_finished'
Exemple #14
0
def test_resume_counting_invalid_player(db, socket):
    user = UserFactory()
    game = GameFactory(stage='counting')
    svc = GameService(db, socket, user)

    with pytest.raises(InvalidPlayerError):
        svc.execute('resume_from_counting', {'game_id': game.id})

    assert game.stage == 'counting'
Exemple #15
0
def test_game_finished_correspondence(db, socket, mails):
    game = GameFactory(is_correspondence=True, black_user__is_online=False, white_user__is_online=False)
    svc = GameService(db, socket, game.black_user)
    svc.execute('move', {'game_id': game.id, 'move': RESIGN})

    assert len(mails) == 2
    assert mails[0]['template'] == 'correspondence/game_finished.txt'
    assert mails[1]['template'] == 'correspondence/game_finished.txt'
    assert {mails[0]['to'], mails[1]['to']} == {game.black_user.email, game.white_user.email}
Exemple #16
0
def test_game_finished_user_status(db, socket):
    game = GameFactory()
    socket.subscribe('user_status')

    svc = GameService(db, socket, game.black_user)
    svc.execute('move', {'game_id': game.id, 'move': RESIGN})

    assert len(socket.sent_messages) == 2
    assert socket.sent_messages[0]['method'] == 'user_status'
    assert socket.sent_messages[1]['method'] == 'user_status'
Exemple #17
0
def test_demo_control(db, socket):
    user = UserFactory()
    game = DemoGameFactory(demo_control=user)

    svc = GameService(db, socket, game.demo_owner)

    with pytest.raises(InvalidPlayerError):
        svc.execute('move', {'game_id': game.id, 'move': 30})

    assert game.board.at(30) == EMPTY
    assert game.board.current == BLACK
Exemple #18
0
def test_move_demo(db, socket):
    game = DemoGameFactory()
    socket.subscribe('game_update/'+str(game.id))

    svc = GameService(db, socket, game.demo_control)
    svc.execute('move', {'game_id': game.id, 'move': 30})

    assert game.board.at(30) == BLACK
    assert game.board.current == WHITE
    assert len(socket.sent_messages) == 1
    assert socket.sent_messages[0]['method'] == 'game_update'
Exemple #19
0
def test_timing(db, socket):
    game = GameFactory(timing__timing_updated_at=datetime.utcnow()-timedelta(seconds=9),
                       timing__system='fischer',
                       timing__overtime=timedelta(seconds=15),
                       timing__black_main=timedelta(seconds=10),
                       timing__black_overtime=timedelta())
    svc = GameService(db, socket, game.black_user)

    svc.execute('move', {'game_id': game.id, 'move': 30})

    # Because of slow CI runners this test cannot be exact.
    assert 16 - game.timing.black_main.total_seconds() < 3
Exemple #20
0
def test_open_game_private_not_player(db, socket):
    game = GameFactory(is_private=True)
    socket.subscribe('game_started')

    random_user = UserFactory()

    svc = GameService(db, socket, random_user)

    with pytest.raises(NotAllowedError) as exinfo:
        svc.execute('open_game', {'game_id': game.id})

    assert 'this game is private' in str(exinfo.value)
Exemple #21
0
def test_demo_set_current_node_invalid(db, socket):
    game = DemoGameFactory()
    game.board.play(1)
    game.board.play(2)
    game.apply_board_change()

    svc = GameService(db, socket, game.demo_control)

    with pytest.raises(ServiceError):
        svc.execute('set_current_node', {'game_id': game.id, 'node_id': 2})

    assert game.board.current_node_id == 1
Exemple #22
0
def test_open_game_demo(db, socket):
    game = DemoGameFactory()
    socket.subscribe('game_started')

    svc = GameService(db, socket, game.demo_owner)
    svc.execute('open_game', {'game_id': game.id})

    assert len(socket.sent_messages) == 4
    assert socket.sent_messages[0]['method'] == 'room_user'
    assert socket.sent_messages[1]['method'] == 'room_logs'
    assert socket.sent_messages[2]['method'] == 'game_data'
    assert socket.sent_messages[3]['method'] == 'game_started'
Exemple #23
0
def test_resume_all_games_cap(db):
    GameFactory(stage='playing',
                timing__system='fischer',
                timing__capped=True,
                timing__main=timedelta(minutes=1),
                timing__black_main=timedelta(minutes=2),
                timing__white_main=timedelta(minutes=3))

    svc = GameService(db)
    svc.resume_all_games()

    timing = db.query(Timing).first()
    assert timing.black_main == timing.main_cap
    assert timing.white_main == timing.main_cap
Exemple #24
0
def test_toggle_marked_dead(db, socket):
    game = GameFactory(stage='counting')
    svc = GameService(db, socket, game.black_user)
    svc.user = game.black_user
    svc.socket.subscribe('game_update/'+str(game.id))

    game.board.play(30)
    game.apply_board_change()

    svc.execute('toggle_marked_dead', {'game_id': game.id, 'coord': 30})

    assert game.board.is_marked_dead(30)
    assert len(svc.socket.sent_messages) == 1
    assert svc.socket.sent_messages[0]['method'] == 'game_update'
Exemple #25
0
def test_open_game_private_as_player(db, socket):
    game = GameFactory(is_private=True)
    socket.subscribe('game_started')

    svc = GameService(db, socket, game.black_user)
    svc.execute('open_game', {'game_id': game.id})

    assert socket.is_subscribed('game_data/'+str(game.id))
    assert socket.is_subscribed('game_update/'+str(game.id))
    assert socket.is_subscribed('game_info/'+str(game.id))
    assert socket.is_subscribed('demo_current_node_id/'+str(game.id))

    assert socket.is_subscribed('room_message/'+str(game.room_id))
    assert socket.is_subscribed('room_user/'+str(game.room_id))
    assert socket.is_subscribed('room_user_left/'+str(game.room_id))
Exemple #26
0
def test_resume_from_counting(db, socket):
    game = GameFactory(stage='counting')
    game.board.play(PASS)
    game.board.play(PASS)
    game.apply_board_change()

    socket.subscribe('game_update/'+str(game.id))
    svc = GameService(db, socket, game.black_user)

    svc.execute('resume_from_counting', {'game_id': game.id})

    assert game.stage == 'playing'
    assert not game.board.both_passed
    assert len(socket.sent_messages) == 1
    assert socket.sent_messages[0]['method'] == 'game_update'
Exemple #27
0
def test_open(db, socket):
    game = GameFactory()
    user = UserFactory()

    svc = GameService(db, socket, user)
    svc.execute('open_game', {'game_id': game.id})

    assert socket.is_subscribed('game_data/'+str(game.id))
    assert socket.is_subscribed('game_update/'+str(game.id))
    assert socket.is_subscribed('game_info/'+str(game.id))
    assert socket.is_subscribed('demo_current_node_id/'+str(game.id))

    assert socket.is_subscribed('room_message/'+str(game.room_id))
    assert socket.is_subscribed('room_user/'+str(game.room_id))
    assert socket.is_subscribed('room_user_left/'+str(game.room_id))
Exemple #28
0
def test_demo_set_current_node(db, socket):
    game = DemoGameFactory()
    game.board.play(1)
    game.board.play(2)
    game.apply_board_change()

    socket.subscribe('demo_current_node_id/'+str(game.id))
    svc = GameService(db, socket, game.demo_control)
    svc.execute('set_current_node', {'game_id': game.id, 'node_id': 1})

    assert game.board.current_node_id == 1
    assert len(socket.sent_messages) == 1
    assert socket.sent_messages[0]['method'] == 'demo_current_node_id'
    assert socket.sent_messages[0]['data']['game_id'] == game.id
    assert socket.sent_messages[0]['data']['node_id'] == 1
Exemple #29
0
def test_timing_lose_on_time(db, socket, board):
    game = GameFactory(timing__timing_updated_at=datetime.utcnow()-timedelta(seconds=11),
                       timing__system='fischer',
                       timing__overtime=timedelta(seconds=15),
                       timing__black_main=timedelta(seconds=10),
                       timing__black_overtime=timedelta(),
                       board=board)

    svc = GameService(db, socket, game.black_user)

    svc.execute('move', {'game_id': game.id, 'move': 30})

    assert game.result == 'W+T'
    assert game.timing.black_main.total_seconds() == 0
    assert game.timing.black_overtime.total_seconds() < 0
Exemple #30
0
def test_check_due_moves(db, socket, board):
    game = GameFactory(timing__timing_updated_at=datetime.utcnow()-timedelta(seconds=11),
                       timing__system='fischer',
                       timing__overtime=timedelta(seconds=15),
                       timing__black_main=timedelta(seconds=10),
                       timing__black_overtime=timedelta(),
                       board=board)

    socket.subscribe('game_finished')

    svc = GameService(db, socket, None)
    svc.check_due_moves()

    assert game.result == 'W+T'
    assert len(socket.sent_messages) == 1
    assert socket.sent_messages[0]['method'] == 'game_finished'