import collections import pytest from rhodecode.lib.utils import PartialRenderer from rhodecode.lib.utils2 import AttributeDict from rhodecode.model.notification import EmailNotificationModel def test_get_template_obj(app): template = EmailNotificationModel().get_renderer( EmailNotificationModel.TYPE_TEST) assert isinstance(template, PartialRenderer) def test_render_email(app, http_host_only_stub): kwargs = {} subject, headers, body, body_plaintext = EmailNotificationModel().render_email( EmailNotificationModel.TYPE_TEST, **kwargs) # subject assert subject == 'Test "Subject" hello "world"' # headers assert headers == 'X=Y' # body plaintext assert body_plaintext == 'Email Plaintext Body' # body notification_footer = 'This is a notification from RhodeCode. http://%s/' \ % http_host_only_stub assert notification_footer in body assert 'Email Body' in body def test_render_pr_email(app, user_admin): ref = collections.namedtuple('Ref', 'name, type')( 'fxies123', 'book' ) pr = collections.namedtuple('PullRequest', 'pull_request_id, title, description, source_ref_parts, source_ref_name, target_ref_parts, target_ref_name')( 200, 'Example Pull Request', 'Desc of PR', ref, 'bookmark', ref, 'Branch') source_repo = target_repo = collections.namedtuple('Repo', 'type, repo_name')( 'hg', 'pull_request_1') kwargs = { 'user': ' Marcin Kuzminski', 'pull_request': pr, 'pull_request_commits': [], 'pull_request_target_repo': target_repo, 'pull_request_target_repo_url': 'x', 'pull_request_source_repo': source_repo, 'pull_request_source_repo_url': 'x', 'pull_request_url': 'http://localhost/pr1', } subject, headers, body, body_plaintext = EmailNotificationModel().render_email( EmailNotificationModel.TYPE_PULL_REQUEST, **kwargs) # subject assert subject == 'Marcin Kuzminski wants you to review pull request #200: "Example Pull Request"' @pytest.mark.parametrize('mention', [ True, False ]) @pytest.mark.parametrize('email_type', [ EmailNotificationModel.TYPE_COMMIT_COMMENT, EmailNotificationModel.TYPE_PULL_REQUEST_COMMENT ]) def test_render_comment_subject_no_newlines(app, mention, email_type): ref = collections.namedtuple('Ref', 'name, type')( 'fxies123', 'book' ) pr = collections.namedtuple('PullRequest', 'pull_request_id, title, description, source_ref_parts, source_ref_name, target_ref_parts, target_ref_name')( 200, 'Example Pull Request', 'Desc of PR', ref, 'bookmark', ref, 'Branch') source_repo = target_repo = collections.namedtuple('Repo', 'type, repo_name')( 'hg', 'pull_request_1') kwargs = { 'user': ' Marcin Kuzminski', 'commit': AttributeDict(raw_id='a'*40, message='Commit message'), 'status_change': 'approved', 'commit_target_repo': AttributeDict(), 'repo_name': 'test-repo', 'comment_file': 'test-file.py', 'comment_line': 'n100', 'comment_type': 'note', 'commit_comment_url': 'http://comment-url', 'instance_url': 'http://rc-instance', 'comment_body': 'hello world', 'mention': mention, 'pr_comment_url': 'http://comment-url', 'pr_source_repo': AttributeDict(repo_name='foobar'), 'pr_source_repo_url': 'http://soirce-repo/url', 'pull_request': pr, 'pull_request_commits': [], 'pull_request_target_repo': target_repo, 'pull_request_target_repo_url': 'x', 'pull_request_source_repo': source_repo, 'pull_request_source_repo_url': 'x', } subject, headers, body, body_plaintext = EmailNotificationModel().render_email( email_type, **kwargs) assert '\n' not in subject