##// END OF EJS Templates
events: use context manager for testing fired events
dan -
r376:ce1a3e78 default
parent child Browse files
Show More
@@ -38,7 +38,9 b' def trigger(event):'
38 38
39 39
40 40 from rhodecode.events.user import (
41 UserPreCreate, UserPreUpdate, UserRegistered
41 UserPreCreate,
42 UserPreUpdate,
43 UserRegistered
42 44 )
43 45
44 46 from rhodecode.events.repo import (
@@ -46,4 +48,4 b' from rhodecode.events.repo import ('
46 48 RepoPreDeleteEvent, RepoDeletedEvent,
47 49 RepoPrePushEvent, RepoPushEvent,
48 50 RepoPrePullEvent, RepoPullEvent,
49 ) No newline at end of file
51 )
@@ -34,8 +34,6 b' class RepoPreCreateEvent(RepoEvent):'
34 34 """
35 35 An instance of this class is emitted as an :term:`event` before a repo is
36 36 created.
37
38 :param repo_name: repository name
39 37 """
40 38 name = 'repo-pre-create'
41 39
@@ -20,19 +20,22 b' import mock'
20 20 import decorator
21 21
22 22
23 def assert_fires_events(*expected_events):
24 """ Testing decorator to check if the function fires events in order """
25 def deco(func):
26 def wrapper(func, *args, **kwargs):
27 with mock.patch('rhodecode.events.trigger') as mock_trigger:
28 result = func(*args, **kwargs)
23 class EventCatcher(object):
24 """ Testing context manager to check if events are fired """
25
26 def __init__(self):
27 self.events = [] # the actual events captured
28 self.event_types = [] # the types of events captured
29 29
30 captured_events = []
31 for call in mock_trigger.call_args_list:
32 event = call[0][0]
33 captured_events.append(type(event))
30 def __enter__(self):
31 self.event_trigger_patch = mock.patch('rhodecode.events.trigger')
32 self.mocked_event_trigger = self.event_trigger_patch.start()
33 return self
34 34
35 assert set(captured_events) == set(expected_events)
36 return result
37 return decorator.decorator(wrapper, func)
38 return deco No newline at end of file
35 def __exit__(self, type_, value, traceback):
36 self.event_trigger_patch.stop()
37
38 for call in self.mocked_event_trigger.call_args_list:
39 event = call[0][0]
40 self.events.append(event)
41 self.event_types.append(type(event))
@@ -20,7 +20,7 b''
20 20
21 21 import pytest
22 22
23 from rhodecode.tests.events.conftest import assert_fires_events
23 from rhodecode.tests.events.conftest import EventCatcher
24 24
25 25 from rhodecode.lib import hooks_base, utils2
26 26 from rhodecode.model.repo import RepoModel
@@ -49,20 +49,31 b' def scm_extras(user_regular, repo_stub):'
49 49 return extras
50 50
51 51
52 @assert_fires_events(
53 RepoPreCreateEvent, RepoCreatedEvent, RepoPreDeleteEvent, RepoDeletedEvent)
54 52 def test_create_delete_repo_fires_events(backend):
53 with EventCatcher() as event_catcher:
55 54 repo = backend.create_repo()
55 assert event_catcher.event_types == [RepoPreCreateEvent, RepoCreatedEvent]
56
57 with EventCatcher() as event_catcher:
56 58 RepoModel().delete(repo)
59 assert event_catcher.event_types == [RepoPreDeleteEvent, RepoDeletedEvent]
57 60
58 61
59 @assert_fires_events(RepoPrePushEvent, RepoPushEvent)
60 62 def test_pull_fires_events(scm_extras):
63 with EventCatcher() as event_catcher:
61 64 hooks_base.pre_push(scm_extras)
65 assert event_catcher.event_types == [RepoPrePushEvent]
66
67 with EventCatcher() as event_catcher:
62 68 hooks_base.post_push(scm_extras)
69 assert event_catcher.event_types == [RepoPushEvent]
63 70
64 71
65 @assert_fires_events(RepoPrePullEvent, RepoPullEvent)
66 72 def test_push_fires_events(scm_extras):
73 with EventCatcher() as event_catcher:
67 74 hooks_base.pre_pull(scm_extras)
75 assert event_catcher.event_types == [RepoPrePullEvent]
76
77 with EventCatcher() as event_catcher:
68 78 hooks_base.post_pull(scm_extras)
79 assert event_catcher.event_types == [RepoPullEvent]
General Comments 0
You need to be logged in to leave comments. Login now