Package trac :: Package timeline :: Package tests :: Module web_ui

Source Code for Module trac.timeline.tests.web_ui

  1  # -*- coding: utf-8 -*- 
  2  # 
  3  # Copyright (C) 2014-2020 Edgewall Software 
  4  # All rights reserved. 
  5  # 
  6  # This software is licensed as described in the file COPYING, which 
  7  # you should have received as part of this distribution. The terms 
  8  # are also available at https://trac.edgewall.org/wiki/TracLicense. 
  9  # 
 10  # This software consists of voluntary contributions made by many 
 11  # individuals. For the exact contribution history, see the revision 
 12  # history and logs, available at https://trac.edgewall.org/log/. 
 13   
 14  import unittest 
 15  from datetime import datetime, timedelta 
 16   
 17  from trac.test import EnvironmentStub, MockRequest, locale_en 
 18  from trac.timeline.web_ui import TimelineModule 
 19  from trac.util.datefmt import ( 
 20      datetime_now, format_date, format_datetime, format_time, 
 21      get_date_format_hint, pretty_timedelta, utc, 
 22  ) 
 23  from trac.util.html import plaintext 
 24  from trac.web.chrome import Chrome 
 25   
 26   
27 -class PrettyDateinfoTestCase(unittest.TestCase):
28
29 - def setUp(self):
30 self.env = EnvironmentStub() 31 self.env.config.set('trac', 'base_url', 'http://example.org/') 32 self.req = MockRequest(self.env)
33
34 - def tearDown(self):
35 self.env.reset_db()
36
37 - def _format_chrome(self, d, format, dateonly):
38 data = Chrome(self.env).populate_data(self.req, {}) 39 return plaintext(data['pretty_dateinfo'](d, format=format, 40 dateonly=dateonly))
41
42 - def _format_timeline(self, d, format, dateonly):
43 data = Chrome(self.env).populate_data(self.req, {}) 44 TimelineModule(self.env) \ 45 .post_process_request(self.req, 'timeline.html', data, None) 46 return plaintext(data['pretty_dateinfo'](d, format=format, 47 dateonly=dateonly))
48
49 - def test_relative(self):
50 t = datetime_now(utc) - timedelta(days=1) 51 label = '%s ago' % pretty_timedelta(t) 52 self.assertEqual(label, self._format_chrome(t, 'relative', False)) 53 self.assertEqual(label, self._format_timeline(t, 'relative', False))
54
55 - def test_relative_dateonly(self):
56 t = datetime_now(utc) - timedelta(days=1) 57 label = pretty_timedelta(t) 58 self.assertEqual(label, self._format_chrome(t, 'relative', True)) 59 self.assertEqual(label, self._format_timeline(t, 'relative', True))
60
61 - def test_absolute(self):
62 t = datetime_now(utc) - timedelta(days=1) 63 label = 'on %s at %s' % \ 64 (format_date(t, locale=locale_en, tzinfo=utc), 65 format_time(t, locale=locale_en, tzinfo=utc)) 66 self.assertEqual(label, self._format_chrome(t, 'absolute', False)) 67 self.assertEqual(label, self._format_timeline(t, 'absolute', False))
68
69 - def test_absolute_dateonly(self):
70 t = datetime_now(utc) - timedelta(days=1) 71 label = format_datetime(t, locale=locale_en, tzinfo=utc) 72 self.assertEqual(label, self._format_chrome(t, 'absolute', True)) 73 self.assertEqual(label, self._format_timeline(t, 'absolute', True))
74
75 - def test_absolute_iso8601(self):
76 t = datetime(2014, 1, 28, 2, 30, 44, 0, utc) 77 label = 'at 2014-01-28T02:30:44Z' 78 self.req.lc_time = 'iso8601' 79 self.assertEqual(label, self._format_chrome(t, 'absolute', False)) 80 self.assertEqual(label, self._format_timeline(t, 'absolute', False))
81
83 t = datetime(2014, 1, 28, 2, 30, 44, 0, utc) 84 label = '2014-01-28T02:30:44Z' 85 self.req.lc_time = 'iso8601' 86 self.assertEqual(label, self._format_chrome(t, 'absolute', True)) 87 self.assertEqual(label, self._format_timeline(t, 'absolute', True))
88 89
90 -class TimelineModuleTestCase(unittest.TestCase):
91
92 - def setUp(self):
93 self.env = EnvironmentStub()
94
95 - def tearDown(self):
96 self.env.reset_db()
97
99 """Warning is added when date format is invalid.""" 100 req = MockRequest(self.env, args={ 101 'from': '2011-02-02T11:38:50 01:00', 102 }) 103 104 TimelineModule(self.env).process_request(req) 105 106 self.assertIn(u'"2011-02-02T11:38:50 01:00" is an invalid date, ' 107 u'or the date format is not known. Try "%s" or "%s" ' 108 u'instead.' % (get_date_format_hint(locale_en), 109 get_date_format_hint('iso8601')), 110 req.chrome['warnings'])
111
113 """Exception not raised when 'from' year before 1900 (#12489).""" 114 req = MockRequest(self.env, args={ 115 'from': '1899-12-23', 116 'daysback': 7, 117 }) 118 119 TimelineModule(self.env).process_request(req) 120 121 self.assertIn('prev', req.chrome['links'])
122
124 self.env.config.set('trac', 'show_email_addresses', 'enabled') 125 self.env.known_users.append(('blah', 'Blah user', '[email protected]')) 126 req = MockRequest(self.env, path_info='/timeline', 127 args={'format': 'rss'}) 128 rv = TimelineModule(self.env).process_request(req) 129 self.assertEqual('timeline.rss', rv[0]) 130 author = u'jöé' 131 event = ('mock', datetime_now(utc), author, None) 132 rv[1]['events'] = [ 133 {'kind': event[0], 'date': event[1], 'author': event[2], 134 'data': event[3], 'event': event, 'provider': None, 135 'dateuid': '42', 'render': lambda field, context: 'mock'}, 136 ] 137 output = Chrome(self.env).render_template(req, rv[0], rv[1], rv[2]) 138 if not output.startswith('<?xml version="1.0"?>'): 139 raise AssertionError('Missing <?xml?> in %r' % output) 140 dc_creator = '<dc:creator>%s</dc:creator>' % author.encode('utf-8') 141 if dc_creator not in output: 142 raise AssertionError('Missing %r in %r' % (dc_creator, output))
143 144
145 -def suite():
146 suite = unittest.TestSuite() 147 suite.addTest(unittest.makeSuite(PrettyDateinfoTestCase)) 148 suite.addTest(unittest.makeSuite(TimelineModuleTestCase)) 149 return suite
150 151 if __name__ == '__main__': 152 unittest.main(defaultTest='suite') 153