Esempio n. 1
0
File: teams.py Progetto: JDIS/flaggr
def send_team_request(current_participant: Participant):
    """Request to join a team."""
    body = flask_rebar.get_validated_body()
    team_id = body["team_id"]

    team_member = current_participant.get_team()

    if team_member is not None:
        raise errors.UnprocessableEntity(
            "You cannot request to join a team if you already are in a team.")

    team = Team.query.filter_by(id=team_id).first()

    if team is None:
        raise errors.UnprocessableEntity("The team doesn't exist.")

    # FIXMEFUTURE: If team is not already full
    # (on a pas de configuration pour le nombre de membres d'une équipe for now)
    team_request = TeamRequest.query.filter_by(
        participant_id=current_participant.id).first()

    if team_request is not None:
        raise errors.UnprocessableEntity(
            "You already have requested to join a team.")

    team_request = TeamRequest(team_id=team_id,
                               participant_id=current_participant.id)

    DB.session.add(team_request)
    DB.session.commit()
    return ""
Esempio n. 2
0
 def test_should_return_current_participant_team_request(
         self, team_request_mock: MagicMock):
     a_team_request = TeamRequest(id=0,
                                  participant_id=1,
                                  team_id=2,
                                  requested_at=datetime.now())
     result = team_request_mock.query.filter_by.return_value.first.return_value = a_team_request
     assert result == a_team_request
Esempio n. 3
0
class TestAcceptTeamRequest:
    A_TEAM_REQUEST = TeamRequest(team_id=A_TEAM.members[0].team_id,
                                 participant_id=A_PARTICIPANT_WITHOUT_TEAM.id)
    A_TEAM_MEMBER = TeamMember(team_id=A_TEAM.members[0].team_id,
                               participant_id=A_PARTICIPANT_WITHOUT_TEAM.id)
    REQUEST_BODY = {"participant_id": A_TEAM_REQUEST.participant_id}

    @fixture(autouse=True)
    def _rebar_mock(self, rebar_mock: MagicMock):
        rebar_mock.get_validated_body.return_value = self.REQUEST_BODY

        yield rebar_mock

    @fixture(autouse=True)
    def _team_member_mock(self, team_member_mock):
        team_member_mock.side_effect = lambda *args, **kwargs: TeamMember(
            *args, **kwargs)

    def test_given_a_user_without_team_should_raise_unauthorized_error(
            self, team_member_mock: MagicMock):
        team_member_mock.query.filter_by.return_value.first.return_value = None

        with raises(errors.Unauthorized):
            teams.accept_team_request(A_PARTICIPANT)

    def test_given_a_non_captain_should_raise_unauthorized_error(
            self, team_member_mock: MagicMock):
        team_member_mock.query.filter_by.return_value.first.return_value = A_TEAM.members[
            1]

        with raises(errors.Unauthorized):
            teams.accept_team_request(A_PARTICIPANT)

    def test_given_an_invalid_user_id_should_raise_unprocessable_entity_error(
            self, team_member_mock: MagicMock, team_request_mock: MagicMock):
        team_member_mock.query.filter_by.return_value.first.return_value = A_TEAM.members[
            0]
        team_request_mock.query.filter_by.return_value.first.return_value = None

        with raises(errors.UnprocessableEntity):
            teams.accept_team_request(A_PARTICIPANT)

    def test_should_delete_team_request_and_add_user_to_team(
            self, db_mock: MagicMock, team_member_mock: MagicMock,
            team_request_mock: MagicMock):
        team_member_mock.query.filter_by.return_value.first.return_value = A_TEAM.members[
            0]
        team_request_mock.query.filter_by.return_value.first.return_value = self.A_TEAM_REQUEST

        teams.accept_team_request(A_PARTICIPANT)

        db_mock.session.delete.assert_called_with(
            TeamRequest(participant_id=self.A_TEAM_REQUEST.participant_id,
                        team_id=self.A_TEAM_REQUEST.team_id))
        db_mock.session.add.assert_called_with(
            TeamMember(participant_id=self.A_TEAM_MEMBER.participant_id,
                       team_id=self.A_TEAM_MEMBER.team_id))
        db_mock.session.commit.assert_called_once()
Esempio n. 4
0
    def test_should_delete_current_team_request(self, db_mock: MagicMock,
                                                team_request_mock: MagicMock):
        team_request_mock.query.filter_by.return_value.first.return_value = self.A_TEAM_REQUEST

        teams.remove_own_team_request(A_PARTICIPANT)

        db_mock.session.delete.assert_called_with(
            TeamRequest(team_id=self.A_TEAM_REQUEST.team_id,
                        participant_id=self.A_TEAM_REQUEST.participant_id))
        db_mock.session.commit.assert_called_once()
Esempio n. 5
0
    def test_should_send_team_request(self, db_mock: MagicMock,
                                      team_request_mock: MagicMock):
        team_request_mock.query.filter_by.return_value.first.return_value = None

        teams.send_team_request(A_PARTICIPANT)

        db_mock.session.add.assert_called_with(
            TeamRequest(participant_id=A_PARTICIPANT.id,
                        team_id=self.A_TEAM_REQUEST.team_id))
        db_mock.session.commit.assert_called_once()
Esempio n. 6
0
class TestSendTeamRequest:
    A_TEAM_REQUEST = TeamRequest(participant_id=A_PARTICIPANT_WITHOUT_TEAM.id,
                                 team_id=A_TEAM.id)
    REQUEST_BODY = {"team_id": A_TEAM_REQUEST.team_id}

    @fixture(autouse=True)
    def _team_mock(self, team_mock: MagicMock):
        team_mock.query.filter_by.return_value.first.return_value = A_TEAM

        yield team_mock

    @fixture(autouse=True)
    def _rebar_mock(self, rebar_mock: MagicMock):
        rebar_mock.get_validated_body.return_value = self.REQUEST_BODY
        yield rebar_mock

    @fixture(autouse=True)
    def _team_request_mock(self, team_request_mock: MagicMock):
        team_request_mock.side_effect = lambda *args, **kwargs: TeamRequest(
            *args, **kwargs)

    def test_given_a_user_already_in_a_team_should_raise_unprocessable_entity_error(
            self, current_participant_mock: MagicMock):
        current_participant_mock.get_team.return_value = A_TEAM

        with raises(errors.UnprocessableEntity):
            teams.send_team_request(A_PARTICIPANT)

    def test_given_an_non_existent_team_id_should_raise_unprocessable_entity_error(
            self, team_mock: MagicMock):
        team_mock.query.filter_by.return_value.first.return_value = None

        with raises(errors.UnprocessableEntity):
            teams.send_team_request(A_PARTICIPANT)

    def test_given_a_user_with_team_request_should_raise_unprocessable_entity_error(
            self, team_request_mock: MagicMock):
        team_request_mock.query.filter_by.return_value.first.return_value \
            = {"user_id": A_USER_WITHOUT_TEAM.id, "team_id": A_TEAM.id}

        with raises(errors.UnprocessableEntity):
            teams.send_team_request(A_PARTICIPANT)

    def test_should_send_team_request(self, db_mock: MagicMock,
                                      team_request_mock: MagicMock):
        team_request_mock.query.filter_by.return_value.first.return_value = None

        teams.send_team_request(A_PARTICIPANT)

        db_mock.session.add.assert_called_with(
            TeamRequest(participant_id=A_PARTICIPANT.id,
                        team_id=self.A_TEAM_REQUEST.team_id))
        db_mock.session.commit.assert_called_once()
Esempio n. 7
0
    def test_should_delete_team_request(self, db_mock: MagicMock,
                                        team_member_mock: MagicMock,
                                        team_request_mock: MagicMock):
        team_member_mock.query.filter_by.return_value.first.return_value = TeamMember(
            participant_id=A_PARTICIPANT.id, captain=True)
        team_request_mock.query.filter_by.return_value.first.return_value = self.A_TEAM_REQUEST

        teams.decline_team_request(A_PARTICIPANT)

        db_mock.session.delete.assert_called_with(
            TeamRequest(participant_id=self.A_TEAM_REQUEST.participant_id,
                        team_id=self.A_TEAM_REQUEST.team_id))
        db_mock.session.commit.assert_called_once()
Esempio n. 8
0
class TestDeclineTeamRequest:
    A_TEAM_REQUEST = TeamRequest(team_id=A_TEAM.members[0].team_id,
                                 participant_id=A_PARTICIPANT_WITHOUT_TEAM.id)
    REQUEST_BODY = {"participant_id": A_TEAM_REQUEST.participant_id}

    @fixture(autouse=True)
    def _rebar_mock(self, rebar_mock: MagicMock):
        rebar_mock.get_validated_body.return_value = self.REQUEST_BODY

        yield rebar_mock

    def test_given_a_user_without_team_should_raise_unauthorized_error(
            self, team_member_mock: MagicMock):
        team_member_mock.query.filter_by.return_value.first.return_value = None

        with raises(errors.Unauthorized):
            teams.decline_team_request(A_PARTICIPANT)

    def test_given_a_non_captain_should_raise_unauthorized_error(
            self, team_member_mock: MagicMock):
        team_member_mock.query.filter_by.return_value.first.return_value = \
            TeamMember(participant_id=A_PARTICIPANT_NOT_CAPTAIN.id, captain=False)

        with raises(errors.Unauthorized):
            teams.decline_team_request(A_PARTICIPANT)

    def test_given_an_invalid_user_id_should_raise_unprocessable_entity_error(
            self, team_member_mock: MagicMock, team_request_mock: MagicMock):
        team_member_mock.query.filter_by.return_value.first.return_value = TeamMember(
            participant_id=A_PARTICIPANT.id, captain=True)
        team_request_mock.query.filter_by.return_value.first.return_value = None

        with raises(errors.UnprocessableEntity):
            teams.decline_team_request(A_PARTICIPANT)

    def test_should_delete_team_request(self, db_mock: MagicMock,
                                        team_member_mock: MagicMock,
                                        team_request_mock: MagicMock):
        team_member_mock.query.filter_by.return_value.first.return_value = TeamMember(
            participant_id=A_PARTICIPANT.id, captain=True)
        team_request_mock.query.filter_by.return_value.first.return_value = self.A_TEAM_REQUEST

        teams.decline_team_request(A_PARTICIPANT)

        db_mock.session.delete.assert_called_with(
            TeamRequest(participant_id=self.A_TEAM_REQUEST.participant_id,
                        team_id=self.A_TEAM_REQUEST.team_id))
        db_mock.session.commit.assert_called_once()
Esempio n. 9
0
    def test_should_delete_team_request_and_add_user_to_team(
            self, db_mock: MagicMock, team_member_mock: MagicMock,
            team_request_mock: MagicMock):
        team_member_mock.query.filter_by.return_value.first.return_value = A_TEAM.members[
            0]
        team_request_mock.query.filter_by.return_value.first.return_value = self.A_TEAM_REQUEST

        teams.accept_team_request(A_PARTICIPANT)

        db_mock.session.delete.assert_called_with(
            TeamRequest(participant_id=self.A_TEAM_REQUEST.participant_id,
                        team_id=self.A_TEAM_REQUEST.team_id))
        db_mock.session.add.assert_called_with(
            TeamMember(participant_id=self.A_TEAM_MEMBER.participant_id,
                       team_id=self.A_TEAM_MEMBER.team_id))
        db_mock.session.commit.assert_called_once()
Esempio n. 10
0
class TestRemoveOwnTeamRequest:
    A_TEAM_REQUEST = TeamRequest(team_id=A_TEAM.id,
                                 participant_id=A_PARTICIPANT_WITHOUT_TEAM.id)

    def test_given_no_team_request_should_raise_unprocessable_entity_error(
            self, team_request_mock: MagicMock):
        team_request_mock.query.filter_by.return_value.first.return_value = None

        with raises(errors.UnprocessableEntity):
            teams.remove_own_team_request(A_PARTICIPANT)

    def test_should_delete_current_team_request(self, db_mock: MagicMock,
                                                team_request_mock: MagicMock):
        team_request_mock.query.filter_by.return_value.first.return_value = self.A_TEAM_REQUEST

        teams.remove_own_team_request(A_PARTICIPANT)

        db_mock.session.delete.assert_called_with(
            TeamRequest(team_id=self.A_TEAM_REQUEST.team_id,
                        participant_id=self.A_TEAM_REQUEST.participant_id))
        db_mock.session.commit.assert_called_once()
Esempio n. 11
0
 def _team_request_mock(self, team_request_mock: MagicMock):
     team_request_mock.side_effect = lambda *args, **kwargs: TeamRequest(
         *args, **kwargs)