From e249f3d0628741c99764e7023f7b140036aa28f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Tue, 1 Nov 2016 12:22:31 +0100 Subject: [PATCH] Added unittest for SVN push hook --- attract/cli.py | 3 ++- attract/subversion/__init__.py | 3 ++- attract/subversion/routes.py | 2 +- tests/test_subversion.py | 42 ++++++++++++++++++++++++++++++++++ 4 files changed, 47 insertions(+), 3 deletions(-) diff --git a/attract/cli.py b/attract/cli.py index 0d3ed01..d5eea0e 100644 --- a/attract/cli.py +++ b/attract/cli.py @@ -43,4 +43,5 @@ def create_svner_account(email, project_url): log.error('Unable to find project url=%s', project_url) return 1 - create_service_account(email, [u'svner'], {'svner': {'project': proj['_id']}}) + account, token = create_service_account(email, [u'svner'], {'svner': {'project': proj['_id']}}) + return account, token diff --git a/attract/subversion/__init__.py b/attract/subversion/__init__.py index 5fe323f..2f430fc 100644 --- a/attract/subversion/__init__.py +++ b/attract/subversion/__init__.py @@ -50,7 +50,8 @@ def obtain(server_location): @attr.s class CommitLogObserver(object): svn_client = attr.ib(default=None, - validator=attr.validators.instance_of(svn.remote.RemoteClient)) + validator=attr.validators.optional( + attr.validators.instance_of(svn.remote.RemoteClient))) last_seen_revision = attr.ib(default=0, validator=attr.validators.instance_of(int)) _log = attrs_extra.log('%s.CommitLogObserver' % __name__) diff --git a/attract/subversion/routes.py b/attract/subversion/routes.py index 22a1837..f766815 100644 --- a/attract/subversion/routes.py +++ b/attract/subversion/routes.py @@ -84,7 +84,7 @@ def subversion_log(project_url): return 'Not set up for Attract', 400 svn_server_url = attract_props['svn_url'] - log.info('Re-examining SVN server %s', svn_server_url) + log.debug('Receiving commit from SVN server %s', svn_server_url) log_entry = subversion.create_log_entry(revision=revision, msg=commit_message, author=commit_author, diff --git a/tests/test_subversion.py b/tests/test_subversion.py index ea35c19..7bc25a8 100644 --- a/tests/test_subversion.py +++ b/tests/test_subversion.py @@ -13,8 +13,11 @@ from dateutil.tz import tzutc import mock import svn.common +from pillar.tests import common_test_data as ctd + import logging_config from attract import subversion +from abstract_attract_test import AbstractAttractTest SVN_SERVER_URL = 'svn://biserver/agent327' @@ -187,3 +190,42 @@ class TestCommitLogObserver(unittest.TestCase): u'børk', None )) + + +class PushCommitTest(AbstractAttractTest): + def setUp(self, **kwargs): + AbstractAttractTest.setUp(self, **kwargs) + + self.mngr = self.app.pillar_extensions['attract'].task_manager + self.proj_id, self.project = self.ensure_project_exists() + + def test_push_happy(self): + from attract import cli + + with self.app.test_request_context(): + _, token = cli.create_svner_account('svner@example.com', self.project['url']) + + blinks = [] + + def record_blink(sender, **kwargs): + blinks.append(kwargs) + + subversion.task_logged.connect(record_blink) + + push_data = { + 'repo': u'strange-repo™', + 'revision': '4', + 'msg': u'မြန်မာဘာသာ is beautiful.\n\nThis solves task [T431134]', + 'author': 'Haha', + 'date': '2016-10-21 17:40:17 +0200', + } + + self.post('/attract/api/%s/subversion/log' % self.project['url'], + json=push_data, + auth_token=token['token']) + + self.assertEqual(1, len(blinks)) + self.assertEqual(u'မြန်မာဘာသာ is beautiful.\n\nThis solves task [T431134]', + blinks[0]['log_entry'].msg) + self.assertEqual(datetime.datetime(2016, 10, 21, 15, 40, 17, 0, tzinfo=tzutc()), + blinks[0]['log_entry'].date)