/batchmod/tests/web_ui.py

https://github.com/kkass/batchmodifyplugin · Python · 123 lines · 93 code · 24 blank · 6 comment · 1 complexity · 5daf5d4036f85a6f55bb5d452306c066 MD5 · raw file

  1. from trac.config import Option, ListOption
  2. from trac.log import logger_factory
  3. from trac.test import EnvironmentStub, Mock
  4. from trac.util.datefmt import utc
  5. import unittest
  6. import logging
  7. from batchmod.web_ui import BatchModifyModule, BatchModifier
  8. class BatchModifyTestCase(unittest.TestCase):
  9. def setUp(self):
  10. self._logger = logger_factory()
  11. self._fields_as_list = ['keywords']
  12. self._list_separator_regex = '[,\s]+'
  13. self._list_connector_string = ' '
  14. self._batchmod = BatchModifier(self._fields_as_list,
  15. self._list_separator_regex,
  16. self._list_connector_string)
  17. self._env = EnvironmentStub(default_data=True)
  18. self._req = Mock(href=self._env.href, authname='anonymous', tz=utc)
  19. self._req.session = {}
  20. def test_merge_keywords_adds_new_keyword(self):
  21. original_keywords = 'foo'
  22. new_keywords = 'bar'
  23. result = self._batchmod._merge_keywords(original_keywords,
  24. new_keywords, self._logger)
  25. self.assertEqual('foo bar', result)
  26. def test_merge_keywords_removes_keyword(self):
  27. original_keywords = 'foo bar'
  28. new_keywords = '-bar'
  29. result = self._batchmod._merge_keywords(original_keywords,
  30. new_keywords, self._logger)
  31. self.assertEqual('foo', result)
  32. def test_merge_keywords_does_not_duplicate_keyword(self):
  33. original_keywords = 'foo'
  34. new_keywords = 'foo'
  35. result = self._batchmod._merge_keywords(original_keywords,
  36. new_keywords, self._logger)
  37. self.assertEqual('foo', result)
  38. def test_merge_keywords_adds_multiple_keywords(self):
  39. original_keywords = 'foo'
  40. new_keywords = 'bar baz'
  41. result = self._batchmod._merge_keywords(original_keywords,
  42. new_keywords, self._logger)
  43. self.assertEqual('foo bar baz', result)
  44. def test_merge_keywords_removes_multiple_keywords(self):
  45. original_keywords = 'foo bar baz'
  46. new_keywords = '-foo -baz'
  47. result = self._batchmod._merge_keywords(original_keywords,
  48. new_keywords, self._logger)
  49. self.assertEqual('bar', result)
  50. def test_remove_resolution_if_not_closed_sets_resolution_to_empty_string_when_status_is_not_closed(self):
  51. values = {'status':'reopened'}
  52. self._batchmod._remove_resolution_if_not_closed(values)
  53. self.assertEqual('', values['resolution'])
  54. def test_remove_resolution_does_nothing_if_status_is_unchanged(self):
  55. values = {}
  56. self._batchmod._remove_resolution_if_not_closed(values)
  57. self.assertEqual({}, values)
  58. def test_remove_resolution_does_nothing_if_status_is_set_to_closed(self):
  59. values = {'status':'closed'}
  60. self._batchmod._remove_resolution_if_not_closed(values)
  61. self.assertFalse(values.has_key('resolution'))
  62. def test_check_for_resolution_sets_status_to_closed_if_resolution_is_set(self):
  63. values = {'resolution':'fixed'}
  64. self._batchmod._check_for_resolution(values)
  65. self.assertEqual('closed', values['status'])
  66. def test_check_for_resolution_does_nothing_if_no_resolution_set(self):
  67. values = {}
  68. self._batchmod._check_for_resolution(values)
  69. self.assertEqual({}, values)
  70. def test_get_new_ticket_values_sets_owner_to_session_email_if_not_authenticated(self):
  71. """If the owner field is set to $USER and there is no authenticated
  72. user, then use the email address in the session."""
  73. batch = BatchModifyModule(self._env)
  74. self._req.args = {}
  75. self._req.args['batchmod_value_owner'] = '$USER'
  76. self._req.session['email'] = 'joe@example.com'
  77. values = self._batchmod._get_new_ticket_values(self._req, self._env)
  78. self.assertEqual(values['owner'], 'joe@example.com')
  79. def test_get_new_ticket_values_sets_owner_to_session_name_if_not_authenticated_and_no_email(self):
  80. """If the owner field is set to $USER and there is no authenticated
  81. user or email address, then use the name in the session."""
  82. batch = BatchModifyModule(self._env)
  83. self._req.args = {}
  84. self._req.args['batchmod_value_owner'] = '$USER'
  85. self._req.session['name'] = 'joe'
  86. values = self._batchmod._get_new_ticket_values(self._req, self._env)
  87. self.assertEqual(values['owner'], 'joe')
  88. def test_get_new_ticket_values_sets_owner_to_authenticated_user(self):
  89. """If the owner field is set to $USER and there is an authenticated
  90. user, then set the owner to that user."""
  91. self._req.args = {}
  92. self._req.args['batchmod_value_owner'] = '$USER'
  93. self._req.authname = 'joe'
  94. values = self._batchmod._get_new_ticket_values(self._req, self._env)
  95. self.assertEqual(values['owner'], 'joe')
  96. def suite():
  97. return unittest.makeSuite(BatchModifyTestCase, 'test')
  98. if __name__ == '__main__':
  99. unittest.main(defaultTest='suite')