| # -*- coding: utf-8 -*- |
| # |
| # Copyright (C) 2013 Edgewall Software |
| # All rights reserved. |
| # |
| # This software is licensed as described in the file COPYING, which |
| # you should have received as part of this distribution. The terms |
| # are also available at http://trac.edgewall.org/wiki/TracLicense. |
| # |
| # This software consists of voluntary contributions made by many |
| # individuals. For the exact contribution history, see the revision |
| # history and logs, available at http://trac.edgewall.org/log/. |
| |
| import unittest |
| from datetime import datetime |
| |
| from trac.test import EnvironmentStub, Mock |
| from trac.tests.contentgen import random_sentence |
| from trac.ticket.model import Ticket |
| from trac.util.datefmt import utc |
| from trac.versioncontrol.api import Repository |
| from tracopt.ticket.commit_updater import CommitTicketUpdater |
| |
| |
| class CommitTicketUpdaterTestCase(unittest.TestCase): |
| |
| def setUp(self): |
| self.env = EnvironmentStub(enable=['trac.*', |
| 'tracopt.ticket.commit_updater.*']) |
| self.env.config.set('ticket', 'commit_ticket_update_check_perms', False) |
| self.repos = Mock(Repository, 'repos1', {'name': 'repos1', 'id': 1}, |
| self.env.log) |
| self.updater = CommitTicketUpdater(self.env) |
| |
| def tearDown(self): |
| self.env.reset_db() |
| |
| def _make_tickets(self, num): |
| self.tickets = [] |
| for i in xrange(0, num): |
| ticket = Ticket(self.env) |
| ticket['reporter'] = 'someone' |
| ticket['summary'] = random_sentence() |
| ticket.insert() |
| self.tickets.append(ticket) |
| |
| def test_changeset_added(self): |
| self._make_tickets(1) |
| message = 'This is the first comment. Refs #1.' |
| chgset = Mock(repos=self.repos, rev=1, message=message, author='joe', |
| date=datetime(2001, 1, 1, 1, 1, 1, 0, utc)) |
| self.updater.changeset_added(self.repos, chgset) |
| self.assertEqual("""\ |
| In [changeset:"1/repos1"]: |
| {{{ |
| #!CommitTicketReference repository="repos1" revision="1" |
| This is the first comment. Refs #1. |
| }}}""", self.tickets[0].get_change(cnum=1)['fields']['comment']['new']) |
| |
| def test_changeset_modified(self): |
| self._make_tickets(2) |
| message = 'This is the first comment. Refs #1.' |
| old_chgset = Mock(repos=self.repos, rev=1, |
| message=message, author='joe', |
| date=datetime(2001, 1, 1, 1, 1, 1, 0, utc)) |
| message = 'This is the first comment after an edit. Refs #1, #2.' |
| new_chgset = Mock(repos=self.repos, rev=1, |
| message=message, author='joe', |
| date=datetime(2001, 1, 2, 1, 1, 1, 0, utc)) |
| self.updater.changeset_added(self.repos, old_chgset) |
| self.updater.changeset_modified(self.repos, new_chgset, old_chgset) |
| self.assertEqual("""\ |
| In [changeset:"1/repos1"]: |
| {{{ |
| #!CommitTicketReference repository="repos1" revision="1" |
| This is the first comment. Refs #1. |
| }}}""", self.tickets[0].get_change(cnum=1)['fields']['comment']['new']) |
| self.assertEqual("""\ |
| In [changeset:"1/repos1"]: |
| {{{ |
| #!CommitTicketReference repository="repos1" revision="1" |
| This is the first comment after an edit. Refs #1, #2. |
| }}}""", self.tickets[1].get_change(cnum=1)['fields']['comment']['new']) |
| |
| |
| def suite(): |
| suite = unittest.TestSuite() |
| suite.addTest(unittest.makeSuite(CommitTicketUpdaterTestCase)) |
| return suite |
| |
| |
| if __name__ == '__main__': |
| unittest.main(defaultTest='suite') |