예제 #1
0
async def test_add_player_to_team__max_member_number_excceded():
    original_val = constants.MAX_TEAM_MEMBERS
    constants.MAX_TEAM_MEMBERS = 1

    users_data = [{
        "username": "******",
        "password": "******",
    }, {
        "username": "******",
        "password": "******",
    }]

    team_data = {
        "name": "team 1",
    }

    db_team = Team(**team_data)
    db_user1 = User(**users_data[0])
    db_user2 = User(**users_data[1])

    db_team.players.append(db_user1)

    with dal.get_session_ctx() as session:
        session.add(db_team)
        session.add(db_user1)
        session.add(db_user2)

        session.commit()

        session.refresh(db_team)
        session.refresh(db_user1)
        session.refresh(db_user2)

    async with AsyncClient(app=app, base_url=BASE_URL) as client:
        response = await client.patch(
            f"/teams/{db_team.id}/add-player/{db_user2.id}")

    assert response.status_code == 403
    assert response.json() == {
        "detail": "The team already has the maximum number of members in it"
    }

    with dal.get_session_ctx() as session:
        session.delete(db_team)
        session.delete(db_user1)
        session.delete(db_user2)

        session.commit()

    constants.MAX_TEAM_MEMBERS = original_val
예제 #2
0
async def test_add_player_to_team__success():
    users_data = [{
        "username": "******",
        "password": "******",
    }, {
        "username": "******",
        "password": "******",
    }]

    team_data = {
        "name": "team 1",
    }

    db_team = Team(**team_data)
    db_user1 = User(**users_data[0])
    db_user2 = User(**users_data[1])

    db_team.players.append(db_user1)

    with dal.get_session_ctx() as session:
        session.add(db_team)
        session.add(db_user1)
        session.add(db_user2)

        session.commit()

        session.refresh(db_team)
        session.refresh(db_user1)
        session.refresh(db_user2)

    async with AsyncClient(app=app, base_url=BASE_URL) as client:
        response = await client.patch(
            f"/teams/{db_team.id}/add-player/{db_user2.id}")

    with dal.get_session_ctx() as session:
        session.add(db_team)
        session.refresh(db_team)

        team_details = team_schemas.Details.from_orm(db_team)

    assert response.status_code == 200
    assert response.json() == team_details

    with dal.get_session_ctx() as session:
        session.delete(db_team)
        session.delete(db_user1)
        session.delete(db_user2)

        session.commit()
예제 #3
0
async def test_get_user__success():
    app.dependency_overrides[validators.validate_admin] = lambda: None

    user_data = {
        "username": "******",
        "password": "******",
    }

    db_user = User(**user_data)

    with dal.get_session_ctx() as session:
        session.add(db_user)
        session.commit()
        session.refresh(db_user)

    async with AsyncClient(app=app, base_url=BASE_URL) as client:
        response = await client.get(f"/users/{db_user.id}")

    assert response.status_code == 200
    assert response.json() == user_schemas.Details.from_orm(db_user)

    with dal.get_session_ctx() as session:
        session.delete(db_user)
        session.commit()

    app.dependency_overrides = {}
예제 #4
0
async def test_create_user__already_exists():
    app.dependency_overrides[validators.validate_admin] = lambda: None

    user_data = {
        "username": "******",
        "password": "******",
    }

    db_user = User(**user_data)

    with dal.get_session_ctx() as session:
        session.add(db_user)
        session.commit()
        session.refresh(db_user)

    async with AsyncClient(app=app, base_url=BASE_URL) as client:
        response = await client.post("/users/", json=user_data)

    assert response.status_code == 409
    assert response.json() == {
        "detail": f"The username: { user_data['username'] } is already taken"
    }

    with dal.get_session_ctx() as session:
        session.delete(db_user)
        session.commit()

    app.dependency_overrides = {}
예제 #5
0
def accept_invite(
    session: Session,
    db_player: User,
    db_team: Team,
) -> User:
    """ add player to team """
    db_player.team = db_team
    db_player.team_invites.remove(db_team)

    session.commit()
예제 #6
0
def quit_team(
    session: Session,
    db_player: User,
) -> User:
    """ Remove player from team """
    db_player.team = None

    session.commit()
    session.refresh(db_player)

    return db_player
예제 #7
0
def lead_team(
    session: Session,
    db_player: User,
    db_team: Team,
) -> User:
    """ Create team and assign player as the captain """

    db_player.team = db_team

    session.commit()
    session.refresh(db_player)

    return db_player
예제 #8
0
async def test_add_player_to_team__wrong_user_type():
    user_data = {
        "username": "******",
        "password": "******",
    }

    team_data = {
        "name": "team 1",
    }

    db_team = Team(**team_data)
    db_user = User(**user_data)

    db_user.user_type = enums.UserType.ADMIN

    with dal.get_session_ctx() as session:
        session.add(db_team)
        session.add(db_user)

        session.commit()

        session.refresh(db_team)
        session.refresh(db_user)

    async with AsyncClient(app=app, base_url=BASE_URL) as client:
        response = await client.patch(
            f"/teams/{db_team.id}/add-player/{db_user.id}")

    assert response.status_code == 403
    assert response.json() == {
        "detail":
        f"Only players can be part of teams. { db_user } has user_type: { db_user.user_type }"
    }

    with dal.get_session_ctx() as session:
        session.delete(db_team)
        session.delete(db_user)

        session.commit()
예제 #9
0
async def test_add_player_to_team__player_already_in_team():
    user_data = {
        "username": "******",
        "password": "******",
    }

    teams_data = [
        {
            "name": "team 1",
        },
        {
            "name": "team 2",
        },
    ]

    db_team1 = Team(**teams_data[0])
    db_team2 = Team(**teams_data[1])
    db_user = User(**user_data)

    db_team1.players.append(db_user)

    with dal.get_session_ctx() as session:
        session.add(db_team1)
        session.add(db_team2)
        session.add(db_user)

        session.commit()

        session.refresh(db_team1)
        session.refresh(db_team2)
        session.refresh(db_user)

    async with AsyncClient(app=app, base_url=BASE_URL) as client:
        response = await client.patch(
            f"/teams/{db_team1.id}/add-player/{db_user.id}")

    assert response.status_code == 403
    assert response.json() == {
        "detail": f"Player { db_user } is already part of a team"
    }

    with dal.get_session_ctx() as session:
        session.delete(db_team1)
        session.delete(db_team2)
        session.delete(db_user)

        session.commit()
예제 #10
0
async def test_remove_player_to_team__player_not_part_of_the_team():
    team_data = {
        "name": "team 1",
    }

    user_data = {
        "username": "******",
        "password": "******",
    }

    db_team = Team(**team_data)
    db_user = User(**user_data)

    with dal.get_session_ctx() as session:
        session.add(db_team)
        session.add(db_user)

        session.commit()

        session.refresh(db_team)
        session.refresh(db_user)

    async with AsyncClient(app=app, base_url=BASE_URL) as client:
        response = await client.patch(
            f"/teams/{db_team.id}/remove-player/{db_user.id}")

    assert response.status_code == 403
    assert response.json() == {
        "detail": f"Player { db_user } is not part of this team"
    }

    with dal.get_session_ctx() as session:
        session.delete(db_team)
        session.delete(db_user)

        session.commit()