예제 #1
0
    def setUp(self):
        self.username = '******'
        self.gh_uid = 4738549
        self.default_payload = org_default_payload(self.username, self.gh_uid)
        self.add_payload = org_default_payload(self.username, self.gh_uid)
        self.rm_payload = org_default_payload(self.username, self.gh_uid)
        self.invite_payload = org_default_payload(self.username, self.gh_uid)
        self.empty_payload = org_default_payload(self.username, self.gh_uid)

        self.add_payload['action'] = 'member_added'
        self.rm_payload['action'] = 'member_removed'
        self.invite_payload['action'] = 'member_invited'
        self.empty_payload['action'] = ''

        self.u0 = User('U01234954')
        self.u0.github_id = str(self.gh_uid)
        self.u0.github_username = self.username
        self.team_all = Team('1', 'all', 'Team all')
        self.db = MemoryDB(users=[self.u0], teams=[self.team_all])

        self.gh = mock.Mock()
        self.conf = mock.Mock()
        self.conf.github_team_all = 'all'
        self.webhook_handler = OrganizationEventHandler(self.db, self.gh,
                                                        self.conf)
예제 #2
0
def test_handle_org_event_add_member(mock_logging, org_add_payload):
    """Test that instances when members are added to the org are logged."""
    mock_facade = mock.MagicMock(DBFacade)
    webhook_handler = OrganizationEventHandler(mock_facade)
    rsp, code = webhook_handler.handle(org_add_payload)
    mock_logging.info.assert_called_with(("user hacktocat added "
                                          "to Octocoders"))
    assert rsp == "user hacktocat added to Octocoders"
    assert code == 200
예제 #3
0
def test_handle_org_event_empty_action(mock_logging, org_empty_payload):
    """Test that instances where there is no/invalid action are logged."""
    mock_facade = mock.MagicMock(DBFacade)
    webhook_handler = OrganizationEventHandler(mock_facade)
    rsp, code = webhook_handler.handle(org_empty_payload)
    mock_logging.error.assert_called_once_with(("organization webhook "
                                                "triggered, invalid "
                                                "action specified: "
                                                f"{org_empty_payload}"))
    assert rsp == "invalid organization webhook triggered"
    assert code == 405
예제 #4
0
def test_handle_org_event_rm_member_missing(mock_logging, org_rm_payload):
    """Test that members not in rocket db are handled correctly."""
    mock_facade = mock.MagicMock(DBFacade)
    mock_facade.query.return_value = []
    webhook_handler = OrganizationEventHandler(mock_facade)
    rsp, code = webhook_handler.handle(org_rm_payload)
    mock_facade.query\
        .assert_called_once_with(User, [('github_user_id', "39652351")])
    mock_logging.error.assert_called_once_with("could not find user 39652351")
    assert rsp == "could not find user hacktocat"
    assert code == 404
예제 #5
0
def test_handle_org_event_rm_single_member(mock_logging, org_rm_payload):
    """Test that members removed from the org are deleted from rocket's db."""
    mock_facade = mock.MagicMock(DBFacade)
    return_user = User("SLACKID")
    mock_facade.query.return_value = [return_user]
    webhook_handler = OrganizationEventHandler(mock_facade)
    rsp, code = webhook_handler.handle(org_rm_payload)
    mock_facade.query\
        .assert_called_once_with(User, [('github_user_id', "39652351")])
    mock_facade.delete.assert_called_once_with(User, "SLACKID")
    mock_logging.info.assert_called_with("deleted slack user SLACKID")
    assert rsp == "deleted slack ID SLACKID"
    assert code == 200
예제 #6
0
def test_handle_org_event_rm_mult_members(mock_logging, org_rm_payload):
    """Test that multiple members with the same github name can be deleted."""
    mock_facade = mock.MagicMock(DBFacade)
    user1 = User("SLACKUSER1")
    user2 = User("SLACKUSER2")
    user3 = User("SLACKUSER3")
    mock_facade.query.return_value = [user1, user2, user3]
    webhook_handler = OrganizationEventHandler(mock_facade)
    rsp, code = webhook_handler.handle(org_rm_payload)
    mock_facade.query\
        .assert_called_once_with(User, [('github_user_id', "39652351")])
    mock_logging.error.assert_called_once_with("Error: found github ID "
                                               "connected to multiple"
                                               " slack IDs")
    assert rsp == "Error: found github ID connected to multiple slack IDs"
    assert code == 412
예제 #7
0
def test_org_supported_action_list():
    """Confirm the supported action list of the handler."""
    mock_facade = mock.MagicMock(DBFacade)
    webhook_handler = OrganizationEventHandler(mock_facade)
    assert webhook_handler.supported_action_list == [
        "member_removed", "member_added"
    ]
예제 #8
0
파일: core.py 프로젝트: eloisepeng/rocket2
 def __init__(self, db_facade: DBFacade, config: Config) -> None:
     """Give handlers access to the database."""
     self.__secret = config.github_webhook_secret
     self.__event_handlers = [
         OrganizationEventHandler(db_facade),
         TeamEventHandler(db_facade),
         MembershipEventHandler(db_facade)
     ]
예제 #9
0
class TestOrganizationHandles(TestCase):
    def setUp(self):
        self.username = '******'
        self.gh_uid = 4738549
        self.default_payload = org_default_payload(self.username, self.gh_uid)
        self.add_payload = org_default_payload(self.username, self.gh_uid)
        self.rm_payload = org_default_payload(self.username, self.gh_uid)
        self.invite_payload = org_default_payload(self.username, self.gh_uid)
        self.empty_payload = org_default_payload(self.username, self.gh_uid)

        self.add_payload['action'] = 'member_added'
        self.rm_payload['action'] = 'member_removed'
        self.invite_payload['action'] = 'member_invited'
        self.empty_payload['action'] = ''

        self.u0 = User('U01234954')
        self.u0.github_id = str(self.gh_uid)
        self.u0.github_username = self.username
        self.team_all = Team('1', 'all', 'Team all')
        self.db = MemoryDB(users=[self.u0], teams=[self.team_all])

        self.gh = mock.Mock()
        self.conf = mock.Mock()
        self.conf.github_team_all = 'all'
        self.webhook_handler = OrganizationEventHandler(self.db, self.gh,
                                                        self.conf)

    def test_org_handle_invite(self):
        resp, code = self.webhook_handler.handle(self.invite_payload)
        self.assertIn(self.username, resp)
        self.assertEqual(code, 200)

    def test_handle_org_event_add_member(self):
        rsp, code = self.webhook_handler.handle(self.add_payload)
        self.assertEqual(rsp, f'user {self.username} added to Octocoders')
        self.assertEqual(code, 200)
        self.assertIn(str(self.gh_uid), self.team_all.members)

    def test_handle_org_event_add_no_all_team(self):
        self.db.teams = {}
        self.gh.org_create_team.return_value = 305938
        rsp, code = self.webhook_handler.handle(self.add_payload)
        self.assertEqual(rsp, f'user {self.username} added to Octocoders')
        self.assertEqual(code, 200)

        team = self.db.retrieve(Team, '305938')
        self.assertEqual(team.github_team_name, self.conf.github_team_all)
        self.assertIn(str(self.gh_uid), team.members)

    def test_handle_org_event_rm_single_member(self):
        rsp, code = self.webhook_handler.handle(self.rm_payload)
        self.assertEqual(rsp, f'deleted slack ID {self.u0.slack_id}')
        self.assertEqual(code, 200)
        with self.assertRaises(LookupError):
            self.db.retrieve(User, self.u0.slack_id)

    def test_handle_org_event_rm_member_missing(self):
        self.db.users = {}
        rsp, code = self.webhook_handler.handle(self.rm_payload)
        self.assertEqual(rsp, f'could not find user {self.username}')
        self.assertEqual(code, 200)

    def test_handle_org_event_rm_multiple_members_cause_error(self):
        clone0 = User('Ustreisand')
        clone0.github_username = self.username
        clone0.github_id = str(self.gh_uid)
        self.db.users['Ustreisand'] = clone0
        rsp, code = self.webhook_handler.handle(self.rm_payload)
        self.assertEqual(
            rsp,
            'Error: found github ID connected to multiple slack IDs'
        )
        self.assertEqual(code, 200)

    def test_handle_org_event_empty_action(self):
        rsp, code = self.webhook_handler.handle(self.empty_payload)
        self.assertEqual(rsp, 'Unsupported action triggered, ignoring.')
        self.assertEqual(code, 202)