model.py

来自「一款基于web的项目管理、bug跟踪系统。提供了与svn集成的操作界面、问题跟踪」· Python 代码 · 共 535 行 · 第 1/2 页

PY
535
字号
from trac import corefrom trac.core import TracError, implementsfrom trac.resource import ResourceNotFoundfrom trac.ticket.model import Ticket, Component, Milestone, Priority, Type, Versionfrom trac.ticket.api import ITicketChangeListenerfrom trac.test import EnvironmentStubfrom trac.util.datefmt import utc, to_timestampfrom datetime import datetimeimport unittestclass TestTicketChangeListener(core.Component):    implements(ITicketChangeListener)    def ticket_created(self, ticket):        self.action = 'created'        self.ticket = ticket    def ticket_changed(self, ticket, comment, author, old_values):        self.action = 'changed'        self.ticket = ticket        self.comment = comment        self.author = author        self.old_values = old_values            def ticket_deleted(self, ticket):        self.action = 'deleted'        self.ticket = ticketclass TicketTestCase(unittest.TestCase):    def setUp(self):        self.env = EnvironmentStub(default_data=True)        self.env.config.set('ticket-custom', 'foo', 'text')        self.env.config.set('ticket-custom', 'cbon', 'checkbox')        self.env.config.set('ticket-custom', 'cboff', 'checkbox')    def _insert_ticket(self, summary, **kw):        """Helper for inserting a ticket into the database"""        ticket = Ticket(self.env)        for k,v in kw.items():            ticket[k] = v        return ticket.insert()    def _create_a_ticket(self):        # 1. Creating ticket        ticket = Ticket(self.env)        ticket['reporter'] = 'santa'        ticket['summary'] = 'Foo'        ticket['foo'] = 'This is a custom field'        return ticket    def test_invalid_ticket_id(self):        self.assertEqual(Ticket.id_is_valid(-1), False)        self.assertEqual(Ticket.id_is_valid(0), False)        self.assertEqual(Ticket.id_is_valid(1), True)        self.assertEqual(Ticket.id_is_valid(1L << 31), True)        self.assertEqual(Ticket.id_is_valid(1L << 32), False)        self.assertRaises(ResourceNotFound, Ticket, self.env, -1)        self.assertRaises(ResourceNotFound, Ticket, self.env, 1L << 32)    def test_create_ticket_1(self):        ticket = self._create_a_ticket()        self.assertEqual('santa', ticket['reporter'])        self.assertEqual('Foo', ticket['summary'])        self.assertEqual('This is a custom field', ticket['foo'])        ticket.insert()    def test_create_ticket_2(self):        ticket = self._create_a_ticket()        ticket.insert()        # Retrieving ticket        ticket2 = Ticket(self.env, 1)        self.assertEqual(1, ticket2.id)        self.assertEqual('santa', ticket2['reporter'])        self.assertEqual('Foo', ticket2['summary'])        self.assertEqual('This is a custom field', ticket2['foo'])    def _modify_a_ticket(self):        ticket2 = self._create_a_ticket()        ticket2.insert()        ticket2['summary'] = 'Bar'        ticket2['foo'] = 'New value'        ticket2.save_changes('santa', 'this is my comment')        return ticket2    def test_create_ticket_3(self):        self._modify_a_ticket()        # Retrieving ticket        ticket3 = Ticket(self.env, 1)        self.assertEqual(1, ticket3.id)        self.assertEqual(ticket3['reporter'], 'santa')        self.assertEqual(ticket3['summary'], 'Bar')        self.assertEqual(ticket3['foo'], 'New value')    def test_create_ticket_4(self):        ticket3 = self._modify_a_ticket()        # Testing get_changelog()        log = ticket3.get_changelog()        self.assertEqual(len(log), 3)        ok_vals = ['foo', 'summary', 'comment']        self.failUnless(log[0][2] in ok_vals)        self.failUnless(log[1][2] in ok_vals)        self.failUnless(log[2][2] in ok_vals)    def test_create_ticket_5(self):        ticket3 = self._modify_a_ticket()        # Testing delete()        ticket3.delete()        log = ticket3.get_changelog()        self.assertEqual(len(log), 0)        self.assertRaises(TracError, Ticket, self.env, 1)    def test_ticket_default_values(self):        """        Verify that a ticket uses default values specified in the configuration        when created.        """        # Set defaults for some standard fields        self.env.config.set('ticket', 'default_type', 'defect')        self.env.config.set('ticket', 'default_component', 'component1')        # Add a custom field of type 'text' with a default value        self.env.config.set('ticket-custom', 'foo', 'text')        self.env.config.set('ticket-custom', 'foo.value', 'Something')        # Add a custom field of type 'select' with a default value specified as        # the value itself        self.env.config.set('ticket-custom', 'bar', 'select')        self.env.config.set('ticket-custom', 'bar.options', 'one|two|three')        self.env.config.set('ticket-custom', 'bar.value', 'two')        # Add a custom field of type 'select' with a default value specified as        # index into the options list        self.env.config.set('ticket-custom', 'baz', 'select')        self.env.config.set('ticket-custom', 'baz.options', 'one|two|three')        self.env.config.set('ticket-custom', 'baz.value', '2')        ticket = Ticket(self.env)        self.assertEqual('defect', ticket['type'])        self.assertEqual('component1', ticket['component'])        self.assertEqual('Something', ticket['foo'])        self.assertEqual('two', ticket['bar'])        self.assertEqual('three', ticket['baz'])    def test_set_field_stripped(self):        """        Verify that whitespace around ticket fields is stripped, except for        textarea fields.        """        ticket = Ticket(self.env)        ticket['component'] = '  foo  '        ticket['description'] = '  bar  '        self.assertEqual('foo', ticket['component'])        self.assertEqual('  bar  ', ticket['description'])    def test_set_field_multi(self):        """        Ticket fields can't yet be multi-valued        """        ticket = Ticket(self.env)        def set_multi_valued():            ticket['component'] = ['  foo  ',  '  bar  ']        self.assertRaises(TracError, set_multi_valued)    def test_owner_from_component(self):        """        Verify that the owner of a new ticket is set to the owner of the        component.        """        component = Component(self.env)        component.name = 'test'        component.owner = 'joe'        component.insert()        ticket = Ticket(self.env)        ticket['reporter'] = 'santa'        ticket['summary'] = 'Foo'        ticket['component'] = 'test'        ticket.insert()        self.assertEqual('joe', ticket['owner'])    def test_owner_from_changed_component(self):        """        Verify that the owner of a new ticket is updated when the component is        changed.        """        component1 = Component(self.env)        component1.name = 'test1'        component1.owner = 'joe'        component1.insert()        component2 = Component(self.env)        component2.name = 'test2'        component2.owner = 'kate'        component2.insert()        ticket = Ticket(self.env)        ticket['reporter'] = 'santa'        ticket['summary'] = 'Foo'        ticket['component'] = 'test1'        ticket['status'] = 'new'        tktid = ticket.insert()        ticket = Ticket(self.env, tktid)        ticket['component'] = 'test2'        ticket.save_changes('jane', 'Testing')        self.assertEqual('kate', ticket['owner'])    def test_populate_ticket(self):        data = {'summary': 'Hello world', 'reporter': 'john', 'foo': 'bar',                'foo': 'bar', 'checkbox_cbon': '', 'cbon': 'on',                'checkbox_cboff': ''}        ticket = Ticket(self.env)        ticket.populate(data)        # Standard fields        self.assertEqual('Hello world', ticket['summary'])        self.assertEqual('john', ticket['reporter'])        # An unknown field        assert ticket['bar'] is None        # Custom field        self.assertEqual('bar', ticket['foo'])        # Custom field of type 'checkbox'        self.assertEqual('on', ticket['cbon'])        self.assertEqual('0', ticket['cboff'])    def test_changelog(self):        tkt_id = self._insert_ticket('Test', reporter='joe', component='foo',                                     milestone='bar')        ticket = Ticket(self.env, tkt_id)        ticket['component'] = 'bar'        ticket['milestone'] = 'foo'        now = datetime(2001, 1, 1, 1, 1, 1, 0, utc)        ticket.save_changes('jane', 'Testing', now)        for t, author, field, old, new, permanent in ticket.get_changelog():            self.assertEqual((now, 'jane', True), (t, author, permanent))            if field == 'component':                self.assertEqual(('foo', 'bar'), (old, new))            elif field == 'milestone':                self.assertEqual(('bar', 'foo'), (old, new))            elif field == 'comment':                self.assertEqual(('', 'Testing'), (old, new))            else:                self.fail('Unexpected change (%s)'                          % ((t, author, field, old, new),))    def test_changelog_with_reverted_change(self):        tkt_id = self._insert_ticket('Test', reporter='joe', component='foo')        ticket = Ticket(self.env, tkt_id)        ticket['component'] = 'bar'        ticket['component'] = 'foo'        now = datetime(2001, 1, 1,  1, 1, 1, 0, utc)        ticket.save_changes('jane', 'Testing', now)        for t, author, field, old, new, permanent in ticket.get_changelog():            self.assertEqual((now, 'jane', True), (t, author, permanent))            if field == 'comment':                self.assertEqual(('', 'Testing'), (old, new))            else:                self.fail('Unexpected change (%s)'                          % ((t, author, field, old, new),))    def test_change_listener_created(self):        listener = TestTicketChangeListener(self.env)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?