blob: 3bfe479a291c4f403130d688b597428b03edfd23 [file] [log] [blame]
# -*- 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')