Exemplo n.º 1
0
def create_test_team(tid: str,
                     team_name: str,
                     display_name: str) -> Team:
    """
    Create a test team with team name, and with all other attributes the same.

    ==========  =============================
    Property    Preset
    ==========  =============================
    Github      ``tid``
    Name slug   ``team_name``
    Display     ``display_name``
    Platform    slack
    Members     ['abc_123']
    ==========  =============================

    :param tid: The github ID associated with the team
    :param team_name: The github team name slug
    :param display_name: The github team name
    :return: a filled-in team model (no empty strings)
    """
    t = Team(tid, team_name, display_name)
    t.platform = 'slack'
    t.add_member('abc_123')
    return t
Exemplo n.º 2
0
    def setUp(self):
        self.team = 'rocket'
        self.teamid = 395830
        self.member = 'theflatearth'
        self.memberid = 3058493
        self.add_payload = mem_default_payload(self.team, self.teamid,
                                               self.member, self.memberid)
        self.rm_payload = mem_default_payload(self.team, self.teamid,
                                              self.member, self.memberid)
        self.empty_payload = mem_default_payload(self.team, self.teamid,
                                                 self.member, self.memberid)

        self.add_payload['action'] = 'added'
        self.rm_payload['action'] = 'removed'
        self.empty_payload['action'] = ''

        self.u = User('U4058409')
        self.u.github_id = str(self.memberid)
        self.u.github_username = self.member
        self.t = Team(str(self.teamid), self.team, self.team.capitalize())
        self.db = MemoryDB(users=[self.u], teams=[self.t])

        self.gh = mock.Mock()
        self.conf = mock.Mock()
        self.conf.github_team_all = 'all'
        self.webhook_handler = MembershipEventHandler(self.db, self.gh,
                                                      self.conf)
Exemplo n.º 3
0
 def mem_remove(self,
                github_id: str,
                selected_team: Team,
                team_name: str) -> ResponseTuple:
     """Help membership function if payload action is removal."""
     member_list = self._facade. \
         query(User, [('github_user_id', github_id)])
     slack_ids_string = ""
     if len(member_list) == 1:
         slack_id = member_list[0].slack_id
         if selected_team.has_member(github_id):
             selected_team.discard_member(github_id)
             self._facade.store(selected_team)
             logging.info(f"deleted slack user {slack_id} "
                          f"from {team_name}")
             slack_ids_string += f" {slack_id}"
             return (f"deleted slack ID{slack_ids_string} "
                     f"from {team_name}", 200)
         else:
             logging.error(f"slack user {slack_id} not in {team_name}")
             return (f"slack user {slack_id} not in {team_name}", 200)
     elif len(member_list) > 1:
         logging.error("Error: found github ID connected to"
                       " multiple slack IDs")
         return ("Error: found github ID connected to multiple"
                 " slack IDs", 200)
     else:
         logging.error(f"could not find user {github_id}")
         return f"could not find user {github_id}", 200
Exemplo n.º 4
0
def test_team_equality():
    """Test the Team class method __eq__() and __ne__()."""
    team = Team("1", "brussel-sprouts", "Brussel Sprouts")
    team2 = Team("1", "brussel-sprouts", "Brussel Sprouts")
    team3 = Team("1", "brussel-trouts", "Brussel Trouts")
    assert team == team2
    assert team != team3
Exemplo n.º 5
0
    def setUp(self):
        self.u0 = User('U0G9QF9C6')
        self.u0.email = '*****@*****.**'
        self.u0.github_id = '305834954'

        self.u1 = User('Utheomadude')
        self.u1.email = '*****@*****.**'
        self.u1.github_id = '349850564'

        self.admin = create_test_admin('Uadmin')

        self.lead = User('Ualley')
        self.lead.email = '*****@*****.**'
        self.lead.github_id = '2384858'
        self.lead.permissions_level = Permissions.team_lead

        self.t0 = Team('305849', 'butter-batter', 'Butter Batters')
        self.t0.add_member(self.u0.github_id)
        self.t0.add_member(self.lead.github_id)
        self.t0.add_team_lead(self.lead.github_id)

        self.t1 = Team('320484', 'aqua-scepter', 'Aqua Scepter')
        self.t1.add_member(self.u1.github_id)

        self.t2 = Team('22234', 'tiger-dear', 'Shakespearean')

        self.db = MemoryDB(users=[self.u0, self.u1, self.admin, self.lead],
                           teams=[self.t0, self.t1, self.t2])

        self.cmd = ExportCommand(self.db)
Exemplo n.º 6
0
class TestGCPUtils(TestCase):
    def setUp(self):
        self.u0 = User('U93758')
        self.u0.github_id = '22343'
        self.u0.github_username = '******'
        self.u0.email = '*****@*****.**'

        self.t0 = Team('465884', 'team-plasma', 'Team Plasma')
        self.t0.add_member(self.u0.github_id)
        self.t0.folder = 'oieasotbokneawsoieomieaomiewrsdoie'

        self.t1 = Team('394783', 'team-rocket', 'Team Rocket')
        self.t1.add_member(self.u0.github_id)

        self.db = MemoryDB(users=[self.u0], teams=[self.t0, self.t1])

        self.gcp = mock.MagicMock(GCPInterface)

    def test_sync_user_email_perms(self):
        sync_user_email_perms(self.gcp, self.db, self.u0)

        self.gcp.ensure_drive_permissions.assert_called_once_with(
            self.t0.github_team_name, self.t0.folder, [self.u0.email]
        )

    def test_sync_team_email_perms_bad_email(self):
        self.u0.email = 'bad@[email protected]'
        sync_team_email_perms(self.gcp, self.db, self.t0)

        self.gcp.ensure_drive_permissions.assert_not_called()
Exemplo n.º 7
0
    def handle_added(self,
                     github_id: str,
                     github_username: str,
                     organization: str) -> ResponseTuple:
        """Help organization function if payload action is added."""
        logging.info(f"user {github_username} added to {organization}")
        all_name = self._conf.github_team_all

        try:
            # Try to add the user to the 'all' team if it exists
            team_all = get_team_by_name(self._facade, all_name)
            self._gh.add_team_member(github_username, team_all.github_team_id)
            team_all.add_member(github_id)
            self._facade.store(team_all)
        except LookupError:
            # If that team doesn't exist, make it exist
            t_id = str(self._gh.org_create_team(self._conf.github_team_all))
            self._gh.add_team_member(github_username, t_id)
            logging.info(f'team {all_name} created for {organization}')
            team = Team(t_id, all_name, all_name)
            team.add_member(github_id)
            self._facade.store(team)
        except RuntimeError as e:
            # If there are any other kinds of errors, we log it
            logging.error(e)
            return '', 200

        logging.info(f'user {github_username} added to team {all_name}')
        return f"user {github_username} added to {organization}", 200
Exemplo n.º 8
0
 def test_check_credentials_not_lead(self):
     """Test checking to see if user is lead for certain team."""
     user = User("USFAS689")
     user.github_id = "IDGithub"
     team = Team("brussels", "team", "id")
     team.add_member(user.github_id)
     user.permissions_level = Permissions.team_lead
     self.assertFalse(util.check_permissions(user, team))
Exemplo n.º 9
0
def makeTeams() -> List[Team]:
    t0 = Team('t0', 'TZ', 'T Zero Blasters')
    t0.platform = 'iOS'
    t0.team_leads = set(['u0', 'u1', 'u2'])
    t0.members = set(['u0', 'u1', 'u2'])
    t1 = Team('t1', 'T1', 'T 1 Blasters')
    t1.platform = 'iOS'
    t1.team_leads = set(['u0', 'u2'])
    t1.members = set(['u0', 'u2', 'u3'])
    return [t0, t1]
Exemplo n.º 10
0
def test_update_team(ddb):
    """Test to see if we can update a team."""
    t = Team('1', 'brussel-sprouts', 'Brussel Sprouts')
    ddb.store(t)

    t = ddb.retrieve(Team, '1')
    t.add_member('abc_123')
    t.add_member('123_abc')
    ddb.store(t)

    assert len(ddb.retrieve(Team, '1').members) == 2
Exemplo n.º 11
0
    def test_update_team(self):
        """Test to see if we can update a team."""
        t = Team('1', 'brussel-sprouts', 'Brussel Sprouts')
        self.assertTrue(self.ddb.store(t))

        t = self.ddb.retrieve(Team, '1')
        t.add_member('abc_123')
        t.add_member('123_abc')
        self.assertTrue(self.ddb.store(t))

        self.assertEqual(len(self.ddb.retrieve(Team, '1').members), 2)
Exemplo n.º 12
0
 def test_handle_create_multiple_team_lookup_error(self):
     """Test project command create parser with mult team lookup error."""
     team1 = Team("GTID1", "team-name1", "name1")
     team2 = Team("GTID2", "team-name2", "name2")
     team1.team_leads.add(user)
     team2.team_leads.add(user)
     self.mock_facade.query.return_value = [team1, team2]
     self.assertTupleEqual(
         self.testcommand.handle("project create repo-link team-name",
                                 user),
         ("2 teams found with GitHub team name team-name", 200))
Exemplo n.º 13
0
    def setUpClass(cls):
        # start Chrome
        options = webdriver.ChromeOptions()
        options.add_argument('headless')
        try:
            cls.client = webdriver.Chrome('F:/Programs/chromedriver_win32/chromedriver.exe',chrome_options=options)
        except:
            pass

        # skip these tests if the browser could not be started
        if cls.client:
            # create the application
            cls.app = create_app('testing')
            cls.app_context = cls.app.app_context()
            cls.app_context.push()

            # suppress logging to keep unittest output clean
            import logging
            logger = logging.getLogger('werkzeug')
            logger.setLevel("ERROR")

            # create the database and populate with some fake data
            db.create_all()
            email = cls.app.config['FLASK_ADMIN']
            name = 'admin'
            password = cls.app.config['FLASK_ADMIN_PASSWORD']

            if Team.query.filter_by(email=email).count() < 1:
                admin = Team(teamName=name, email=email, password=password)
                db.session.add(admin)
                db.session.commit()

            new_team = Team(teamName='testTeam', email='test@team', password='******')
            db.session.add(new_team)
            db.session.commit()
            new_user=User(userName='******')
            new_activity = Activity(AID='998', team=new_team, starttime='2017-04-09 15:25',
                                endtime='2017-04-09 15:30', location="testLocation",
                                title="testActivity", content="testContent", managePerson="testManager",
                                managePhone=110, manageEmail='test@activity')
            db.session.add_all([new_user,new_activity])
            db.session.commit()
            new_UserActivity=UserActivity(user=new_user,activity=new_activity,content='123')
            db.session.add(new_UserActivity)
            db.session.commit()

            # start the Flask server in a thread
            cls.server_thread = threading.Thread(target=cls.app.run,
                                                 kwargs={'debug': False})
            cls.server_thread.start()

            # give the server a second to ensure it is up
            time.sleep(1)
Exemplo n.º 14
0
 def setUp(self):
     self.u0 = User('U395474')
     self.u0.github_id = '321132'
     self.u1 = User('U85739')
     self.u1.github_id = '000584'
     self.u2 = User('U3048485')
     self.u2.github_id = '11121'
     self.t0 = Team('305738', 'some-team', 'Some Team')
     self.t0.add_member(self.u0.github_id)
     self.t0.add_member(self.u1.github_id)
     self.t1 = Team('305849', 'some-team', 'Some Team')
     self.db = MemoryDB(users=[self.u0, self.u1, self.u2], teams=[self.t0])
Exemplo n.º 15
0
    def setUp(self):
        self.app = Flask(__name__)

        self.u0 = User('U0G9QF9C6')
        self.u1 = User('Utheomadude')
        self.t0 = Team("BRS", "brs", "web")
        self.t1 = Team("OTEAM", "other team", "android")
        self.admin = create_test_admin('Uadmin')
        self.db = MemoryDB(users=[self.u0, self.u1, self.admin],
                           teams=[self.t0, self.t1])

        self.mock_github = mock.MagicMock(GithubInterface)
        self.testcommand = UserCommand(self.db, self.mock_github, None)
        self.maxDiff = None
Exemplo n.º 16
0
def test_handle_mem_event_add_member(mock_logging, mem_add_payload):
    """Test that instances when members are added to the mem are logged."""
    mock_facade = mock.MagicMock(DBFacade)
    return_user = User("SLACKID")
    return_team = Team("2723476", "rocket", "rocket")
    return_team.add_member("SLACKID")
    mock_facade.query.return_value = [return_user]
    mock_facade.retrieve.return_value = return_team
    webhook_handler = MembershipEventHandler(mock_facade)
    rsp, code = webhook_handler.handle(mem_add_payload)
    mock_facade.store.assert_called_once_with(return_team)
    mock_logging.info.assert_called_once_with(("user Codertocat added "
                                               "to rocket"))
    assert rsp == "added slack ID SLACKID"
    assert code == 200
Exemplo n.º 17
0
 def test_refresh_github_changed_success(self) -> None:
     """Test refresh team command API to edit teams."""
     new_team1 = Team("1", "newgh1", "name1")
     new_team1.add_member(self.regular_user.github_id)
     self.mock_github.org_get_teams.return_value = [
         new_team1,
         self.team2,
         self.team3,
         self.team3_dup,
     ]
     refreshed = self.testapi.team_refresh("admin")
     self.assertTrue(refreshed)
     self.team1.github_team_name = "newgh1"
     self.team1.add_member(self.regular_user.github_id)
     self.mock_facade.store.assert_called_once_with(self.team1)
Exemplo n.º 18
0
 def mem_added(self, github_id: str, selected_team: Team, team_name: str,
               github_username: str) -> ResponseTuple:
     """Help membership function if payload action is added."""
     member_list = self._facade.query(User, [('github_user_id', github_id)])
     slack_ids_string = ""
     if len(member_list) > 0:
         selected_team.add_member(github_id)
         self._facade.store(selected_team)
         for member in member_list:
             slack_id = member.slack_id
             logging.info(f"user {github_username} added to {team_name}")
             slack_ids_string += f" {slack_id}"
         return f"added slack ID{slack_ids_string}", 200
     else:
         logging.error(f"could not find user {github_id}")
         return f"could not find user {github_username}", 404
Exemplo n.º 19
0
    def setUp(self):
        self.app = create_app('testing')
        self.app.testing = True
        self.app_context = self.app.app_context()
        self.app_context.push()
        db.create_all()

        new_user = User(userName='******', email='test@user', phone='123456')
        new_team = Team(teamName='testTeam',
                        email='test@team',
                        password='******')
        new_activity = Activity(AID='998',
                                team=new_team,
                                starttime='2017-04-09 15:25',
                                endtime='2017-04-09 15:30',
                                location="testLocation",
                                title="testActivity",
                                content="testContent",
                                managePerson="testManager",
                                managePhone=110,
                                manageEmail='test@activity')
        new_message = Message(user=new_user,
                              activity=new_activity,
                              content='hao',
                              time='2017-04-09 15:30',
                              isRead=False)
        db.session.add_all([new_user, new_team, new_activity, new_message])
        db.session.commit()
Exemplo n.º 20
0
    def setUp(self):
        self.u0 = User('U93758')
        self.u0.github_id = '22343'
        self.u0.github_username = '******'
        self.u0.email = '*****@*****.**'

        self.t0 = Team('465884', 'team-plasma', 'Team Plasma')
        self.t0.add_member(self.u0.github_id)
        self.t0.folder = 'oieasotbokneawsoieomieaomiewrsdoie'

        self.t1 = Team('394783', 'team-rocket', 'Team Rocket')
        self.t1.add_member(self.u0.github_id)

        self.db = MemoryDB(users=[self.u0], teams=[self.t0, self.t1])

        self.gcp = mock.MagicMock(GCPInterface)
Exemplo n.º 21
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)
Exemplo n.º 22
0
    def setUp(self):
        self.team = 'rocket'
        self.teamid = 4934950
        self.newteam = 'someteam'
        self.newteamid = 4028940
        self.created_payload = team_default_payload(self.newteam,
                                                    self.newteamid)
        self.deleted_payload = team_default_payload(self.team, self.teamid)
        self.edited_payload = team_default_payload(self.team, self.teamid)
        self.added_to_repo_payload = team_default_payload(
            self.team, self.teamid)
        self.rm_from_repo_payload = team_default_payload(
            self.team, self.teamid)
        self.empty_payload = team_default_payload(self.team, self.teamid)
        self.created_payload['action'] = 'created'
        self.deleted_payload['action'] = 'deleted'
        self.edited_payload['action'] = 'edited'
        self.added_to_repo_payload['action'] = 'added_to_repository'
        self.rm_from_repo_payload['action'] = 'removed_from_repository'
        self.empty_payload['action'] = ''

        self.t = Team(str(self.teamid), self.team, self.team.capitalize())
        self.db = MemoryDB(teams=[self.t])

        self.gh = mock.Mock()
        self.conf = mock.Mock()
        self.webhook_handler = TeamEventHandler(self.db, self.gh, self.conf)
Exemplo n.º 23
0
 def test_handle_create_permission_error(self):
     """Test project command create parser with permission error."""
     team = Team("GTID", "team-name", "name")
     self.mock_facade.query.return_value = [team]
     self.assertTupleEqual(
         self.testcommand.handle("project create repo-link team-name",
                                 user),
         (self.testcommand.permission_error, 200))
Exemplo n.º 24
0
 def facade_retrieve_side_effect(*args, **kwargs):
     """Return a side effect for the mock facade."""
     if args[0] == Project:
         return Project("GTID", [])
     elif args[0] == Team:
         return Team("GTID", "team-name", "display-name")
     else:
         return User(user)
Exemplo n.º 25
0
 def test_handle_create_multiple_team_lookup_error(self):
     team1 = Team('GTID1', 'team-name', 'name1')
     self.db.teams['GTID1'] = team1
     self.assertTupleEqual(
         self.testcommand.handle(
             f'project create repo-link {self.t0.github_team_name}',
             self.admin.slack_id),
         ('2 teams found with GitHub team name team-name', 200))
Exemplo n.º 26
0
    def setUp(self):
        self.app = Flask(__name__)

        self.u0 = User('U03548940')
        self.u0.github_username = '******'
        self.u0.github_id = '534593'
        self.admin = create_test_admin('Uadmin')
        self.p0 = create_test_project(
            'GTID', ['https://github.com/ubclaunchpad/rocket2'])
        self.p1 = create_test_project(
            '', ['https://github.com/ubclaunchpad/rocket2'])
        self.t0 = Team('GTID', 'team-name', 'name')
        self.db = MemoryDB(users=[self.u0, self.admin],
                           teams=[self.t0],
                           projs=[self.p0, self.p1])

        self.testcommand = ProjectCommand(self.db)
Exemplo n.º 27
0
 def test_handle_assign_assign_error(self):
     """Test project command assign with assignment error."""
     self.mock_facade.retrieve.return_value = Project("GTID", [])
     team = Team("GTID", "team-name", "display-name")
     team.team_leads.add(user)
     self.mock_facade.query.return_value = [team]
     self.assertTupleEqual(
         self.testcommand.handle("project assign ID team-name", user),
         (self.testcommand.assigned_error, 200))
Exemplo n.º 28
0
 def test_handle_force_assign(self):
     """Test project command force assign."""
     self.mock_facade.retrieve.return_value = Project("GTID", [])
     team = Team("GTID", "team-name", "display-name")
     team.team_leads.add(user)
     self.mock_facade.query.return_value = [team]
     self.assertTupleEqual(
         self.testcommand.handle("project assign ID team-name -f", user),
         ("Project successfully assigned!", 200))
Exemplo n.º 29
0
 def test_handle_create_user_lookup_error(self):
     """Test project command create parser with no user lookup error."""
     team = Team("GTID", "team-name", "name")
     self.mock_facade.query.return_value = [team]
     self.mock_facade.retrieve.side_effect = LookupError(
         "user lookup error")
     self.assertTupleEqual(
         self.testcommand.handle("project create repo-link team-name",
                                 user), ("user lookup error", 200))
Exemplo n.º 30
0
 def facade_retrieve_side_effect(*args, **kwargs):
     """Return a side effect for the mock facade."""
     if args[0] == Project:
         return Project("", [])
     elif args[0] == Team:
         team = Team("GTID", "team-name", "display-name")
         return team
     else:
         raise LookupError("team lookup error")