diff --git a/rhodecode/config/middleware.py b/rhodecode/config/middleware.py --- a/rhodecode/config/middleware.py +++ b/rhodecode/config/middleware.py @@ -212,6 +212,7 @@ def includeme(config): config.include('pyramid_mako') config.include('pyramid_beaker') config.include('rhodecode.admin') + config.include('rhodecode.integrations') config.include('rhodecode.authentication') config.include('rhodecode.login') config.include('rhodecode.tweens') diff --git a/rhodecode/events/base.py b/rhodecode/events/base.py --- a/rhodecode/events/base.py +++ b/rhodecode/events/base.py @@ -39,8 +39,9 @@ class RhodecodeEventSchema(Schema): Marshmallow schema for a rhodecode event """ utc_timestamp = fields.DateTime() - acting_user = fields.Nested(UserSchema) - acting_ip = fields.Str() + actor = fields.Nested(UserSchema) + actor_ip = fields.Str() + name = fields.Str(attribute='name') class RhodecodeEvent(object): @@ -54,13 +55,13 @@ class RhodecodeEvent(object): self.utc_timestamp = datetime.utcnow() @property - def acting_user(self): + def actor(self): if self.request: return self.request.user.get_instance() return SYSTEM_USER @property - def acting_ip(self): + def actor_ip(self): if self.request: return self.request.user.ip_addr return '' diff --git a/rhodecode/events/repo.py b/rhodecode/events/repo.py --- a/rhodecode/events/repo.py +++ b/rhodecode/events/repo.py @@ -18,11 +18,11 @@ from marshmallow import Schema, fields -from rhodecode.model.db import Repository, Session +from rhodecode.model.db import User, Repository, Session from rhodecode.events.base import RhodecodeEvent -def get_pull_request_url(repo): +def get_repo_url(repo): from rhodecode.model.repo import RepoModel return RepoModel().get_url(repo) @@ -33,14 +33,14 @@ class RepositorySchema(Schema): """ repo_id = fields.Integer() repo_name = fields.Str() - url = fields.Function(get_pull_request_url) + url = fields.Function(get_repo_url) class RepoEventSchema(RhodecodeEvent.MarshmallowSchema): """ Marshmallow schema for a repository event """ - repository = fields.Nested(RepositorySchema) + repo = fields.Nested(RepositorySchema) class RepoEvent(RhodecodeEvent): @@ -100,14 +100,14 @@ class RepoVCSEvent(RepoEvent): super(RepoVCSEvent, self).__init__(self.repo) @property - def acting_user(self): + def actor(self): if self.extras.get('username'): - return User.get_by_username(extras['username']) + return User.get_by_username(self.extras['username']) @property - def acting_ip(self): + def actor_ip(self): if self.extras.get('ip'): - return User.get_by_username(extras['ip']) + return self.extras['ip'] class RepoPrePullEvent(RepoVCSEvent): diff --git a/rhodecode/model/pull_request.py b/rhodecode/model/pull_request.py --- a/rhodecode/model/pull_request.py +++ b/rhodecode/model/pull_request.py @@ -749,7 +749,7 @@ class PullRequestModel(BaseModel): return ids_to_add, ids_to_remove def get_url(self, pull_request): - return url('pullrequest_show', repo_name=self.target_repo.repo_name, + return h.url('pullrequest_show', repo_name=self.target_repo.repo_name, pull_request_id=self.pull_request_id, qualified=True) diff --git a/rhodecode/model/repo.py b/rhodecode/model/repo.py --- a/rhodecode/model/repo.py +++ b/rhodecode/model/repo.py @@ -142,7 +142,7 @@ class RepoModel(BaseModel): return None def get_url(self, repo): - return url('summary_home', repo_name=repo.repo_name, qualified=True) + return h.url('summary_home', repo_name=repo.repo_name, qualified=True) def get_users(self, name_contains=None, limit=20, only_active=True): # TODO: mikhail: move this method to the UserModel. diff --git a/rhodecode/tests/events/test_pullrequest.py b/rhodecode/tests/events/test_pullrequest.py --- a/rhodecode/tests/events/test_pullrequest.py +++ b/rhodecode/tests/events/test_pullrequest.py @@ -31,6 +31,23 @@ from rhodecode.events import ( PullRequestCloseEvent, ) +# TODO: dan: make the serialization tests complete json comparisons +@pytest.mark.backends("git", "hg") +@pytest.mark.parametrize('EventClass', [ + PullRequestCreateEvent, + PullRequestUpdateEvent, + PullRequestReviewEvent, + PullRequestMergeEvent, + PullRequestCloseEvent, +]) +def test_pullrequest_events_serialized(pr_util, EventClass): + pr = pr_util.create_pull_request() + event = EventClass(pr) + data = event.as_dict() + assert data['name'] == EventClass.name + assert data['repo']['repo_name'] == pr.target_repo.repo_name + assert data['pullrequest']['pull_request_id'] == pr.pull_request_id + @pytest.mark.backends("git", "hg") def test_create_pull_request_events(pr_util): diff --git a/rhodecode/tests/events/test_repo.py b/rhodecode/tests/events/test_repo.py --- a/rhodecode/tests/events/test_repo.py +++ b/rhodecode/tests/events/test_repo.py @@ -49,6 +49,39 @@ def scm_extras(user_regular, repo_stub): return extras +# TODO: dan: make the serialization tests complete json comparisons +@pytest.mark.parametrize('EventClass', [ + RepoPreCreateEvent, RepoCreatedEvent, + RepoPreDeleteEvent, RepoDeletedEvent, +]) +def test_repo_events_serialized(repo_stub, EventClass): + event = EventClass(repo_stub) + data = event.as_dict() + assert data['name'] == EventClass.name + assert data['repo']['repo_name'] == repo_stub.repo_name + + +@pytest.mark.parametrize('EventClass', [ + RepoPrePullEvent, RepoPullEvent, RepoPrePushEvent +]) +def test_vcs_repo_events_serialize(repo_stub, scm_extras, EventClass): + event = EventClass(repo_name=repo_stub.repo_name, extras=scm_extras) + data = event.as_dict() + assert data['name'] == EventClass.name + assert data['repo']['repo_name'] == repo_stub.repo_name + + + +@pytest.mark.parametrize('EventClass', [RepoPushEvent]) +def test_vcs_repo_events_serialize(repo_stub, scm_extras, EventClass): + event = EventClass(repo_name=repo_stub.repo_name, + pushed_commit_ids=scm_extras['commit_ids'], + extras=scm_extras) + data = event.as_dict() + assert data['name'] == EventClass.name + assert data['repo']['repo_name'] == repo_stub.repo_name + + def test_create_delete_repo_fires_events(backend): with EventCatcher() as event_catcher: repo = backend.create_repo() @@ -77,3 +110,4 @@ def test_push_fires_events(scm_extras): with EventCatcher() as event_catcher: hooks_base.post_pull(scm_extras) assert event_catcher.events_types == [RepoPullEvent] +