def test_complete_milestone_retarget_tickets(self): name = 'milestone1' target = 'milestone2' insert_ticket(self.env, summary='Ticket 1', milestone=name) insert_ticket(self.env, summary='Ticket 2', milestone=name) ps = PermissionSystem(self.env) ps.grant_permission('user1', 'TICKET_ADMIN') ps.grant_permission('user1', 'MILESTONE_MODIFY') req = MockRequest(self.env, authname='user1', method='POST', path_info='/admin/ticket/milestones/%s' % name, args=dict(action='edit', save='Submit changes', name=name, description='', retarget='on', target=target, comment='', completed='on', completeddate='May 20, 2020, 9:07:52 PM')) mod = AdminModule(self.env) self.assertTrue(mod.match_request(req)) with self.assertRaises(RequestDone): mod.process_request(req) self.assertEqual(2, len(req.chrome['notices'])) self.assertEqual( 'The open tickets associated with milestone "milestone1" ' 'have been retargeted to milestone "milestone2".', req.chrome['notices'][0]) self.assertEqual('Your changes have been saved.', req.chrome['notices'][1]) self.assertEqual([], req.chrome['warnings']) self.assertEqual(['303 See Other'], req.status_sent) self.assertEqual('http://example.org/trac.cgi/admin/ticket/milestones', req.headers_sent['Location']) self.assertTrue(Milestone(self.env, name).is_completed) self.assertEqual(target, Ticket(self.env, 1)['milestone']) self.assertEqual(target, Ticket(self.env, 2)['milestone'])
def setUp(self): self.env = EnvironmentStub(default_data=True) self.milestone1 = Milestone(self.env) self.milestone1.name = 'Test' self.milestone1.insert() self.milestone2 = Milestone(self.env) self.milestone2.name = 'Test2' self.milestone2.insert() tkt1 = insert_ticket(self.env, summary='Foo', milestone='Test', owner='foman', status='new') tkt2 = insert_ticket(self.env, summary='Bar', milestone='Test', status='closed', owner='barman') tkt3 = insert_ticket(self.env, summary='Sum', milestone='Test', owner='suman', status='reopened') self.tkt1 = tkt1 self.tkt2 = tkt2 self.tkt3 = tkt3 prov = DefaultTicketGroupStatsProvider(ComponentManager()) prov.env = self.env prov.config = self.env.config self.stats = prov.get_ticket_group_stats([tkt1.id, tkt2.id, tkt3.id])
def test_resource_exists_valid_resource_id(self): insert_ticket(self.env) r1 = Resource('ticket', 1) r2 = Resource('ticket', 2) self.assertTrue(self.ticket_system.resource_exists(r1)) self.assertFalse(self.ticket_system.resource_exists(r2))
def ticket_setup(tc): config = tc.env.config config.set('ticket-custom', 'custom1', 'text') config.save() insert_ticket(tc.env, reporter='santa', summary='This is the summary', status='new')
def comment_setup(tc): ticket1 = insert_ticket(tc.env, reporter='santa', summary='This is the summary for ticket 1', status='new') ticket1.save_changes(comment='This is the comment for ticket 1') ticket2 = insert_ticket(tc.env, reporter='claws', summary='This is the summary for ticket 2', status='closed') ticket2.save_changes(comment='This is the comment for ticket 2')
def query2_setup(tc): insert_ticket(tc.env, reporter='santa', summary='This is the summary', status='new') insert_ticket(tc.env, reporter='claus', summary='This is another summary', status='new')
def macro_setup(tc): tc.env = EnvironmentStub(enable=('trac.*', 'tracopt.ticket.commit_updater.*',)) insert_ticket(tc.env, summary='the summary', status='new') def _get_repository(reponame): return Mock(get_changeset=_get_changeset, resource=None) def _get_changeset(rev=None): return Mock(message="the message. refs #1. ", rev=rev) setattr(RepositoryManager(tc.env), 'get_repository', _get_repository)
def _make_tickets(self, num): self.tickets = [] for i in xrange(num): ticket = insert_ticket(self.env, reporter='someone', summary=random_sentence()) self.tickets.append(ticket)
def test_component_change(self): """New ticket owner is updated when the component is changed. """ self._add_component('component3', 'cowner3') self._add_component('component4', 'cowner4') ticket = insert_ticket(self.env, reporter='reporter1', summary='the summary', component='component3', owner='cowner3', status='new') req = MockRequest(self.env, method='POST', args={ 'id': ticket.id, 'field_component': 'component4', 'submit': True, 'action': 'leave', 'view_time': str(to_utimestamp(ticket['changetime'])), }) self.assertRaises(RequestDone, self.ticket_module.process_request, req) ticket = Ticket(self.env, ticket.id) self.assertEqual('component4', ticket['component']) self.assertEqual('cowner4', ticket['owner'])
def test_ticket_comment_remove_error_invalid_comment_id(self): """ResourceNotFound error reported when comment does not exist.""" ticket = insert_ticket(self.env) ticket.save_changes('user1', 'the comment') rv, output = self.execute('ticket remove_comment 1 2') self.assertEqual(2, rv, output) self.assertExpectedResult(output)
def test_get_actions_by_operation_for_req(self): """Request with no permission checking.""" req = MockRequest(self.env, path_info='/ticket/1') ticket = insert_ticket(self.env, status='new') actions = self.ctlr.get_actions_by_operation_for_req(req, ticket, 'set_owner') self.assertEqual([(0, u'change_owner'), (0, u'reassign')], actions)
def _create_a_ticket_with_email(self): return insert_ticket(self.env, owner='*****@*****.**', reporter='*****@*****.**', cc='cc1, [email protected]', summary='Foo', description='Bar')
def _create_a_ticket(self): return insert_ticket(self.env, owner='', reporter='santa', summary='Foo', description='Bar', foo='This is a custom field')
def test_ticket_comment_remove_ok(self): """Ticket comment is successfully deleted.""" ticket = insert_ticket(self.env) ticket.save_changes('user1', 'the comment') rv, output = self.execute('ticket remove_comment 1 1') self.assertEqual(0, rv, output) self.assertExpectedResult(output)
def setUp(self): self.env = EnvironmentStub(default_data=True) self.perm_sys = PermissionSystem(self.env) self.ctlr = TicketSystem(self.env).action_controllers[0] self.req1 = MockRequest(self.env, authname='user1') self.req2 = MockRequest(self.env, authname='user2') self.ticket = insert_ticket(self.env, status='invalid')
def test_get_actions_by_operation_for_req_with_ticket_modify(self): """User without TICKET_MODIFY won't have reassign action.""" req = MockRequest(self.env, authname='user1', path_info='/ticket/1') ticket = insert_ticket(self.env, status='new') actions = self.ctlr.get_actions_by_operation_for_req(req, ticket, 'set_owner') self.assertEqual([(0, u'change_owner')], actions)
def test_get_actions_by_operation_for_req_without_ticket_modify(self): """User with TICKET_MODIFY will have reassign action.""" PermissionSystem(self.env).grant_permission('user1', 'TICKET_MODIFY') req = MockRequest(self.env, authname='user1', path_info='/ticket/1') ticket = insert_ticket(self.env, status='new') actions = self.ctlr.get_actions_by_operation_for_req(req, ticket, 'set_owner') self.assertEqual([(0, u'change_owner'), (0, u'reassign')], actions)
def test_timeline_events(self): """Regression test for #11288""" req1 = MockRequest(self.env) tktmod = web_ui.TicketModule(self.env) now = datetime_now(utc) start = now - timedelta(hours=1) stop = now + timedelta(hours=1) events = tktmod.get_timeline_events(req1, start, stop, ['ticket_details']) self.assertTrue(all(ev[0] != 'batchmodify' for ev in events)) prio_ids = {} for i in xrange(20): priority = ('', 'minor', 'major', 'critical')[i % 4] t = insert_ticket(self.env, summary='Ticket %d' % i, priority=priority) prio_ids.setdefault(t['priority'], []).append(t.id) tktids = prio_ids['critical'] + prio_ids['major'] + \ prio_ids['minor'] + prio_ids[''] req2 = MockRequest(self.env, method='POST', authname='has_ta_&_bm', path_info='/batchmodify', args={ 'batchmod_value_summary': 'batch updated ticket', 'batchmod_value_owner': 'ticket11288', 'batchmod_value_reporter': 'ticket11288', 'action': 'leave', 'selected_tickets': ','.join(str(t) for t in tktids), }) batch = BatchModifyModule(self.env) self.assertTrue(batch.match_request(req2)) with self.assertRaises(RequestDone): batch.process_request(req2) # shuffle ticket_change records with self.env.db_transaction as db: rows = db('SELECT * FROM ticket_change') db.execute('DELETE FROM ticket_change') rows = rows[0::4] + rows[1::4] + rows[2::4] + rows[3::4] db.executemany('INSERT INTO ticket_change VALUES (%s)' % ','.join(('%s',) * len(rows[0])), rows) events = tktmod.get_timeline_events(req1, start, stop, ['ticket_details']) events = [ev for ev in events if ev[0] == 'batchmodify'] self.assertEqual(1, len(events)) batch_ev = events[0] self.assertEqual('has_ta_&_bm', batch_ev[2]) self.assertEqual(tktids, batch_ev[3][0]) self.assertEqual('updated', batch_ev[3][1]) context = web_context(req2) self.assertEqual(req2.href.query(id=','.join(str(t) for t in tktids)), tktmod.render_timeline_event(context, 'url', batch_ev))
def _create_ticket_with_change(self, old_props, new_props, author='anonymous'): """Create a ticket with `old_props` and apply properties in `new_props`. """ t = insert_ticket(self.env, **old_props) comment = new_props.pop('comment', None) t.populate(new_props) t.save_changes(author, comment=comment) return t
def _test_get_allowed_owners(self): ticket = insert_ticket(self.env, summary='Ticket 1') self.env.insert_users([('user1', None, None, 1), ('user2', None, None, 1), ('user3', None, None, 1)]) ps = PermissionSystem(self.env) for user in ('user1', 'user3'): ps.grant_permission(user, 'TICKET_MODIFY') self.env.config.set('ticket', 'restrict_owner', True) return ticket
def test_title_and_description_with_sub_vars(self): with self.env.db_transaction: id_ = self._insert_report( 'Tickets on $M for $USER', 'SELECT * FROM ticket WHERE milestone=$M AND owner=$USER', 'Show tickets on $M for $USER') for milestone in ('milestone1', 'milestone2'): insert_ticket(self.env, status='new', summary='Test 1', owner='joe', milestone=milestone) req = MockRequest(self.env, path_info='/report/%d' % id_, authname='joe', args={'M': 'milestone2'}) self.assertTrue(self.report_module.match_request(req)) data = self.report_module.process_request(req)[1] self.assertEqual('{%d} Tickets on milestone2 for joe' % id_, data['title']) self.assertEqual('Show tickets on milestone2 for joe', data['description']) self.assertIsNone(data['message']) self.assertEqual(1, data['numrows'])
def _setup_env_and_req(self, max_size, field_value): self.env.config.set('ticket-custom', 'text1', 'text') self.env.config.set('ticket-custom', 'text1.max_size', max_size) ticket = insert_ticket(self.env, summary='summary', text1='init') change_time = Ticket(self.env, ticket.id)['changetime'] view_time = str(to_utimestamp(change_time)) req = MockRequest( self.env, method='POST', path_info='/ticket/%d' % ticket.id, args={'submit': 'Submit changes', 'field_text1': field_value, 'action': 'leave', 'view_time': view_time}) return req
def setUp(self): self.env = EnvironmentStub(default_data=True) self.perm_sys = PermissionSystem(self.env) self.ctlr = TicketSystem(self.env).action_controllers[0] self.ticket = insert_ticket(self.env, status='new') self.env.insert_users([ (user, None, None) for user in ('user1', 'user2', 'user3', 'user4') ]) permissions = [('user1', 'TICKET_EDIT_CC'), ('user2', 'TICKET_EDIT_CC'), ('user2', 'TICKET_BATCH_MODIFY'), ('user3', 'TICKET_ADMIN'), ('user4', 'TICKET_VIEW'), ('user1', 'group1'), ('user2', 'group1'), ('user2', 'group2'), ('user3', 'group2'), ('user4', 'group3')] for perm in permissions: self.perm_sys.grant_permission(*perm) self.req = MockRequest(self.env, authname='user1') self.expected = """\
def setUp(self): tmpdir = os.path.realpath(tempfile.gettempdir()) self.env = EnvironmentStub(enable=['trac.*', AuthzPolicy], path=tmpdir) self.env.config.set('trac', 'permission_policies', 'AuthzPolicy, DefaultPermissionPolicy') self.env.config.set('ticket', 'restrict_owner', True) self.perm_sys = PermissionSystem(self.env) self.env.insert_users([('user1', 'User C', '*****@*****.**'), ('user2', 'User A', '*****@*****.**'), ('user3', 'User D', '*****@*****.**'), ('user4', 'User B', '*****@*****.**')]) self.perm_sys.grant_permission('user1', 'TICKET_MODIFY') self.perm_sys.grant_permission('user2', 'TICKET_VIEW') self.perm_sys.grant_permission('user3', 'TICKET_MODIFY') self.perm_sys.grant_permission('user4', 'TICKET_MODIFY') self.authz_file = os.path.join(tmpdir, 'trac-authz-policy') create_file(self.authz_file) self.env.config.set('authz_policy', 'authz_file', self.authz_file) self.ctlr = TicketSystem(self.env).action_controllers[0] self.req1 = MockRequest(self.env, authname='user1') self.ticket = insert_ticket(self.env, status='new')
def setUp(self): self.env = EnvironmentStub(default_data=True) self.perm_sys = PermissionSystem(self.env) self.ctlr = TicketSystem(self.env).action_controllers[0] self.ticket = insert_ticket(self.env, status='new') with self.env.db_transaction as db: for user in ('user1', 'user2', 'user3', 'user4'): db("INSERT INTO session VALUES (%s, %s, %s)", (user, 1, 0)) permissions = [ ('user1', 'TICKET_EDIT_CC'), ('user2', 'TICKET_EDIT_CC'), ('user2', 'TICKET_BATCH_MODIFY'), ('user3', 'TICKET_ADMIN'), ('user4', 'TICKET_VIEW'), ('user1', 'group1'), ('user2', 'group1'), ('user2', 'group2'), ('user3', 'group2'), ('user4', 'group3') ] for perm in permissions: self.perm_sys.grant_permission(*perm) self.req = MockRequest(self.env, authname='user1') self.expected = """\
def _insert_ticket(self, summary, **kw): """Helper for inserting a ticket into the database""" ticket = insert_ticket(self.env, summary=summary, **kw) return ticket.id
def test_ticket_remove_ok(self): """Ticket is successfully deleted.""" insert_ticket(self.env) rv, output = self.execute('ticket remove 1') self.assertEqual(0, rv, output) self.assertExpectedResult(output)
def test_ticket_remove_error_invalid_ticket_id(self): """ResourceNotFound error reported when ticket does not exist.""" insert_ticket(self.env) rv, output = self.execute('ticket remove 2') self.assertEqual(2, rv, output) self.assertExpectedResult(output)
def test_ticket_remove_error_ticket_id_not_an_int(self): """Error reported when ticket id is not an int.""" insert_ticket(self.env) rv, output = self.execute('ticket remove a') self.assertEqual(2, rv, output) self.assertExpectedResult(output)
def test_ticket_comment_remove_error_no_comment_argument(self): """Error reported when comment# argument is missing.""" ticket = insert_ticket(self.env) rv, output = self.execute('ticket remove_comment 1') self.assertEqual(2, rv, output) self.assertExpectedResult(output)