Exemple #1
0
 def testExtractUniqueValues_DerivedValues(self):
   cols = ['priority', 'milestone', 'owner', 'status']
   users_by_id = {
       111L: framework_views.StuffUserView(111, '*****@*****.**', True),
       222L: framework_views.StuffUserView(222, '*****@*****.**', True),
       333L: framework_views.StuffUserView(333, '*****@*****.**', True),
       }
    def setUp(self):
        self.alice_view = framework_views.StuffUserView(111, 'alice', True)
        self.bob_view = framework_views.StuffUserView(222, 'bob', True)
        self.carol_view = framework_views.StuffUserView(333, 'carol', True)

        self.project = project_pb2.Project()
        self.project.project_name = 'proj'
        self.project.owner_ids.append(111)
        self.project.committer_ids.append(222)
        self.project.contributor_ids.append(333)
Exemple #3
0
    def testExtractUniqueValues_DerivedValues(self):
        cols = ['priority', 'milestone', 'owner', 'status']
        users_by_id = {
            111: framework_views.StuffUserView(111, '*****@*****.**', True),
            222: framework_views.StuffUserView(222, '*****@*****.**', True),
            333: framework_views.StuffUserView(333, '*****@*****.**', True),
        }
        search_results = [
            fake.MakeTestIssue(789,
                               1,
                               'sum 1',
                               '',
                               111,
                               labels='Priority-High Milestone-1.0',
                               derived_labels='Milestone-2.0 Foo',
                               derived_status='Started'),
            fake.MakeTestIssue(
                789,
                2,
                'sum 2',
                'New',
                111,
                labels='Priority-High Milestone-1.0',
                derived_owner_id=333),  # Not seen because of owner_id
            fake.MakeTestIssue(789,
                               3,
                               'sum 3',
                               'New',
                               0,
                               labels='Priority-Low Milestone-1.1',
                               derived_owner_id=222),
        ]

        column_values = table_view_helpers.ExtractUniqueValues(
            cols, search_results, users_by_id, self.config, {})
        self.assertEquals(4, len(column_values))

        self.assertEquals('priority', column_values[0].column_name)
        self.assertEquals(['High', 'Low'], column_values[0].filter_values)

        self.assertEquals('milestone', column_values[1].column_name)
        self.assertEquals(['1.0', '1.1', '2.0'],
                          column_values[1].filter_values)

        self.assertEquals('owner', column_values[2].column_name)
        self.assertEquals(['*****@*****.**', '*****@*****.**'],
                          column_values[2].filter_values)

        self.assertEquals('status', column_values[3].column_name)
        self.assertEquals(['New', 'Started'], column_values[3].filter_values)
  def testExtractUniqueValues_CombinedColumns(self):
    cols = ['priority/pri', 'owner', 'status', 'stars', 'mstone/milestone']
    users_by_id = {
        111: framework_views.StuffUserView(111, '*****@*****.**', True),
        }
    issue = fake.MakeTestIssue(
        789, 5, 'sum 5', 'New', 111, merged_into=200001,
        labels='Priority-High Pri-0 Milestone-1.0 mstone-1',
        star_count=15)

    column_values = table_view_helpers.ExtractUniqueValues(
        cols, SEARCH_RESULTS_WITH_LABELS + [issue], users_by_id,
        self.config, {})
    self.assertEquals(5, len(column_values))

    self.assertEquals('priority/pri', column_values[0].column_name)
    self.assertEquals(['0', 'High', 'Low'], column_values[0].filter_values)

    self.assertEquals('owner', column_values[1].column_name)
    self.assertEquals(['*****@*****.**'], column_values[1].filter_values)

    self.assertEquals('status', column_values[2].column_name)
    self.assertEquals(['New'], column_values[2].filter_values)

    self.assertEquals('stars', column_values[3].column_name)
    self.assertEquals([1, 15], column_values[3].filter_values)

    self.assertEquals('mstone/milestone', column_values[4].column_name)
    self.assertEquals(['1', '1.0', '1.1'], column_values[4].filter_values)
  def testExtractUniqueValues_ExplicitResults(self):
    cols = ['priority', 'owner', 'status', 'stars', 'mstone', 'foo']
    users_by_id = {
        111: framework_views.StuffUserView(111, '*****@*****.**', True),
        }
    column_values = table_view_helpers.ExtractUniqueValues(
        cols, SEARCH_RESULTS_WITH_LABELS, users_by_id, self.config, {})
    self.assertEquals(len(cols), len(column_values))

    self.assertEquals('priority', column_values[0].column_name)
    self.assertEquals(['High', 'Low'], column_values[0].filter_values)

    self.assertEquals('owner', column_values[1].column_name)
    self.assertEquals(['*****@*****.**'], column_values[1].filter_values)

    self.assertEquals('status', column_values[2].column_name)
    self.assertEquals(['New'], column_values[2].filter_values)

    self.assertEquals('stars', column_values[3].column_name)
    self.assertEquals([1], column_values[3].filter_values)

    self.assertEquals('mstone', column_values[4].column_name)
    self.assertEquals(['1', '1.1'], column_values[4].filter_values)

    self.assertEquals('foo', column_values[5].column_name)
    self.assertEquals([], column_values[5].filter_values)
Exemple #6
0
    def testIndexOrLexicalList_ApprovalApprover(self):
        art = art = fake.MakeTestIssue(789, 1, 'sum 2', 'New', 111)
        art.labels = ['samename-approver-value1']
        art.approval_values = [
            tracker_pb2.ApprovalValue(approval_id=4, approver_ids=[333])
        ]

        all_field_defs = [
            tracker_bizobj.MakeFieldDef(4, 788, 'samename',
                                        tracker_pb2.FieldTypes.APPROVAL_TYPE,
                                        None, None, False, False, False, None,
                                        None, None, False, None, None, None,
                                        None, 'cow spots', False)
        ]
        users_by_id = {
            333: framework_views.StuffUserView(333, '*****@*****.**', True)
        }

        accessor = sorting._IndexOrLexicalList([], all_field_defs,
                                               'samename-approver',
                                               users_by_id)
        self.assertEqual(['*****@*****.**', 'value1'], accessor(art))
        neg_accessor = MakeDescending(accessor)
        self.assertEqual([
            sorting.DescendingValue('value1'),
            sorting.DescendingValue('*****@*****.**')
        ], neg_accessor(art))
  def testProcessFormData_RejectUnmodifiedTemplate(self):
    mr = testing_helpers.MakeMonorailRequest(
        path='/p/proj/issues/entry')
    mr.perms = permissions.USER_PERMISSIONSET
    mr.auth.user_view = framework_views.StuffUserView(100, 'user@invalid', True)
    post_data = fake.PostData(
        template_name=['rutabaga'],
        summary=['Nya nya I modified the summary'],
        comment=[self.template.content],
        status=['New'])

    self.mox.StubOutWithMock(self.servlet, 'PleaseCorrect')
    self.servlet.PleaseCorrect(
        mr, component_required=None, fields=[], initial_blocked_on='',
        initial_blocking='', initial_cc='',
        initial_comment=self.template.content, initial_components='',
        initial_owner='', initial_status='New',
        initial_summary='Nya nya I modified the summary', initial_hotlists='',
        labels=[], template_name='rutabaga')
    self.mox.ReplayAll()

    url = self.servlet.ProcessFormData(mr, post_data)
    self.mox.VerifyAll()
    self.assertEqual('Template must be filled out.', mr.errors.comment)
    self.assertIsNone(url)
Exemple #8
0
    def setUp(self):
        self.default_cols = 'a b c'
        self.builtin_cols = 'a b x y z'
        self.config = tracker_bizobj.MakeDefaultProjectIssueConfig(789)

        self.art1 = fake.MakeTestIssue(
            789,
            1,
            'a summary',
            '',
            0,
            derived_owner_id=111,
            star_count=12,
            derived_labels='Priority-Medium Hot Mstone-1 Mstone-2',
            derived_status='Overdue')
        self.art2 = fake.MakeTestIssue(
            789,
            1,
            'a summary',
            'New',
            111,
            star_count=12,
            merged_into=200001,
            labels='Priority-Medium Type-DEFECT Hot Mstone-1 Mstone-2')
        self.users_by_id = {
            111: framework_views.StuffUserView(111, '*****@*****.**', True),
        }
  def testGatherPageData_IncorrectTemplate(self):
    """The handler shouldn't error out if passed a non-existent template."""
    mr = testing_helpers.MakeMonorailRequest(
        path='/p/proj/issues/entry', services=self.services)
    mr.auth.user_view = framework_views.StuffUserView(100, 'user@invalid', True)
    mr.template_name = 'rutabaga'

    user = self.services.user.TestAddUser('user@invalid', 100)
    config = self.services.config.GetProjectConfig(mr.cnxn, mr.project_id)
    config.default_template_for_users = 456
    config.default_template_for_developers = 789
    self.services.config.StoreConfig(mr.cnxn, config)

    self.services.template.GetTemplateSetForProject.return_value = [
        (1, 'one', False), (2, 'two', True)]
    self.services.template.GetTemplateByName.return_value = None
    self.services.template.GetTemplateById.return_value = \
        tracker_pb2.TemplateDef(template_id=123, labels=['yo'])
    self.services.template.GetProjectTemplates.return_value = [
        tracker_pb2.TemplateDef(labels=['no']),
        tracker_pb2.TemplateDef(labels=['maybe'])]
    self.mox.StubOutWithMock(self.services.user, 'GetUser')
    self.services.user.GetUser(
        mox.IgnoreArg(), mox.IgnoreArg()).MultipleTimes().AndReturn(user)

    self.mox.ReplayAll()
    page_data = self.servlet.GatherPageData(mr)
    self.mox.VerifyAll()

    self.assertTrue(self.services.template.GetTemplateByName.called)
    self.assertTrue(self.services.template.GetTemplateById.called)
    self.assertFalse(self.services.template.GetProjectTemplates.called)
    self.assertEqual(page_data['config'].template_view.label0, 'yo')
 def setUp(self):
     self.project = fake.Project(project_name='proj1')
     self.commenter_view = framework_views.StuffUserView(
         111, '*****@*****.**', True)
     self.issue = fake.MakeTestIssue(self.project.project_id, 1234,
                                     'summary', 'New', 111)
     self.detail_url = 'http://test-detail-url.com/id=1234'
  def testGatherPageData_DefaultTemplatesNonMember(self, mockUserIsInProject):
    """If no template is specified, the default one is used based on
    whether the user is not a project member."""
    mr = testing_helpers.MakeMonorailRequest(
        path='/p/proj/issues/entry', services=self.services)
    mr.auth.user_view = framework_views.StuffUserView(100, 'user@invalid', True)
    user = self.services.user.TestAddUser('user@invalid', 100)
    self.services.template.GetTemplateSetForProject = Mock(
        return_value=[(1, 'one', False), (2, 'two', True)])
    config = self.services.config.GetProjectConfig(mr.cnxn, mr.project_id)
    config.default_template_for_users = 456
    config.default_template_for_developers = 789
    self.services.config.StoreConfig(mr.cnxn, config)

    mockUserIsInProject.return_value = False
    self.services.template.GetTemplateById = Mock(return_value=self.template)
    self.mox.StubOutWithMock(self.services.user, 'GetUser')
    self.services.user.GetUser(
        mox.IgnoreArg(), mox.IgnoreArg()).MultipleTimes().AndReturn(user)

    self.mox.ReplayAll()
    self.servlet.GatherPageData(mr)
    self.mox.VerifyAll()

    call_args = self.services.template.GetTemplateById.call_args[0]
    self.assertEqual(call_args[1], 456)
  def CheckRevealAllToMember(
      self, logged_in_user_id, expected, viewed_user_id=333, group_id=None):
    user_view = framework_views.StuffUserView(
        viewed_user_id, '*****@*****.**', True)

    if group_id:
      pass  # xxx re-implement groups

    users_by_id = {333: user_view}
    self.mr.auth.user_id = logged_in_user_id
    self.mr.auth.effective_ids = {logged_in_user_id}
    # Assert display name is obscured before the reveal.
    self.assertEqual('*****@*****.**', user_view.display_name)
    # Assert profile url contains user ID before the reveal.
    self.assertEqual('/u/%s/' % viewed_user_id, user_view.profile_url)
    framework_views.RevealAllEmailsToMembers(
        self.mr.auth, self.mr.project, users_by_id)
    self.assertEqual(expected, not user_view.obscure_email)
    if expected:
      # Assert display name is now revealed.
      self.assertEqual('*****@*****.**', user_view.display_name)
      # Assert profile url contains the email.
      self.assertEqual('/u/[email protected]/', user_view.profile_url)
    else:
      # Assert display name is still hidden.
      self.assertEqual('*****@*****.**', user_view.display_name)
      # Assert profile url still contains user ID.
      self.assertEqual('/u/%s/' % viewed_user_id, user_view.profile_url)
    def testFieldDefView_Approval(self):
        config = _MakeConfig()
        approver_view = framework_views.StuffUserView(
            111, '*****@*****.**', False)
        user_views = {111: approver_view}

        view = tracker_views.FieldDefView(self.approval_fd,
                                          config,
                                          user_views=user_views,
                                          approval_def=self.approval_def)
        self.assertEqual(view.approvers, [approver_view])
        self.assertEqual(view.survey, self.approval_def.survey)
        self.assertEqual(view.survey_questions, [view.survey])

        self.approval_def.survey = None
        view = tracker_views.FieldDefView(self.approval_fd,
                                          config,
                                          user_views=user_views,
                                          approval_def=self.approval_def)
        self.assertEqual(view.survey, '')
        self.assertEqual(view.survey_questions, [])

        self.approval_def.survey = 'Q1\nQ2\nQ3'
        view = tracker_views.FieldDefView(self.approval_fd,
                                          config,
                                          user_views=user_views,
                                          approval_def=self.approval_def)
        self.assertEqual(view.survey, self.approval_def.survey)
        self.assertEqual(view.survey_questions, ['Q1', 'Q2', 'Q3'])
    def testGatherUnifiedSettingsPageData(self):
        mr = self.mr
        mr.auth.user_view = framework_views.StuffUserView(
            100, 'user@invalid', True)
        mr.auth.user_view.profile_url = '/u/profile/url'
        userprefs = user_pb2.UserPrefs(prefs=[
            user_pb2.UserPrefValue(name='public_issue_notice', value='true')
        ])
        page_data = framework_helpers.UserSettings.GatherUnifiedSettingsPageData(
            mr.auth.user_id, mr.auth.user_view, mr.auth.user_pb, userprefs)

        expected_keys = [
            'settings_user',
            'settings_user_pb',
            'settings_user_is_banned',
            'self',
            'profile_url_fragment',
            'preview_on_hover',
            'settings_user_prefs',
        ]
        self.assertItemsEqual(expected_keys, list(page_data.keys()))

        self.assertEqual('profile/url', page_data['profile_url_fragment'])
        self.assertTrue(page_data['settings_user_prefs'].public_issue_notice)
        self.assertFalse(page_data['settings_user_prefs'].restrict_new_issues)
  def testProcessFormData_RejectPlacedholderSummary(self):
    mr = testing_helpers.MakeMonorailRequest(
        path='/p/proj/issues/entry')
    mr.auth.user_view = framework_views.StuffUserView(100, 'user@invalid', True)
    mr.perms = permissions.USER_PERMISSIONSET
    mr.template_name = 'rutabaga'
    post_data = fake.PostData(
        template_name=['rutabaga'],
        summary=[issueentry.PLACEHOLDER_SUMMARY],
        comment=['fake comment'],
        status=['New'])

    self.mox.StubOutWithMock(self.servlet, 'PleaseCorrect')
    self.servlet.PleaseCorrect(
        mr, component_required=None, fields=[], initial_blocked_on='',
        initial_blocking='', initial_cc='', initial_comment='fake comment',
        initial_components='', initial_owner='', initial_status='New',
        initial_summary='Enter one-line summary', initial_hotlists='',
        labels=[], template_name='rutabaga')
    self.mox.ReplayAll()

    url = self.servlet.ProcessFormData(mr, post_data)
    self.mox.VerifyAll()
    self.assertEqual('Summary is required', mr.errors.summary)
    self.assertIsNone(url)
Exemple #16
0
 def testServiceAccountCommenter(self):
     johndoe_bot = '*****@*****.**'
     commenter_view = framework_views.StuffUserView(111, johndoe_bot, True)
     self.assertEqual(
         ('johndoe via monorail <*****@*****.**>'),
         emailfmt.FormatFromAddr(self.project,
                                 commenter_view=commenter_view,
                                 reveal_addr=False))
  def setUp(self):
    self.config = tracker_bizobj.MakeDefaultProjectIssueConfig(789)
    self.config.field_defs = [
        tracker_bizobj.MakeFieldDef(
            1, 789, 'Goats', tracker_pb2.FieldTypes.INT_TYPE, None, None,
            False, False, False, None, None, None, False, None, None, None,
            None, 'Num of Goats in the season', False, is_phase_field=True),
        tracker_bizobj.MakeFieldDef(
            2, 789, 'DogNames', tracker_pb2.FieldTypes.STR_TYPE, None, None,
            False, False, False, None, None, None, False, None, None, None,
            None, 'good dog names', False),
        tracker_bizobj.MakeFieldDef(
            3, 789, 'Approval', tracker_pb2.FieldTypes.APPROVAL_TYPE,
            None, None, False, False, False, None, None, None, False, None,
            None, None, None, 'Tracks review from cows', False)
    ]
    self.config.approval_defs = [tracker_pb2.ApprovalDef(approval_id=3)]
    self.issue = MakeTestIssue(
        local_id=1, issue_id=100001, summary='One')
    self.issue.field_values = [
        tracker_bizobj.MakeFieldValue(
            1, 34, None, None, None, None, False, phase_id=23),
        tracker_bizobj.MakeFieldValue(
            1, 35, None, None, None, None, False, phase_id=24),
        tracker_bizobj.MakeFieldValue(
            2, None, 'Waffles', None, None, None, False),
    ]
    self.issue.phases = [
        tracker_pb2.Phase(phase_id=23, name='winter'),
        tracker_pb2.Phase(phase_id=24, name='summer')]
    self.issue.approval_values = [
        tracker_pb2.ApprovalValue(
            approval_id=3, approver_ids=[111, 222, 333])]
    self.users_by_id = {
        111: framework_views.StuffUserView(111, '*****@*****.**', False),
        222: framework_views.StuffUserView(222, '*****@*****.**', True),
    }

    self.summary_table_cell_kws = {
        'col': None,
        'users_by_id': {},
        'non_col_labels': [('lab', False)],
        'label_values': {},
        'related_issues': {},
        'config': 'fake_config',
        }
Exemple #18
0
 def testObscuredCommenter(self):
     commenter_view = framework_views.StuffUserView(111, '*****@*****.**',
                                                    True)
     self.assertEqual(
         u'u\u2026 via monorail '
         '<*****@*****.**>',
         emailfmt.NoReplyAddress(commenter_view=commenter_view,
                                 reveal_addr=False))
Exemple #19
0
 def testObscuredCommenter(self):
     commenter_view = framework_views.StuffUserView(111, '*****@*****.**',
                                                    True)
     self.assertEqual(
         u'u\u2026 via monorail <*****@*****.**>',
         emailfmt.FormatFromAddr(self.project,
                                 commenter_view=commenter_view,
                                 reveal_addr=False))
 def setUp(self):
   self.users_by_id = {
       111: framework_views.StuffUserView(111, '*****@*****.**', True),
       222: framework_views.StuffUserView(222, '*****@*****.**', True),
       999: framework_views.StuffUserView(999, '*****@*****.**', True),
       }
   self.services = service_manager.Services(
       project=fake.ProjectService(),
       config=fake.ConfigService(),
       issue=fake.IssueService(),
       user=fake.UserService(),
       usergroup=fake.UserGroupService())
   self.owner = self.services.user.TestAddUser('*****@*****.**', 111)
   self.member = self.services.user.TestAddUser('*****@*****.**', 222)
   self.visitor = self.services.user.TestAddUser('*****@*****.**', 999)
   self.project = self.services.project.TestAddProject(
       'proj', owner_ids=[111], committer_ids=[222])
   self.project.process_inbound_email = True
   self.issue = fake.MakeTestIssue(
       self.project.project_id, 1, 'summary', 'New', 111)
    def testGatherUnifiedSettingsPageData_NoUserPrefs(self):
        """If UserPrefs were not loaded, consider them all false."""
        mr = self.mr
        mr.auth.user_view = framework_views.StuffUserView(
            100, 'user@invalid', True)
        userprefs = None

        page_data = framework_helpers.UserSettings.GatherUnifiedSettingsPageData(
            mr.auth.user_id, mr.auth.user_view, mr.auth.user_pb, userprefs)

        self.assertFalse(page_data['settings_user_prefs'].public_issue_notice)
        self.assertFalse(page_data['settings_user_prefs'].restrict_new_issues)
  def testRevealAllEmail(self):
    users_by_id = {
        111: framework_views.StuffUserView(111, '*****@*****.**', True),
        222: framework_views.StuffUserView(222, '*****@*****.**', True),
        333: framework_views.StuffUserView(333, '*****@*****.**', True),
        999: framework_views.StuffUserView(999, '*****@*****.**', True),
        }
    # Assert display names are obscured before the reveal.
    self.assertEqual('*****@*****.**', users_by_id[111].display_name)
    self.assertEqual('*****@*****.**', users_by_id[222].display_name)
    self.assertEqual('*****@*****.**', users_by_id[333].display_name)
    self.assertEqual('*****@*****.**', users_by_id[999].display_name)

    framework_views.RevealAllEmails(users_by_id)

    self.assertFalse(users_by_id[111].obscure_email)
    self.assertFalse(users_by_id[222].obscure_email)
    self.assertFalse(users_by_id[333].obscure_email)
    self.assertFalse(users_by_id[999].obscure_email)
    # Assert display names are now revealed.
    self.assertEqual('*****@*****.**', users_by_id[111].display_name)
    self.assertEqual('*****@*****.**', users_by_id[222].display_name)
    self.assertEqual('*****@*****.**', users_by_id[333].display_name)
    self.assertEqual('*****@*****.**', users_by_id[999].display_name)
Exemple #23
0
    def testProcessFormData_RedirectToEnteredIssue(self):
        mr = testing_helpers.MakeMonorailRequest(path='/p/proj/issues/entry')
        mr.auth.user_view = framework_views.StuffUserView(
            100, 'user@invalid', True)
        mr.perms = permissions.EMPTY_PERMISSIONSET
        post_data = fake.PostData(summary=['fake summary'],
                                  comment=['fake comment'],
                                  status=['New'])

        self.mox.StubOutWithMock(self.servlet, 'CheckCaptcha')
        self.servlet.CheckCaptcha(mr, mox.IgnoreArg())
        self.mox.ReplayAll()
        url = self.servlet.ProcessFormData(mr, post_data)

        self.mox.VerifyAll()
        self.assertTrue('/p/proj/issues/detail?id=' in url)
  def testProcessFormData_RedirectToEnteredIssue(self):
    mr = testing_helpers.MakeMonorailRequest(
        path='/p/proj/issues/entry', project=self.project)
    mr.auth.user_view = framework_views.StuffUserView(100, 'user@invalid', True)
    mr.template_name = 'rutabaga'
    mr.auth.effective_ids = set([100])
    post_data = fake.PostData(
        template_name=['rutabaga'],
        summary=['fake summary'],
        comment=['fake comment'],
        status=['New'])

    self.mox.ReplayAll()
    url = self.servlet.ProcessFormData(mr, post_data)

    self.mox.VerifyAll()
    self.assertTrue('/p/proj/issues/detail?id=' in url)
  def testGatherPageData_DeepLinkSetsSummary(self):
    mr = testing_helpers.MakeMonorailRequest(
        path='/p/proj/issues/entry?summary=foo', services=self.services)
    mr.auth.user_view = framework_views.StuffUserView(100, 'user@invalid', True)
    user = self.services.user.TestAddUser('user@invalid', 100)
    mr.template_name = 'rutabaga'

    self.mox.StubOutWithMock(self.services.user, 'GetUser')
    self.services.user.GetUser(
        mox.IgnoreArg(), mox.IgnoreArg()).MultipleTimes().AndReturn(user)
    self.mox.ReplayAll()

    page_data = self.servlet.GatherPageData(mr)
    self.mox.VerifyAll()
    self.assertEqual(page_data['initial_owner'], 'user@invalid')
    self.assertEqual(page_data['initial_status'], 'New')
    self.assertFalse(page_data['clear_summary_on_click'])
    self.assertTrue(page_data['must_edit_summary'])
  def testGatherPageData_RestrictNewIssues(self):
    """Users with this pref set default to reporting issues with R-V-G."""
    self.mox.ReplayAll()
    mr = testing_helpers.MakeMonorailRequest(
        path='/p/proj/issues/entry', services=self.services)
    mr.auth.user_view = framework_views.StuffUserView(100, 'user@invalid', True)
    user = self.services.user.TestAddUser('user@invalid', 100)
    self.services.user.GetUser = Mock(return_value=user)
    self.services.template.GetTemplateById = Mock(return_value=self.template)

    mr.auth.user_id = 100
    page_data = self.servlet.GatherPageData(mr)
    self.assertNotIn('Restrict-View-Google', page_data['labels'])

    pref = user_pb2.UserPrefValue(name='restrict_new_issues', value='true')
    self.services.user.SetUserPrefs(self.cnxn, 100, [pref])
    page_data = self.servlet.GatherPageData(mr)
    self.assertIn('Restrict-View-Google', page_data['labels'])
 def setUp(self):
     self.project = fake.Project(project_name='proj1')
     self.project.process_inbound_email = True
     self.commenter_view = framework_views.StuffUserView(
         111, '*****@*****.**', True)
     self.expected_html_footer = (
         'You received this message because:<br/>  1. reason<br/><br/>You may '
         'adjust your notification preferences at:<br/><a href="https://'
         'example.com/hosting/settings">https://example.com/hosting/settings'
         '</a>')
     self.services = service_manager.Services(user=fake.UserService())
     self.member = self.services.user.TestAddUser('*****@*****.**', 222)
     self.issue = fake.MakeTestIssue(self.project.project_id,
                                     1234,
                                     'summary',
                                     'New',
                                     111,
                                     project_name='proj1')
     self.detail_url = 'http://test-detail-url.com/id=1234'
  def testGatherPageData_MembersOnlyTemplatesExcluded(self,
        mockUserIsInProject):
    """Templates with members_only=True are excluded from results
    when the user is not a member of the project."""
    mr = testing_helpers.MakeMonorailRequest(
        path='/p/proj/issues/entry', services=self.services)
    mr.auth.user_view = framework_views.StuffUserView(100, 'user@invalid', True)
    user = self.services.user.TestAddUser('user@invalid', 100)
    mr.template_name = 'rutabaga'
    self.services.template.GetTemplateSetForProject = Mock(
        return_value=[(1, 'one', False), (2, 'two', True)])
    mockUserIsInProject.return_value = False

    self.mox.StubOutWithMock(self.services.user, 'GetUser')
    self.services.user.GetUser(
        mox.IgnoreArg(), mox.IgnoreArg()).MultipleTimes().AndReturn(user)
    self.mox.ReplayAll()

    page_data = self.servlet.GatherPageData(mr)
    self.mox.VerifyAll()
    self.assertEqual(page_data['config'].template_names, ['one'])
  def testGatherPageData_TemplateAllowsKeepingSummary(self):
    mr = testing_helpers.MakeMonorailRequest(
        path='/p/proj/issues/entry', services=self.services)
    mr.auth.user_view = framework_views.StuffUserView(100, 'user@invalid', True)
    mr.template_name = 'rutabaga'
    user = self.services.user.TestAddUser('user@invalid', 100)

    self.mox.StubOutWithMock(self.services.user, 'GetUser')
    self.services.user.GetUser(
        mox.IgnoreArg(), mox.IgnoreArg()).MultipleTimes().AndReturn(user)
    self.mox.ReplayAll()
    config = self.services.config.GetProjectConfig(mr.cnxn, mr.project_id)
    self.services.config.StoreConfig(mr.cnxn, config)
    self.template.summary_must_be_edited = False

    page_data = self.servlet.GatherPageData(mr)
    self.mox.VerifyAll()
    self.assertEqual(page_data['initial_owner'], 'user@invalid')
    self.assertEqual(page_data['initial_status'], 'New')
    self.assertFalse(page_data['clear_summary_on_click'])
    self.assertFalse(page_data['must_edit_summary'])
  def testProcessFormData_TemplateNameMissing(self):
    """POST doesn't fail if no template_name is passed."""
    mr = testing_helpers.MakeMonorailRequest(
        path='/p/proj/issues/entry', project=self.project)
    mr.auth.user_view = framework_views.StuffUserView(100, 'user@invalid', True)
    mr.auth.effective_ids = set([100])

    self.services.template.GetTemplateById.return_value = None
    self.services.template.GetProjectTemplates.return_value = [
        tracker_pb2.TemplateDef(members_only=True, content=''),
        tracker_pb2.TemplateDef(members_only=False, content='')]
    post_data = fake.PostData(
        summary=['fake summary'],
        comment=['fake comment'],
        status=['New'])

    self.mox.ReplayAll()
    url = self.servlet.ProcessFormData(mr, post_data)

    self.mox.VerifyAll()
    self.assertTrue('/p/proj/issues/detail?id=' in url)