def testIndexOrLexicalList_ApprovalStatus(self): art = fake.MakeTestIssue(789, 1, 'sum 2', 'New', 111) art.labels = ['samename-value1'] art.approval_values = [tracker_pb2.ApprovalValue(approval_id=4)] all_field_defs = [ tracker_bizobj.MakeFieldDef(3, 789, 'samename', tracker_pb2.FieldTypes.INT_TYPE, None, None, False, False, False, None, None, None, False, None, None, None, None, 'cow spots', False), 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) ] accessor = sorting._IndexOrLexicalList([], all_field_defs, 'samename', {}) self.assertEqual([0, 'value1'], accessor(art)) neg_accessor = MakeDescending(accessor) self.assertEqual( [sorting.DescendingValue('value1'), sorting.DescendingValue(0)], neg_accessor(art))
def testShiftEnumFieldsIntoLabels_FoundSomeEnumFields(self): self.config.field_defs.append( tracker_bizobj.MakeFieldDef( 123, 789, 'Component', tracker_pb2.FieldTypes.ENUM_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'What HW part is affected?', False)) self.config.field_defs.append( tracker_bizobj.MakeFieldDef( 234, 789, 'Size', tracker_pb2.FieldTypes.ENUM_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'How big is this work item?', False)) labels = ['Security', 'Performance', 'Pri-1', 'M-2'] labels_remove = ['ReleaseBlock'] field_val_strs = {123: ['CPU']} field_val_strs_remove = {234: ['Small']} field_helpers.ShiftEnumFieldsIntoLabels(labels, labels_remove, field_val_strs, field_val_strs_remove, self.config) self.assertEqual( ['Security', 'Performance', 'Pri-1', 'M-2', 'Component-CPU'], labels) self.assertEqual(['ReleaseBlock', 'Size-Small'], labels_remove) self.assertEqual({}, field_val_strs) self.assertEqual({}, field_val_strs_remove)
def testIndexOrLexicalList_CustomFields(self): art = fake.MakeTestIssue(789, 1, 'sum 2', 'New', 111) art.labels = ['samename-value1'] art.field_values = [ tracker_bizobj.MakeFieldValue(3, 6078, None, None, None, None, False) ] all_field_defs = [ tracker_bizobj.MakeFieldDef(3, 789, 'samename', tracker_pb2.FieldTypes.INT_TYPE, None, None, False, False, False, None, None, None, False, None, None, None, None, 'cow spots', False), 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), tracker_bizobj.MakeFieldDef(4, 788, 'notsamename', tracker_pb2.FieldTypes.APPROVAL_TYPE, None, None, False, False, False, None, None, None, False, None, None, None, None, 'should get filtered out', False) ] accessor = sorting._IndexOrLexicalList([], all_field_defs, 'samename', {}) self.assertEqual([6078, 'value1'], accessor(art)) neg_accessor = MakeDescending(accessor) self.assertEqual([sorting.DescendingValue('value1'), -6078], neg_accessor(art))
def testParseFieldValues_Normal(self): fd_int = tracker_bizobj.MakeFieldDef(123, 789, 'CPU', tracker_pb2.FieldTypes.INT_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'doc', False) fd_date = tracker_bizobj.MakeFieldDef(124, 789, 'Deadline', tracker_pb2.FieldTypes.DATE_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'doc', False) self.config.field_defs.extend([fd_int, fd_date]) field_val_strs = {123: ['80386', '68040'], 124: ['2009-02-13']} field_values = field_helpers.ParseFieldValues(self.mr.cnxn, self.services.user, field_val_strs, self.config) fv1 = tracker_bizobj.MakeFieldValue(123, 80386, None, None, None, False) fv2 = tracker_bizobj.MakeFieldValue(123, 68040, None, None, None, False) fv3 = tracker_bizobj.MakeFieldValue(124, None, None, None, 1234483200, False) self.assertEqual([fv1, fv2, fv3], field_values)
def testGatherPageData_Approvals(self): user = self.services.user.TestAddUser('user@invalid', 100) mr = testing_helpers.MakeMonorailRequest( path='/p/proj/issues/entry', services=self.services) mr.auth.user_view = framework_views.MakeUserView( 'cnxn', self.services.user, 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() config = self.services.config.GetProjectConfig(mr.cnxn, mr.project_id) config.field_defs = [ tracker_bizobj.MakeFieldDef( 24, mr.project_id, 'UXReview', tracker_pb2.FieldTypes.APPROVAL_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'doc', False)] self.services.config.StoreConfig(mr.cnxn, config) template = tracker_pb2.TemplateDef() template.phases = [tracker_pb2.Phase( phase_id=1, rank=4, name='Stable')] template.approval_values = [tracker_pb2.ApprovalValue( approval_id=24, phase_id=1, status=tracker_pb2.ApprovalStatus.NEEDS_REVIEW)] self.services.template.GetTemplateByName.return_value = template page_data = self.servlet.GatherPageData(mr) self.mox.VerifyAll() self.assertEqual(page_data['approvals'][0].field_name, 'UXReview') self.assertEqual(page_data['initial_phases'][0], tracker_pb2.Phase(phase_id=1, name='Stable', rank=4)) self.assertEqual(page_data['prechecked_approvals'], ['24_phase_0']) self.assertEqual(page_data['required_approval_ids'], [24]) # phase fields row shown when config contains phase fields. config.field_defs.append(tracker_bizobj.MakeFieldDef( 26, mr.project_id, 'GateTarget', tracker_pb2.FieldTypes.INT_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'doc', False, is_phase_field=True)) self.services.config.StoreConfig(mr.cnxn, config) page_data = self.servlet.GatherPageData(mr) self.assertEqual(page_data['issue_phase_names'], ['stable']) # approval subfields in config hidden when chosen template does not contain # its parent approval template = tracker_pb2.TemplateDef() self.services.template.GetTemplateByName.return_value = template page_data = self.servlet.GatherPageData(mr) self.assertEqual(page_data['approvals'], []) # phase fields row hidden when template has no phases self.assertEqual(page_data['issue_phase_names'], [])
def testConvertApprovals(self): """Test we can convert ApprovalValues.""" cnxn = None config = tracker_bizobj.MakeDefaultProjectIssueConfig(789) config.field_defs = [ tracker_bizobj.MakeFieldDef( 1, 789, 'DesignReview', tracker_pb2.FieldTypes.APPROVAL_TYPE, None, None, False, False, False, None, None, None, False, None, None, None, None, 'doc', False), tracker_bizobj.MakeFieldDef( 2, 789, 'PrivacyReview', tracker_pb2.FieldTypes.APPROVAL_TYPE, None, None, False, False, False, 0, 99, None, False, None, None, None, None, 'doc', False), tracker_bizobj.MakeFieldDef( 5, 789, 'UXReview', tracker_pb2.FieldTypes.APPROVAL_TYPE, None, None, False, False, False, None, None, None, False, None, None, None, None, 'doc', False), tracker_bizobj.MakeFieldDef( 6, 789, 'Homepage', tracker_pb2.FieldTypes.URL_TYPE, None, None, False, False, False, None, None, None, False, None, None, None, None, 'doc', False), ] phases = [ tracker_pb2.Phase(phase_id=1), tracker_pb2.Phase(phase_id=2, name="JustAPhase", rank=3), ] ts = 1536260059 expected = [ api_pb2_v1.Approval( approvalName="DesignReview", approvers=[self.person_1], setter=self.person_1, status=api_pb2_v1.ApprovalStatus.needsReview, setOn=datetime.datetime.fromtimestamp(ts), ), api_pb2_v1.Approval( approvalName="UXReview", approvers=[self.person_1], status=api_pb2_v1.ApprovalStatus.notSet, phaseName="JustAPhase", ), ] avs = [ tracker_pb2.ApprovalValue( approval_id=1, approver_ids=[111], setter_id=111, status=tracker_pb2.ApprovalStatus.NEEDS_REVIEW, set_on=ts), tracker_pb2.ApprovalValue( approval_id=5, approver_ids=[111], phase_id=2) ] actual = api_pb2_v1_helpers.convert_approvals( cnxn, avs, self.services, config, phases) self.assertEqual(actual, expected)
def testConvertFieldValues_ClearAndRemove(self): """The client wants to clear and remove some custom fields.""" mar = mock.Mock() mar.config = tracker_bizobj.MakeDefaultProjectIssueConfig(789) mar.config.field_defs = [ tracker_bizobj.MakeFieldDef(1, 789, 'Priority', tracker_pb2.FieldTypes.ENUM_TYPE, None, None, False, False, False, None, None, None, False, None, None, None, None, 'doc', False), tracker_bizobj.MakeFieldDef(11, 789, 'OS', tracker_pb2.FieldTypes.ENUM_TYPE, None, None, False, False, False, None, None, None, False, None, None, None, None, 'doc', False), tracker_bizobj.MakeFieldDef(2, 789, 'EstDays', tracker_pb2.FieldTypes.INT_TYPE, None, None, False, False, False, 0, 99, None, False, None, None, None, None, 'doc', False), tracker_bizobj.MakeFieldDef(3, 789, 'Nickname', tracker_pb2.FieldTypes.STR_TYPE, None, None, False, False, False, None, None, None, False, None, None, None, None, 'doc', False), ] field_values = [ api_pb2_v1.FieldValue( fieldName='Priority', fieldValue='High', operator=api_pb2_v1.FieldValueOperator.remove), api_pb2_v1.FieldValue( fieldName='OS', operator=api_pb2_v1.FieldValueOperator.clear), api_pb2_v1.FieldValue( fieldName='EstDays', operator=api_pb2_v1.FieldValueOperator.clear), api_pb2_v1.FieldValue( fieldName='Nickname', fieldValue='Scout', operator=api_pb2_v1.FieldValueOperator.remove), ] actual = api_pb2_v1_helpers.convert_field_values( field_values, mar, self.services) (fv_list_add, fv_list_remove, fv_list_clear, label_list_add, label_list_remove) = actual self.assertEquals([], fv_list_add) self.assertEquals([ tracker_bizobj.MakeFieldValue(3, None, 'Scout', None, None, None, False) ], fv_list_remove) self.assertEquals([11, 2], fv_list_clear) self.assertEquals([], label_list_add) self.assertEquals(['Priority-High'], label_list_remove)
def setUp(self): self.approval_fd = tracker_bizobj.MakeFieldDef( 1, 789, 'LaunchApproval', tracker_pb2.FieldTypes.APPROVAL_TYPE, None, None, True, True, False, 3, 99, None, False, None, None, None, 'no_action', 'descriptive docstring', False, None, False) self.approval_def = tracker_pb2.ApprovalDef(approval_id=1, approver_ids=[111], survey='question?') self.field_def = tracker_bizobj.MakeFieldDef( 2, 789, 'AffectedUsers', tracker_pb2.FieldTypes.INT_TYPE, None, None, True, True, False, 3, 99, None, False, None, None, None, 'no_action', 'descriptive docstring', False, 1, False)
def testMakeFieldDef_Full(self): fd = tracker_bizobj.MakeFieldDef( 1, 789, 'Size', tracker_pb2.FieldTypes.INT_TYPE, None, None, False, False, False, 1, 100, None, False, None, None, None, 'no_action', 'Some field', False) self.assertEqual(1, fd.min_value) self.assertEqual(100, fd.max_value) fd = tracker_bizobj.MakeFieldDef( 1, 789, 'Size', tracker_pb2.FieldTypes.STR_TYPE, None, None, False, False, False, None, None, 'A.*Z', False, 'EditIssue', None, None, 'no_action', 'Some field', False) self.assertEqual('A.*Z', fd.regex) self.assertEqual('EditIssue', fd.needs_perm)
def testConvertFieldValues_Errors(self): """We don't crash on bad requests.""" mar = mock.Mock() mar.config = tracker_bizobj.MakeDefaultProjectIssueConfig(789) mar.config.field_defs = [ tracker_bizobj.MakeFieldDef(2, 789, 'EstDays', tracker_pb2.FieldTypes.INT_TYPE, None, None, False, False, False, 0, 99, None, False, None, None, None, None, 'doc', False), ] field_values = [ api_pb2_v1.FieldValue( fieldName='Unknown', operator=api_pb2_v1.FieldValueOperator.clear), ] actual = api_pb2_v1_helpers.convert_field_values( field_values, mar, self.services) (fv_list_add, fv_list_remove, fv_list_clear, label_list_add, label_list_remove) = actual self.assertEquals([], fv_list_add) self.assertEquals([], fv_list_remove) self.assertEquals([], fv_list_clear) self.assertEquals([], label_list_add) self.assertEquals([], label_list_remove)
def testParseFieldValues_EmptyPhases(self): field_val_strs = {126: ['70']} phase_field_val_strs = {} fd_phase = tracker_bizobj.MakeFieldDef( 126, 789, 'Target', tracker_pb2.FieldTypes.INT_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'milestone target', False, is_phase_field=True) self.config.field_defs.extend([fd_phase]) field_values = field_helpers.ParseFieldValues(self.mr.cnxn, self.services.user, field_val_strs, phase_field_val_strs, self.config) self.assertEqual([], field_values)
def testProcessFormData_BadUserField(self): """Test PFD when a nonexistent user is added as a field value.""" local_id_1, _ = self.services.issue.CreateIssue( self.cnxn, self.services, 789, 'issue summary', 'New', 111, [], [], [], [], 111, 'test issue') mr = testing_helpers.MakeMonorailRequest( project=self.project, perms=permissions.OWNER_ACTIVE_PERMISSIONSET, user_info={'user_id': 111}) mr.local_id_list = [local_id_1] fd = tracker_bizobj.MakeFieldDef(12345, 789, 'PM', tracker_pb2.FieldTypes.USER_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'doc', False) self.config.field_defs.append(fd) post_data = fake.PostData(custom_12345=['*****@*****.**'], owner=['*****@*****.**'], can=[1], q=[''], colspec=[''], sort=[''], groupby=[''], start=[0], num=[100]) self._MockMethods() self.servlet.ProcessFormData(mr, post_data) self.assertEqual('User not found', mr.errors.custom_fields[0].message)
def testProcessFormData_CustomFields(self): """Test PFD processes edits to custom fields.""" local_id_1, _ = self.services.issue.CreateIssue( self.cnxn, self.services, 789, 'issue summary', 'New', 111, [], [], [], [], 111, 'test issue') mr = testing_helpers.MakeMonorailRequest( project=self.project, perms=permissions.OWNER_ACTIVE_PERMISSIONSET, user_info={'user_id': 111}) mr.local_id_list = [local_id_1] fd = tracker_bizobj.MakeFieldDef(12345, 789, 'CPU', tracker_pb2.FieldTypes.INT_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'doc', False) self.config.field_defs.append(fd) post_data = fake.PostData(custom_12345=['111'], owner=['*****@*****.**'], can=[1], q=[''], colspec=[''], sort=[''], groupby=[''], start=[0], num=[100]) self._MockMethods() self.servlet.ProcessFormData(mr, post_data) self.assertEqual((tracker_pb2.FieldID.CUSTOM, '111'), self.GetFirstAmendment(789, local_id_1))
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 testParseOneFieldValue(self): fd = tracker_bizobj.MakeFieldDef(123, 789, 'Target', tracker_pb2.FieldTypes.INT_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'milestone target', False, is_phase_field=True) phase_fvs = field_helpers.ParseOnePhaseFieldValue( self.mr.cnxn, self.services.user, fd, '70', [30, 40]) self.assertEqual(len(phase_fvs), 2) self.assertEqual(phase_fvs[0].phase_id, 30) self.assertEqual(phase_fvs[1].phase_id, 40)
def test_UrlType(self): fd = tracker_bizobj.MakeFieldDef(123, 789, 'CPU', tracker_pb2.FieldTypes.URL_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'doc', False) fv = tracker_bizobj.MakeFieldValue(123, None, None, None, None, 'www.google.com', False) msg = field_helpers.ValidateCustomField(self.mr, self.mr.project, self.services, fd, fv) self.assertIsNone(msg) fv.url_value = 'go/puppies' msg = field_helpers.ValidateCustomField(self.mr, self.mr.project, self.services, fd, fv) self.assertIsNone(msg) fv.url_value = 'go/213' msg = field_helpers.ValidateCustomField(self.mr, self.mr.project, self.services, fd, fv) self.assertIsNone(msg) fv.url_value = 'puppies' msg = field_helpers.ValidateCustomField(self.mr, self.mr.project, self.services, fd, fv) self.assertEqual('Value must be a valid url', msg)
def setUp(self): self.services = service_manager.Services( user=fake.UserService(), config=fake.ConfigService(), project=fake.ProjectService(), usergroup=fake.UserGroupService()) self.project = self.services.project.TestAddProject('proj') self.mr = testing_helpers.MakeMonorailRequest( project=self.project) self.config = self.services.config.GetProjectConfig( 'fake cnxn', self.project.project_id) self.fd_1 = tracker_bizobj.MakeFieldDef( 1, 789, 'UXReview', tracker_pb2.FieldTypes.STR_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'Approval for UX review', False) self.fd_2 = tracker_bizobj.MakeFieldDef( 2, 789, 'UXReview', tracker_pb2.FieldTypes.STR_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'Approval for UX review', False) self.fd_3 = tracker_bizobj.MakeFieldDef( 3, 789, 'UXApproval', tracker_pb2.FieldTypes.APPROVAL_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'Approval for UX review', False) self.fd_4 = tracker_bizobj.MakeFieldDef( 4, 789, 'TestApproval', tracker_pb2.FieldTypes.APPROVAL_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'Approval for Test review', False) self.fd_5 = tracker_bizobj.MakeFieldDef( 5, 789, 'SomeApproval', tracker_pb2.FieldTypes.APPROVAL_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'Approval for Test review', False) self.ad_3 = tracker_pb2.ApprovalDef(approval_id=3) self.ad_4 = tracker_pb2.ApprovalDef(approval_id=4) self.ad_5 = tracker_pb2.ApprovalDef(approval_id=5) self.cd_1 = tracker_bizobj.MakeComponentDef( 1, 789, 'BackEnd', 'doc', False, [111], [], 100000, 222) self.services.user.TestAddUser('*****@*****.**', 111) self.services.user.TestAddUser('*****@*****.**', 222) self.services.user.TestAddUser('*****@*****.**', 333) self.services.project.TestAddProjectMembers( [111], self.project, 'OWNER_ROLE')
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', }
def setUp(self): self.services = service_manager.Services(user=fake.UserService(), config=fake.ConfigService(), project=fake.ProjectService()) self.servlet = fielddetail.FieldDetail('req', 'res', services=self.services) self.project = self.services.project.TestAddProject('proj') self.mr = testing_helpers.MakeMonorailRequest( project=self.project, perms=permissions.OWNER_ACTIVE_PERMISSIONSET) self.config = self.services.config.GetProjectConfig( 'fake cnxn', self.project.project_id) self.services.config.StoreConfig('fake cnxn', self.config) self.fd = tracker_bizobj.MakeFieldDef(123, 789, 'CPU', tracker_pb2.FieldTypes.INT_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'doc', False) self.config.field_defs.append(self.fd) self.services.user.TestAddUser('*****@*****.**', 111) self.services.user.TestAddUser('*****@*****.**', 222) self.mr.field_name = 'CPU' # Approvals self.approval_def = tracker_pb2.ApprovalDef(approval_id=234, approver_ids=[111], survey='Question 1?') self.sub_fd = tracker_pb2.FieldDef(field_name='UIMocks', approval_id=234, applicable_type='') self.sub_fd_deleted = tracker_pb2.FieldDef(field_name='UIMocksDeleted', approval_id=234, applicable_type='', is_deleted=True) self.config.field_defs.extend([self.sub_fd, self.sub_fd_deleted]) self.config.approval_defs.append(self.approval_def) self.approval_fd = tracker_bizobj.MakeFieldDef( 234, 789, 'UIReview', tracker_pb2.FieldTypes.APPROVAL_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'doc', False) self.config.field_defs.append(self.approval_fd) self.mox = mox.Mox()
def testProcessDeleteField_subfields(self): approval_fd = tracker_bizobj.MakeFieldDef( 3, 789, 'Legal', tracker_pb2.FieldTypes.APPROVAL_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'doc', False) self.fd.approval_id = 3 self.config.field_defs.append(approval_fd) self.servlet._ProcessDeleteField(self.mr, self.config, approval_fd) self.assertTrue(self.fd.is_deleted) self.assertTrue(approval_fd.is_deleted)
def testFieldNameErrorMessage_AlreadyInUse(self): fd = tracker_bizobj.MakeFieldDef(123, 789, 'CPU', tracker_pb2.FieldTypes.INT_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'doc', False) self.config.field_defs.append(fd) self.assertEqual('That name is already in use.', fieldcreate.FieldNameErrorMessage('CPU', self.config))
def testFieldNameErrorMessage_IncludesExisting(self): fd = tracker_bizobj.MakeFieldDef(123, 789, 'opt', tracker_pb2.FieldTypes.INT_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'doc', False) self.config.field_defs.append(fd) self.assertEqual( 'An existing field name is a prefix of that name.', fieldcreate.FieldNameErrorMessage('opt-in', self.config))
def testParseOneFieldValue_UrlType(self): fd = tracker_bizobj.MakeFieldDef(123, 789, 'Design Doc', tracker_pb2.FieldTypes.URL_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'doc', False) fv = field_helpers.ParseOneFieldValue(self.mr.cnxn, self.services.user, fd, 'www.google.com') self.assertEqual(fv.field_id, 123) self.assertEqual(fv.url_value, 'http://www.google.com')
def testParseOneFieldValue_DateType(self): fd = tracker_bizobj.MakeFieldDef(123, 789, 'Deadline', tracker_pb2.FieldTypes.DATE_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'doc', False) fv = field_helpers.ParseOneFieldValue(self.mr.cnxn, self.services.user, fd, '2009-02-13') self.assertEqual(fv.field_id, 123) self.assertEqual(fv.date_value, 1234483200)
def testParseOneFieldValue_StrType(self): fd = tracker_bizobj.MakeFieldDef(123, 789, 'Foo', tracker_pb2.FieldTypes.STR_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'doc', False) fv = field_helpers.ParseOneFieldValue(self.mr.cnxn, self.services.user, fd, '8675309') self.assertEqual(fv.field_id, 123) self.assertEqual(fv.str_value, '8675309')
def testParseUserQuery_PhaseFields(self): fd = tracker_bizobj.MakeFieldDef( 1, self.project_id, 'EstDays', tracker_pb2.FieldTypes.INT_TYPE, 'applic', 'applic', False, False, False, None, None, None, False, None, None, None, 'no_action', 'doc', False, is_phase_field=True) self.default_config.field_defs.append(fd) ast = query2ast.ParseUserQuery( 'UXReview.EstDays>3', '', BUILTIN_ISSUE_FIELDS, self.default_config) cond1 = ast.conjunctions[0].conds[0] self.assertEqual( MakeCond(GT, [fd], ['3'], [3], phase_name='uxreview'), cond1)
def testParseOneFieldValue_UserType(self): self.services.user.TestAddUser('*****@*****.**', 111) fd = tracker_bizobj.MakeFieldDef(123, 789, 'Foo', tracker_pb2.FieldTypes.USER_TYPE, None, '', False, False, False, None, None, '', False, '', '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', 'doc', False) fv = field_helpers.ParseOneFieldValue(self.mr.cnxn, self.services.user, fd, '*****@*****.**') self.assertEqual(fv.field_id, 123) self.assertEqual(fv.user_id, 111)
def SetUpFieldDefs( self, field_id, project_id, field_name, field_type_int, min_value=0, max_value=100, needs_member=False, docstring='doc'): self.config = self.services.config.GetProjectConfig( 'fake cnxn', project_id) self.services.config.StoreConfig('fake cnxn', self.config) fd = tracker_bizobj.MakeFieldDef( field_id, project_id, field_name, field_type_int, '', '', False, False, False, min_value, max_value, None, needs_member, None, '', tracker_pb2.NotifyTriggers.NEVER, 'no_action', docstring, False) self.config.field_defs.append(fd)
def setUp(self): self.services = service_manager.Services( user=fake.UserService(), usergroup=fake.UserGroupService(), features=fake.FeaturesService(), issue=fake.IssueService(), project=fake.ProjectService(), config=fake.ConfigService(), issue_star=fake.IssueStarService()) self.servlet = dateaction.IssueDateActionTask('req', 'res', services=self.services) self.mox = mox.Mox() self.config = self.services.config.GetProjectConfig('cnxn', 789) self.config.field_defs = [ tracker_bizobj.MakeFieldDef( 123, 789, 'NextAction', tracker_pb2.FieldTypes.DATE_TYPE, '', '', False, False, False, None, None, None, False, '', None, None, tracker_pb2.DateAction.PING_OWNER_ONLY, 'Date of next expected progress update', False), tracker_bizobj.MakeFieldDef(124, 789, 'EoL', tracker_pb2.FieldTypes.DATE_TYPE, '', '', False, False, False, None, None, None, False, '', None, None, tracker_pb2.DateAction.PING_OWNER_ONLY, 'doc', False), tracker_bizobj.MakeFieldDef(125, 789, 'TLsBirthday', tracker_pb2.FieldTypes.DATE_TYPE, '', '', False, False, False, None, None, None, False, '', None, None, tracker_pb2.DateAction.NO_ACTION, 'doc', False), ] self.services.config.StoreConfig('cnxn', self.config) self.project = self.services.project.TestAddProject('proj', project_id=789) self.owner = self.services.user.TestAddUser('*****@*****.**', 111) self.date_action_user = self.services.user.TestAddUser( '*****@*****.**', 555)
def testParseUserQuery_SearchWithinCustomFields(self): """Enums are treated as labels, other fields are kept as fields.""" fd1 = tracker_bizobj.MakeFieldDef( 1, self.project_id, 'Size', tracker_pb2.FieldTypes.ENUM_TYPE, 'applic', 'applic', False, False, False, None, None, None, False, None, None, None, 'no_action', 'doc', False) fd2 = tracker_bizobj.MakeFieldDef( 1, self.project_id, 'EstDays', tracker_pb2.FieldTypes.INT_TYPE, 'applic', 'applic', False, False, False, None, None, None, False, None, None, None, 'no_action', 'doc', False) self.default_config.field_defs.extend([fd1, fd2]) ast = query2ast.ParseUserQuery( 'Size:Small EstDays>3', '', BUILTIN_ISSUE_FIELDS, self.default_config) cond1 = ast.conjunctions[0].conds[0] cond2 = ast.conjunctions[0].conds[1] self.assertEqual( MakeCond(KEY_HAS, [BUILTIN_ISSUE_FIELDS['label']], ['size-small'], []), cond1) self.assertEqual( MakeCond(GT, [fd2], ['3'], [3]), cond2)