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_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
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
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
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
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
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" ]
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) ]
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)