コード例 #1
0
    def test_teams_for_distro_with_no_bug_super(self):
        self._setup_teams(self.user)
        context = self.factory.makeDistribution(owner=self.user,
                                                members=self.bug_super_team)

        expose_user_administered_teams_to_js(self.request,
                                             self.user,
                                             context,
                                             absoluteURL=fake_absoluteURL)

        # The team information should have been added to the request.
        self.assertThat(self.request.objects, Contains('administratedTeams'))
        team_info = self.request.objects['administratedTeams']

        # Since the distro has no bug supervisor set, all administered teams
        # are returned.
        expected_number_teams = 3
        self.assertThat(len(team_info), Equals(expected_number_teams))
        # The items info consist of a dictionary with link and title keys.
        for i in range(expected_number_teams):
            self.assertThat(
                team_info[i],
                KeysEqual('has_preferredemail', 'link', 'title', 'url'))
        # The link is the unique display name of the team.
        self.assertThat(
            team_info[0]['title'],
            Equals(u'Bug Supervisor Sub Team (bug-supervisor-sub-team)'))
        self.assertThat(team_info[1]['title'],
                        Equals(u'Bug Supervisor Team (bug-supervisor-team)'))
        self.assertThat(team_info[2]['title'],
                        Equals(u'Unrelated Team (unrelated-team)'))
        # The link is the API link to the team.
        self.assertThat(team_info[0]['link'],
                        Equals(u'http://example.com/bug-supervisor-sub-team'))
コード例 #2
0
    def test_teams_for_distro_with_bug_super(self):
        self._setup_teams(self.user)
        context = self.factory.makeDistribution(
            owner=self.user, members=self.bug_super_team)
        with person_logged_in(self.user):
            context.bug_supervisor = self.bug_super_team

        expose_user_administered_teams_to_js(self.request, self.user, context,
            absoluteURL=fake_absoluteURL)

        # The team information should have been added to the request.
        self.assertThat(self.request.objects, Contains('administratedTeams'))
        team_info = self._sort(self.request.objects['administratedTeams'])

        # Since the distro only returns teams that are members of the bug
        # supervisor team, we only expect two.
        expected_number_teams = 2
        self.assertThat(len(team_info), Equals(expected_number_teams))
        # The items info consist of a dictionary with link and title keys.
        for i in range(expected_number_teams):
            self.assertThat(
                team_info[i],
                KeysEqual('has_preferredemail', 'link', 'title', 'url'))
        # The link is the title of the team.
        self.assertThat(
            team_info[0]['title'],
            Equals(u'\u201cBug Supervisor Sub Team\u201d team'))
        self.assertThat(
            team_info[1]['title'],
            Equals(u'\u201cBug Supervisor Team\u201d team'))
        # The link is the API link to the team.
        self.assertThat(team_info[0]['link'],
            Equals(u'http://example.com/\u201cBugSupervisorSubTeam\u201dteam'))
コード例 #3
0
    def test_expose_user_administered_teams_to_js__uses_cached_teams(self):
        # The function expose_user_administered_teams_to_js uses a
        # cached list of administrated teams.
        context = self.factory.makeProduct(owner=self.user)
        self._setup_teams(self.user)

        # The first call requires one query to retrieve the administrated
        # teams.
        with StormStatementRecorder() as recorder:
            expose_user_administered_teams_to_js(self.request,
                                                 self.user,
                                                 context,
                                                 absoluteURL=fake_absoluteURL)
        statements_for_admininstrated_teams = [
            statement for statement in recorder.statements
            if 'TeamMembership' in statement
        ]
        self.assertEqual(1, len(statements_for_admininstrated_teams))

        # Calling the function a second time does not require an
        # SQL call to retrieve the administrated teams.
        with StormStatementRecorder() as recorder:
            expose_user_administered_teams_to_js(self.request,
                                                 self.user,
                                                 context,
                                                 absoluteURL=fake_absoluteURL)
        statements_for_admininstrated_teams = [
            statement for statement in recorder.statements
            if 'TeamMembership' in statement
        ]
        self.assertEqual(0, len(statements_for_admininstrated_teams))
コード例 #4
0
    def test_teams_for_distro_with_no_bug_super(self):
        self._setup_teams(self.user)
        context = self.factory.makeDistribution(
            owner=self.user, members=self.bug_super_team)

        expose_user_administered_teams_to_js(self.request, self.user, context,
            absoluteURL=fake_absoluteURL)

        # The team information should have been added to the request.
        self.assertThat(self.request.objects, Contains('administratedTeams'))
        team_info = self._sort(self.request.objects['administratedTeams'])

        # Since the distro has no bug supervisor set, all administered teams
        # are returned.
        expected_number_teams = 3
        self.assertThat(len(team_info), Equals(expected_number_teams))
        # The items info consist of a dictionary with link and title keys.
        for i in range(expected_number_teams):
            self.assertThat(
                team_info[i],
                KeysEqual('has_preferredemail', 'link', 'title', 'url'))
        # The link is the title of the team.
        self.assertThat(
            team_info[0]['title'],
            Equals(u'\u201cBug Supervisor Sub Team\u201d team'))
        self.assertThat(
            team_info[1]['title'],
            Equals(u'\u201cBug Supervisor Team\u201d team'))
        self.assertThat(
            team_info[2]['title'], Equals(u'\u201cUnrelated Team\u201d team'))
        # The link is the API link to the team.
        self.assertThat(team_info[0]['link'],
            Equals(u'http://example.com/\u201cBugSupervisorSubTeam\u201dteam'))
コード例 #5
0
    def test_expose_user_administered_teams_to_js__uses_cached_teams(self):
        # The function expose_user_administered_teams_to_js uses a
        # cached list of administrated teams.
        context = self.factory.makeProduct(owner=self.user)
        self._setup_teams(self.user)

        # The first call requires one query to retrieve the administrated
        # teams.
        with StormStatementRecorder() as recorder:
            expose_user_administered_teams_to_js(
                self.request, self.user, context,
                absoluteURL=fake_absoluteURL)
        statements_for_admininstrated_teams = [
            statement for statement in recorder.statements
            if statement.startswith("SELECT *")]
        self.assertEqual(1, len(statements_for_admininstrated_teams))

        # Calling the function a second time does not require an
        # SQL call to retrieve the administrated teams.
        with StormStatementRecorder() as recorder:
            expose_user_administered_teams_to_js(
                self.request, self.user, context,
                absoluteURL=fake_absoluteURL)
        statements_for_admininstrated_teams = [
            statement for statement in recorder.statements
            if statement.startswith("SELECT *")]
        self.assertEqual(0, len(statements_for_admininstrated_teams))
コード例 #6
0
    def test_query_count(self):
        # The function issues a constant number of queries regardless of
        # team count.
        login_person(self.user)
        context = self.factory.makeProduct(owner=self.user)
        self._setup_teams(self.user)

        IStore(Person).invalidate()
        clear_cache()
        with StormStatementRecorder() as recorder:
            expose_user_administered_teams_to_js(
                self.request, self.user, context,
                absoluteURL=fake_absoluteURL)
        self.assertThat(recorder, HasQueryCount(Equals(4)))

        # Create some new public teams owned by the user, and a private
        # team administered by the user.
        for i in range(3):
            self.factory.makeTeam(owner=self.user)
        pt = self.factory.makeTeam(
            visibility=PersonVisibility.PRIVATE, members=[self.user])
        with person_logged_in(pt.teamowner):
            pt.addMember(
                self.user, pt.teamowner, status=TeamMembershipStatus.ADMIN)

        IStore(Person).invalidate()
        clear_cache()
        del IJSONRequestCache(self.request).objects['administratedTeams']
        with StormStatementRecorder() as recorder:
            expose_user_administered_teams_to_js(
                self.request, self.user, context,
                absoluteURL=fake_absoluteURL)
        self.assertThat(recorder, HasQueryCount(Equals(4)))
コード例 #7
0
    def test_teams_for_non_distro(self):
        # The expose_user_administered_teams_to_js function loads some data
        # about the teams the requesting user administers into the response to
        # be made available to JavaScript.

        context = self.factory.makeProduct(owner=self.user)
        self._setup_teams(self.user)

        expose_user_administered_teams_to_js(self.request, self.user, context,
            absoluteURL=fake_absoluteURL)

        # The team information should have been added to the request.
        self.assertThat(self.request.objects, Contains('administratedTeams'))
        team_info = self._sort(self.request.objects['administratedTeams'])
        # Since there are three teams, there should be three items in the
        # list of team info.
        expected_number_teams = 3
        self.assertThat(len(team_info), Equals(expected_number_teams))
        # The items info consist of a dictionary with link and title keys.
        for i in range(expected_number_teams):
            self.assertThat(
                team_info[i],
                KeysEqual('has_preferredemail', 'link', 'title', 'url'))
        # The link is the title of the team.
        self.assertThat(
            team_info[0]['title'],
            Equals(u'\u201cBug Supervisor Sub Team\u201d team'))
        self.assertThat(
            team_info[1]['title'],
            Equals(u'\u201cBug Supervisor Team\u201d team'))
        self.assertThat(
            team_info[2]['title'], Equals(u'\u201cUnrelated Team\u201d team'))
        # The link is the API link to the team.
        self.assertThat(team_info[0]['link'],
            Equals(u'http://example.com/\u201cBugSupervisorSubTeam\u201dteam'))
コード例 #8
0
 def test_teams_owned_but_not_joined_are_not_included(self):
     context = self.factory.makeProduct(owner=self.user)
     team = self.factory.makeTeam(
         name='bug-supervisor-team', owner=self.user)
     with person_logged_in(self.user):
         self.user.leave(team)
     expose_user_administered_teams_to_js(self.request, self.user, context,
         absoluteURL=fake_absoluteURL)
     team_info = self.request.objects['administratedTeams']
     self.assertEquals(len(team_info), 0)
コード例 #9
0
    def test_teams_preferredemail(self):
        # The function includes information about whether the team has a
        # preferred email.  This gives us information in JavaScript that tells
        # us whether the subscription can be muted for a particular member of
        # the team.  (If the team has a preferredemail, muting is not
        # possible).
        context = self.factory.makeProduct(owner=self.user)
        self.factory.makeTeam(name='team-1', owner=self.user)
        team2 = self.factory.makeTeam(name='team-2', owner=self.user)
        self.factory.makeEmail('*****@*****.**',
                               team2,
                               email_status=EmailAddressStatus.PREFERRED)

        expose_user_administered_teams_to_js(self.request,
                                             self.user,
                                             context,
                                             absoluteURL=fake_absoluteURL)
        team_info = self.request.objects['administratedTeams']
        self.assertThat(team_info[0]['title'], Equals(u'Team 1 (team-1)'))
        self.assertThat(team_info[0]['has_preferredemail'], Equals(False))
        self.assertThat(team_info[1]['title'], Equals(u'Team 2 (team-2)'))
        self.assertThat(team_info[1]['has_preferredemail'], Equals(True))
コード例 #10
0
    def test_teams_preferredemail(self):
        # The function includes information about whether the team has a
        # preferred email.  This gives us information in JavaScript that tells
        # us whether the subscription can be muted for a particular member of
        # the team.  (If the team has a preferredemail, muting is not
        # possible).
        context = self.factory.makeProduct(owner=self.user)
        self.factory.makeTeam(name='team-1', owner=self.user)
        team2 = self.factory.makeTeam(name='team-2', owner=self.user)
        self.factory.makeEmail('*****@*****.**',
                               team2,
                               email_status=EmailAddressStatus.PREFERRED)

        expose_user_administered_teams_to_js(self.request, self.user, context,
            absoluteURL=fake_absoluteURL)
        team_info = self._sort(self.request.objects['administratedTeams'])
        self.assertThat(
            team_info[0]['title'], Equals(u'\u201cTeam 1\u201d team'))
        self.assertThat(team_info[0]['has_preferredemail'], Equals(False))
        self.assertThat(
            team_info[1]['title'],
            Equals(u'\u201cTeam 2\u201d team'))
        self.assertThat(team_info[1]['has_preferredemail'], Equals(True))