diff --git a/alembic/versions/6addaed6008e_add_description_for_tags.py b/alembic/versions/6addaed6008e_add_description_for_tags.py
index 588ea6a..14411bc 100644
--- a/alembic/versions/6addaed6008e_add_description_for_tags.py
+++ b/alembic/versions/6addaed6008e_add_description_for_tags.py
@@ -19,7 +19,7 @@ def upgrade():
'''
op.add_column(
'tags_colored',
- sa.Column('tag_description', sa.String(255))
+ sa.Column('tag_description', sa.String(255), default="")
)
def downgrade():
diff --git a/pagure/lib/model.py b/pagure/lib/model.py
index e532d6d..f982f9e 100644
--- a/pagure/lib/model.py
+++ b/pagure/lib/model.py
@@ -1089,7 +1089,7 @@ class TagColored(BASE):
id = sa.Column(sa.Integer, primary_key=True)
tag = sa.Column(sa.String(255), nullable=False)
- tag_description = sa.Column(sa.String(255))
+ tag_description = sa.Column(sa.String(255), default="")
project_id = sa.Column(
sa.Integer,
sa.ForeignKey(
@@ -1109,8 +1109,8 @@ class TagColored(BASE):
)
def __repr__(self):
- return 'TagColored(id: %s, tag:%s, color:%s)' % (
- self.id, self.tag, self.tag_color)
+ return 'TagColored(id: %s, tag:%s, tag_description:%s, color:%s)' % (
+ self.id, self.tag, self.tag_description, self.tag_color)
class TagIssueColored(BASE):
diff --git a/pagure/ui/issues.py b/pagure/ui/issues.py
index 19a90c6..f5e6085 100644
--- a/pagure/ui/issues.py
+++ b/pagure/ui/issues.py
@@ -461,7 +461,10 @@ def update_tags(repo, username=None, namespace=None):
if tag.strip() and tag.strip() not in seen and not seen.add(tag.strip())
]
- tag_descriptions = flask.request.form.getlist('tag_description')
+ tag_descriptions = [
+ desc.strip()
+ for desc in flask.request.form.getlist('tag_description')
+ ]
# Uniquify and order preserving
seen = set()
diff --git a/tests/test_pagure_flask_ui_issues.py b/tests/test_pagure_flask_ui_issues.py
index c71bd30..d7b169d 100644
--- a/tests/test_pagure_flask_ui_issues.py
+++ b/tests/test_pagure_flask_ui_issues.py
@@ -1518,6 +1518,7 @@ class PagureFlaskIssuestests(tests.Modeltests):
'name="csrf_token" type="hidden" value="')[1].split('">')[0]
data = {'tag': 'tag2',
+ 'tag_description': 'lorem ipsum',
'tag_color': 'DeepSkyBlue'}
output = self.app.post('/test/tag/tag1/edit', data=data)
@@ -1532,7 +1533,19 @@ class PagureFlaskIssuestests(tests.Modeltests):
'Settings - test - Pagure', output.data)
self.assertIn(
'\n '
- 'Edited tag: tag1(DeepSkyBlue) to tag2(DeepSkyBlue)',
+ 'Edited tag: tag1()[DeepSkyBlue] to tag2(lorem ipsum)[DeepSkyBlue]',
+ output.data)
+
+ # update tag with empty description
+ data['tag_description'] = ''
+ output = self.app.post(
+ '/test/tag/tag2/edit', data=data, follow_redirects=True)
+ self.assertEqual(output.status_code, 200)
+ self.assertIn(
+ 'Settings - test - Pagure', output.data)
+ self.assertIn(
+ '\n '
+ 'Edited tag: tag2(lorem ipsum)[DeepSkyBlue] to tag2()[DeepSkyBlue]',
output.data)
# After edit, list tags
@@ -2013,6 +2026,7 @@ class PagureFlaskIssuestests(tests.Modeltests):
# No CSRF
data = {
'tag': 'red',
+ 'tag_description': 'lorem ipsum',
'tag_color': '#ff0000'
}
output = self.app.post(
@@ -2030,6 +2044,7 @@ class PagureFlaskIssuestests(tests.Modeltests):
# Invalid color
data = {
'tag': 'red',
+ 'tag_description': 'lorem ipsum',
'tag_color': 'red',
'csrf_token': csrf_token,
}
@@ -2049,6 +2064,7 @@ class PagureFlaskIssuestests(tests.Modeltests):
# Inconsistent length color
data = {
'tag': ['red', 'blue'],
+ 'tag_description': ['lorem ipsum', 'foo bar'],
'tag_color': 'red',
'csrf_token': csrf_token,
}
@@ -2062,15 +2078,35 @@ class PagureFlaskIssuestests(tests.Modeltests):
'Color: red does not match the expected pattern',
output.data)
self.assertIn(
- '\n tags and tag colors'
- ' are not of the same length', output.data)
+ '\n tags, tag descriptions and'
+ ' tag colors are not of the same length', output.data)
self.assertIn(
'
', output.data)
- # Valid query
+ # Inconsistent length description
data = {
'tag': ['red', 'blue'],
+ 'tag_description': 'lorem ipsum',
+ 'tag_color': ['#ff0000', '#003cff'],
+ 'csrf_token': csrf_token,
+ }
+ output = self.app.post(
+ '/test/update/tags', data=data, follow_redirects=True)
+ self.assertEqual(output.status_code, 200)
+ self.assertIn(
+ 'Settings - test - Pagure', output.data)
+ self.assertIn(
+ '\n tags, tag descriptions and'
+ ' tag colors are not of the same length', output.data)
+ self.assertIn(
+ ' ', output.data)
+
+ # consistent length, but empty description
+ data = {
+ 'tag': ['red', 'blue'],
+ 'tag_description': ['lorem ipsum', ''],
'tag_color': ['#ff0000', '#003cff'],
'csrf_token': csrf_token,
}
@@ -2081,20 +2117,53 @@ class PagureFlaskIssuestests(tests.Modeltests):
'Settings - test - Pagure', output.data)
self.assertIn(
'blue', output.data)
+ '#003cff">blue\n'
+ ' '
+ '', output.data)
self.assertIn(
'',
output.data)
self.assertIn(
'red', output.data)
+ '#ff0000">red\n'
+ ' lorem ipsum'
+ '', output.data)
+ self.assertIn(
+ '',
+ output.data)
+
+ # Valid query
+ data = {
+ 'tag': ['red', 'green'],
+ 'tag_description': ['lorem ipsum', 'sample description'],
+ 'tag_color': ['#ff0000', '#00ff00'],
+ 'csrf_token': csrf_token,
+ }
+ output = self.app.post(
+ '/test/update/tags', data=data, follow_redirects=True)
+ self.assertEqual(output.status_code, 200)
+ self.assertIn(
+ 'Settings - test - Pagure', output.data)
+ self.assertIn(
+ 'green\n'
+ ' sample description'
+ '', output.data)
+ self.assertIn(
+ '',
+ output.data)
+ self.assertIn(
+ 'red\n'
+ ' lorem ipsum'
+ '', output.data)
self.assertIn(
'',
output.data)
# After update, list tags
tags = pagure.lib.get_tags_of_project(self.session, repo)
- self.assertEqual([tag.tag for tag in tags], ['blue', 'red'])
+ self.assertEqual([tag.tag for tag in tags], ['blue', 'green', 'red'])
if __name__ == '__main__':
diff --git a/tests/test_pagure_lib.py b/tests/test_pagure_lib.py
index b73ad40..9bfb92e 100644
--- a/tests/test_pagure_lib.py
+++ b/tests/test_pagure_lib.py
@@ -500,6 +500,7 @@ class PagureLibtests(tests.Modeltests):
project=repo,
old_tag='foo',
new_tag='bar',
+ new_tag_description='lorem ipsum',
new_tag_color='black',
user='pingou',
ticketfolder=None,
@@ -512,6 +513,7 @@ class PagureLibtests(tests.Modeltests):
project=repo,
old_tag=None,
new_tag='bar',
+ new_tag_description='lorem ipsum',
new_tag_color='black',
user='pingou',
ticketfolder=None,
@@ -522,6 +524,7 @@ class PagureLibtests(tests.Modeltests):
project=repo,
old_tag='tag1',
new_tag='tag2',
+ new_tag_description='lorem ipsum',
new_tag_color='black',
user='pingou',
ticketfolder=None,
@@ -529,7 +532,7 @@ class PagureLibtests(tests.Modeltests):
self.session.commit()
self.assertEqual(
msgs,
- ['Edited tag: tag1(DeepSkyBlue) to tag2(black)']
+ ['Edited tag: tag1()[DeepSkyBlue] to tag2(lorem ipsum)[black]']
)
# Add a new tag
@@ -551,6 +554,7 @@ class PagureLibtests(tests.Modeltests):
project=repo,
old_tag='tag2',
new_tag='tag3',
+ new_tag_description='lorem ipsum',
new_tag_color='red',
user='pingou',
ticketfolder=None,
@@ -562,12 +566,13 @@ class PagureLibtests(tests.Modeltests):
project=repo,
old_tag='tag2',
new_tag='tag4',
+ new_tag_description='ipsum lorem',
new_tag_color='purple',
user='pingou',
ticketfolder=None,
)
self.session.commit()
- self.assertEqual(msgs, ['Edited tag: tag2(black) to tag4(purple)'])
+ self.assertEqual(msgs, ['Edited tag: tag2(lorem ipsum)[black] to tag4(ipsum lorem)[purple]'])
@patch('pagure.lib.git.update_git')
@patch('pagure.lib.notify.send_email')
diff --git a/tests/test_pagure_lib_model.py b/tests/test_pagure_lib_model.py
index 696ea42..1acfd16 100644
--- a/tests/test_pagure_lib_model.py
+++ b/tests/test_pagure_lib_model.py
@@ -153,6 +153,7 @@ class PagureLibModeltests(tests.Modeltests):
item = pagure.lib.model.TagColored(
tag='foo',
+ tag_description='bar',
tag_color='DeepSkyBlue',
project_id=repo.id)
self.session.add(item)