Mercurial > genshi > mirror
diff examples/trac/trac/ticket/tests/api.py @ 39:93b4dcbafd7b trunk
Copy Trac to main branch.
author | cmlenz |
---|---|
date | Mon, 03 Jul 2006 18:53:27 +0000 |
parents | |
children |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/examples/trac/trac/ticket/tests/api.py @@ -0,0 +1,109 @@ +from trac.config import Configuration +from trac.ticket.api import TicketSystem +from trac.test import EnvironmentStub, Mock + +import unittest + + +class TicketSystemTestCase(unittest.TestCase): + + def setUp(self): + self.env = EnvironmentStub() + self.ticket_system = TicketSystem(self.env) + + def test_custom_field_text(self): + self.env.config.set('ticket-custom', 'test', 'text') + self.env.config.set('ticket-custom', 'test.label', 'Test') + self.env.config.set('ticket-custom', 'test.value', 'Foo bar') + fields = TicketSystem(self.env).get_custom_fields() + self.assertEqual({'name': 'test', 'type': 'text', 'label': 'Test', + 'value': 'Foo bar', 'order': 0}, + fields[0]) + + def test_custom_field_select(self): + self.env.config.set('ticket-custom', 'test', 'select') + self.env.config.set('ticket-custom', 'test.label', 'Test') + self.env.config.set('ticket-custom', 'test.value', '1') + self.env.config.set('ticket-custom', 'test.options', 'option1|option2') + fields = TicketSystem(self.env).get_custom_fields() + self.assertEqual({'name': 'test', 'type': 'select', 'label': 'Test', + 'value': '1', 'options': ['option1', 'option2'], + 'order': 0}, + fields[0]) + + def test_custom_field_textarea(self): + self.env.config.set('ticket-custom', 'test', 'textarea') + self.env.config.set('ticket-custom', 'test.label', 'Test') + self.env.config.set('ticket-custom', 'test.value', 'Foo bar') + self.env.config.set('ticket-custom', 'test.cols', '60') + self.env.config.set('ticket-custom', 'test.rows', '4') + fields = TicketSystem(self.env).get_custom_fields() + self.assertEqual({'name': 'test', 'type': 'textarea', 'label': 'Test', + 'value': 'Foo bar', 'width': 60, 'height': 4, + 'order': 0}, + fields[0]) + + def test_custom_field_order(self): + self.env.config.set('ticket-custom', 'test1', 'text') + self.env.config.set('ticket-custom', 'test1.order', '2') + self.env.config.set('ticket-custom', 'test2', 'text') + self.env.config.set('ticket-custom', 'test2.order', '1') + fields = TicketSystem(self.env).get_custom_fields() + self.assertEqual('test2', fields[0]['name']) + self.assertEqual('test1', fields[1]['name']) + + def test_available_actions_full_perms(self): + ts = TicketSystem(self.env) + perm = Mock(has_permission=lambda x: 1) + self.assertEqual(['leave', 'resolve', 'reassign', 'accept'], + ts.get_available_actions({'status': 'new'}, perm)) + self.assertEqual(['leave', 'resolve', 'reassign'], + ts.get_available_actions({'status': 'assigned'}, perm)) + self.assertEqual(['leave', 'resolve', 'reassign'], + ts.get_available_actions({'status': 'reopened'}, perm)) + self.assertEqual(['leave', 'reopen'], + ts.get_available_actions({'status': 'closed'}, perm)) + + def test_available_actions_no_perms(self): + ts = TicketSystem(self.env) + perm = Mock(has_permission=lambda x: 0) + self.assertEqual(['leave'], + ts.get_available_actions({'status': 'new'}, perm)) + self.assertEqual(['leave'], + ts.get_available_actions({'status': 'assigned'}, perm)) + self.assertEqual(['leave'], + ts.get_available_actions({'status': 'reopened'}, perm)) + self.assertEqual(['leave'], + ts.get_available_actions({'status': 'closed'}, perm)) + + def test_available_actions_create_only(self): + ts = TicketSystem(self.env) + perm = Mock(has_permission=lambda x: x == 'TICKET_CREATE') + self.assertEqual(['leave'], + ts.get_available_actions({'status': 'new'}, perm)) + self.assertEqual(['leave'], + ts.get_available_actions({'status': 'assigned'}, perm)) + self.assertEqual(['leave'], + ts.get_available_actions({'status': 'reopened'}, perm)) + self.assertEqual(['leave', 'reopen'], + ts.get_available_actions({'status': 'closed'}, perm)) + + def test_available_actions_chgprop_only(self): + # CHGPROP is not enough for changing a ticket's state (#3289) + ts = TicketSystem(self.env) + perm = Mock(has_permission=lambda x: x == 'TICKET_CHGPROP') + self.assertEqual(['leave'], + ts.get_available_actions({'status': 'new'}, perm)) + self.assertEqual(['leave'], + ts.get_available_actions({'status': 'assigned'}, perm)) + self.assertEqual(['leave'], + ts.get_available_actions({'status': 'reopened'}, perm)) + self.assertEqual(['leave'], + ts.get_available_actions({'status': 'closed'}, perm)) + + +def suite(): + return unittest.makeSuite(TicketSystemTestCase, 'test') + +if __name__ == '__main__': + unittest.main()