From 859a72feb73f197debcb05d5356d7314f577b07e Mon Sep 17 00:00:00 2001
From: Pierre-Yves Chibon
Date: Nov 03 2016 15:09:04 +0000
Subject: [PATCH 1/3] Hide the title of private tickets when linking to them in markdown
---
diff --git a/pagure/pfmarkdown.py b/pagure/pfmarkdown.py
index 2e28810..694c1fc 100644
--- a/pagure/pfmarkdown.py
+++ b/pagure/pfmarkdown.py
@@ -272,13 +272,18 @@ def _obj_anchor_tag(user, namespace, repo, obj, text):
url = flask.url_for(
'view_issue', username=user, namespace=namespace, repo=repo,
issueid=obj.id)
+ if obj.private:
+ title = 'Private issue'
+ else:
+ title = obj.title
else:
url = flask.url_for(
'request_pull', username=user, namespace=namespace, repo=repo,
requestid=obj.id)
+ title = obj.title
element = markdown.util.etree.Element("a")
element.set('href', url)
- element.set('title', obj.title)
+ element.set('title', title)
element.text = text
return element
From dc35b06248d82a930be8a2d745e24347547bc4cf Mon Sep 17 00:00:00 2001
From: Pierre-Yves Chibon
Date: Nov 03 2016 15:16:39 +0000
Subject: [PATCH 2/3] Add some unit-tests for private issue linked to in markdown
---
diff --git a/tests/test_pagure_lib.py b/tests/test_pagure_lib.py
index 0ad9deb..e7cced9 100644
--- a/tests/test_pagure_lib.py
+++ b/tests/test_pagure_lib.py
@@ -2605,6 +2605,20 @@ class PagureLibtests(tests.Modeltests):
self.assertEqual(iss.id, 7)
self.assertEqual(iss.title, 'test issue #7')
+ iss = pagure.lib.new_issue(
+ issue_id=8,
+ session=self.session,
+ repo=item,
+ title='private issue #8',
+ content='Private content test issue #8 in forked repo',
+ user='pingou',
+ private=True,
+ ticketfolder=None,
+ )
+ self.session.commit()
+ self.assertEqual(iss.id, 8)
+ self.assertEqual(iss.title, 'private issue #8')
+
texts = [
'foo bar test#1 see?',
'foo bar pingou/test#2 I mean, really',
@@ -2614,7 +2628,8 @@ class PagureLibtests(tests.Modeltests):
'foo bar fork/user/ns/test#5 bouza!',
'foo bar fork/pingou/ns/test#7 bouza!',
'test#1 bazinga!',
- 'pingou opened the PR forks/pingou/test#2'
+ 'pingou opened the PR forks/pingou/test#2',
+ 'fork/pingou/ns/test#8 is private',
]
expected = [
# 'foo bar test#1 see?',
@@ -2645,7 +2660,10 @@ class PagureLibtests(tests.Modeltests):
# 'pingou opened the PR forks/pingou/test#2'
'pingou opened the PR pingou/test#2
'
+ 'title="test pull-request in fork">pingou/test#2
',
+ # 'fork/pingou/ns/test#8 is private',
+ 'pingou/ns/test#8 is private
',
]
with pagure.APP.app_context():
From e1630ca0a0bff7633c9cedcf44a04e25ec920dfa Mon Sep 17 00:00:00 2001
From: Jeremy Cline
Date: Nov 03 2016 20:17:33 +0000
Subject: [PATCH 3/3] Add unit tests for pfmarkdown's _obj_anchor_tag
Signed-off-by: Jeremy Cline
---
diff --git a/pagure/pfmarkdown.py b/pagure/pfmarkdown.py
index 694c1fc..f7824d3 100644
--- a/pagure/pfmarkdown.py
+++ b/pagure/pfmarkdown.py
@@ -267,7 +267,12 @@ def _pr_exists(user, namespace, repo, idx):
def _obj_anchor_tag(user, namespace, repo, obj, text):
- """ Utility method generating the link to an issue or a PR. """
+ """
+ Utility method generating the link to an issue or a PR.
+
+ :return: An element tree containing the href to the issue or PR
+ :rtype: xml.etree.ElementTree.Element
+ """
if obj.isa == 'issue':
url = flask.url_for(
'view_issue', username=user, namespace=namespace, repo=repo,
diff --git a/tests/test_pfmarkdown.py b/tests/test_pfmarkdown.py
new file mode 100644
index 0000000..de9329d
--- /dev/null
+++ b/tests/test_pfmarkdown.py
@@ -0,0 +1,55 @@
+import unittest
+from xml.etree import ElementTree
+
+from mock import patch, Mock
+
+from pagure import pfmarkdown
+from pagure.lib import model
+
+
+@patch('pagure.pfmarkdown.flask.url_for', Mock(return_value='http://eh/'))
+class TestObjAnchorTag(unittest.TestCase):
+ """
+ A set of tests for the pagure.pfmarkdown._obj_anchor_tag function
+ """
+
+ def test_obj_anchor_tag_issue(self):
+ """Assert links to issues are generated correctly"""
+ issue = model.Issue(
+ title='The issue summary',
+ content='The issue description',
+ )
+ expected_markup = (''
+ 'My Issue')
+ element = pfmarkdown._obj_anchor_tag(
+ 'jcline', None, None, issue, 'My Issue')
+
+ self.assertEqual(expected_markup, ElementTree.tostring(element))
+
+ def test_obj_anchor_tag_private_issue(self):
+ """Assert links to private issues hide the title"""
+ issue = model.Issue(
+ title='The private issue summary',
+ content='The issue description',
+ private=True
+ )
+ expected_markup = (''
+ 'My Issue')
+ element = pfmarkdown._obj_anchor_tag(
+ 'jcline', None, None, issue, 'My Issue')
+
+ self.assertEqual(expected_markup, ElementTree.tostring(element))
+
+ def test_obj_anchor_tag_pr(self):
+ """Assert links to pull requests are generated correctly"""
+ pr = model.PullRequest(title='The pull request summary')
+ expected_markup = ('My Pull Request')
+ element = pfmarkdown._obj_anchor_tag(
+ 'jcline', None, None, pr, 'My Pull Request')
+
+ self.assertEqual(expected_markup, ElementTree.tostring(element))
+
+
+if __name__ == '__main__':
+ unittest.main()