From bb29e1232c6bac32553a0fb43236893f962e14dd Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Aug 11 2016 13:30:44 +0000 Subject: [PATCH 1/16] Add a display_name and a description to groups --- diff --git a/pagure/lib/model.py b/pagure/lib/model.py index 68085e6..abf16d9 100644 --- a/pagure/lib/model.py +++ b/pagure/lib/model.py @@ -1261,6 +1261,8 @@ class PagureGroup(BASE): id = sa.Column(sa.Integer, primary_key=True) group_name = sa.Column(sa.String(16), nullable=False, unique=True) + display_name = sa.Column(sa.String(255), nullable=False, unique=True) + description = sa.Column(sa.String(255), nullable=True) group_type = sa.Column( sa.String(16), sa.ForeignKey( From 7702ddf182c1a129f3d7b160e8df84545f9481ce Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Aug 11 2016 13:30:54 +0000 Subject: [PATCH 2/16] Add a to_json() method to the PagureGroup objects --- diff --git a/pagure/lib/model.py b/pagure/lib/model.py index abf16d9..93a9f03 100644 --- a/pagure/lib/model.py +++ b/pagure/lib/model.py @@ -1292,6 +1292,21 @@ class PagureGroup(BASE): return 'Group: %s - name %s' % (self.id, self.group_name) + def to_json(self, public=False): + ''' Returns a dictionnary representation of the pull-request. + + ''' + output = { + 'name': self.group_name, + 'display_name': self.display_name, + 'description': self.description, + 'group_type': self.group_type, + 'creator': self.creator.to_json(public=public), + 'date_created': self.created.strftime('%s'), + } + + return output + class ProjectGroup(BASE): """ From 4451bc7c01475ca3a44ca4d37f25520b1faf24ff Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Aug 11 2016 13:33:49 +0000 Subject: [PATCH 3/16] Specify display name and description when creating a group --- diff --git a/pagure/lib/__init__.py b/pagure/lib/__init__.py index 8b1be61..73a0ad5 100644 --- a/pagure/lib/__init__.py +++ b/pagure/lib/__init__.py @@ -2537,7 +2537,9 @@ def delete_user_of_group(session, username, groupname, user, is_admin, session.flush() -def add_group(session, group_name, group_type, user, is_admin, blacklist): +def add_group( + session, group_name, display_name, description, + group_type, user, is_admin, blacklist): ''' Creates a new group with the given information. ''' if ' ' in group_name: @@ -2576,6 +2578,8 @@ def add_group(session, group_name, group_type, user, is_admin, blacklist): grp = pagure.lib.model.PagureGroup( group_name=group_name, + display_name=display_name, + description=description, group_type=group_type, user_id=user.id, ) diff --git a/pagure/templates/add_group.html b/pagure/templates/add_group.html index 11fe7c1..73bd161 100644 --- a/pagure/templates/add_group.html +++ b/pagure/templates/add_group.html @@ -14,6 +14,8 @@ {{ render_field_in_row(form.group_name) }} + {{ render_field_in_row(form.display_name) }} + {{ render_field_in_row(form.description) }} {%- if admin %} {{ render_field_in_row(form.group_type) }} {%- endif %} diff --git a/pagure/ui/groups.py b/pagure/ui/groups.py index e98e844..a1183ca 100644 --- a/pagure/ui/groups.py +++ b/pagure/ui/groups.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """ - (c) 2015 - Copyright Red Hat Inc + (c) 2015-2016 - Copyright Red Hat Inc Authors: Pierre-Yves Chibon @@ -234,10 +234,15 @@ def add_group(): if form.validate_on_submit(): try: - group_name = form.group_name.data + group_name = form.group_name.data.strip() + display_name=form.display_name.data.strip() + description=form.description.data.strip() + msg = pagure.lib.add_group( session=pagure.SESSION, group_name=group_name, + display_name=display_name, + description=description, group_type=form.group_type.data, user=flask.g.fas_user.username, is_admin=pagure.is_admin(), From 42452cb42835df4d264f65a0db725081a14cbb6a Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Aug 11 2016 13:39:44 +0000 Subject: [PATCH 4/16] Add the possibility to edit group info Group info including the display name and the description --- diff --git a/pagure/forms.py b/pagure/forms.py index d6d0e24..8802c98 100644 --- a/pagure/forms.py +++ b/pagure/forms.py @@ -359,7 +359,23 @@ class CommentForm(wtf.Form): [wtforms.validators.Required(), file_virus_validator]) -class NewGroupForm(wtf.Form): +class EditGroupForm(wtf.Form): + """ Form to ask for a password change. """ + display_name = wtforms.TextField( + 'Group name to display *', + [ + wtforms.validators.Required(), + ] + ) + description = wtforms.TextField( + 'Description *', + [ + wtforms.validators.Required(), + ] + ) + + +class NewGroupForm(EditGroupForm): """ Form to ask for a password change. """ group_name = wtforms.TextField( 'Group name *', diff --git a/pagure/lib/__init__.py b/pagure/lib/__init__.py index 73a0ad5..03efeca 100644 --- a/pagure/lib/__init__.py +++ b/pagure/lib/__init__.py @@ -2498,6 +2498,51 @@ def add_user_to_group(session, username, group, user, is_admin): new_user.username, group.group_name) +def edit_group_info( + session, group, display_name, description, user, is_admin): + ''' Edit the information regarding a given group. + ''' + action_user = user + user = search_user(session, username=user) + if not user: + raise pagure.exceptions.PagureException( + 'No user `%s` found' % action_user) + + if group.group_name not in user.groups \ + and not is_admin \ + and user.username != group.creator.username: + raise pagure.exceptions.PagureException( + 'You are not allowed to edit this group') + + edits = [] + if display_name and display_name != group.display_name: + group.display_name = display_name + edits.append('display_name') + if description and description != group.description: + group.description = description + edits.append('description') + + session.add(group) + session.flush() + + msg = 'Nothing changed' + if edits: + pagure.lib.notify.log( + None, + topic='group.edit', + msg=dict( + group=group.to_json(public=True), + fields=edits, + agent=user.username, + ), + redis=REDIS, + ) + msg = 'Group "%s" (%s) edited' % ( + group.display_name, group.group_name) + + return msg + + def delete_user_of_group(session, username, groupname, user, is_admin, force=False): ''' Removes the specified user from the given group. diff --git a/pagure/templates/edit_group.html b/pagure/templates/edit_group.html new file mode 100644 index 0000000..8013b60 --- /dev/null +++ b/pagure/templates/edit_group.html @@ -0,0 +1,32 @@ +{% extends "master.html" %} +{% from "_formhelper.html" import render_field_in_row %} + +{% set tag = "groups" %} +{% block title %}Edit group: {{ group.group_name }}{% endblock %} + + +{% block content %} + +

Edit group: {{ group.group_name }}

+ +
+
+ +
+ {{ render_field_in_row(form.display_name) }} + {{ render_field_in_row(form.description) }} + {%- if admin %} + {{ render_field_in_row(form.group_type) }} + {%- endif %} +
+

+ + + {{ form.csrf_token }} +

+ + + +{% endblock %} diff --git a/pagure/ui/groups.py b/pagure/ui/groups.py index a1183ca..877333d 100644 --- a/pagure/ui/groups.py +++ b/pagure/ui/groups.py @@ -114,6 +114,63 @@ def view_group(group): ) +@pagure.APP.route('/group//edit/', methods=['GET', 'POST']) +@pagure.APP.route('/group//edit', methods=['GET', 'POST']) +@pagure.login_required +def edit_group(group): + ''' Allows editing the information about this group. ''' + if not pagure.APP.config.get('ENABLE_USER_MNGT', True): + flask.abort(404) + + group_type = 'user' + is_admin = pagure.is_admin() + if is_admin: + group_type = None + group = pagure.lib.search_groups( + pagure.SESSION, group_name=group, group_type=group_type) + + if not group: + flask.abort(404, 'Group not found') + + # Edit group info + form = pagure.forms.EditGroupForm() + if form.validate_on_submit(): + + try: + msg = pagure.lib.edit_group_info( + pagure.SESSION, + group=group, + display_name=form.display_name.data, + description=form.description.data, + user=flask.g.fas_user.username, + is_admin=is_admin, + ) + pagure.SESSION.commit() + flask.flash(msg) + return flask.redirect( + flask.url_for('.view_group', group=group.group_name)) + except pagure.exceptions.PagureException as err: + pagure.SESSION.rollback() + flask.flash(err.message, 'error') + return flask.redirect( + flask.url_for('.view_group', group=group.group_name)) + except SQLAlchemyError as err: # pragma: no cover + pagure.SESSION.rollback() + flask.flash( + 'Could not edit group `%s`.' % (group.group_name), + 'error') + pagure.APP.logger.debug( + 'Could not edit group `%s`.' % (group.group_name)) + pagure.APP.logger.exception(err) + + + return flask.render_template( + 'edit_group.html', + group=group, + form=form, + ) + + @pagure.APP.route('/group///delete', methods=['POST']) @pagure.login_required def group_user_delete(user, group): From ce666617c2d06c5e24b0431627669babdab0a3a2 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Aug 11 2016 13:44:02 +0000 Subject: [PATCH 5/16] Adjust the unit-tests for the change in the group model --- diff --git a/tests/test_pagure_flask_api.py b/tests/test_pagure_flask_api.py index f3e627d..e22a2e4 100644 --- a/tests/test_pagure_flask_api.py +++ b/tests/test_pagure_flask_api.py @@ -133,6 +133,7 @@ class PagureFlaskApitests(tests.Modeltests): item = pagure.lib.model.PagureGroup( group_name='group1', group_type='user', + display_name='User group', user_id=1, # pingou ) self.session.add(item) @@ -140,6 +141,7 @@ class PagureFlaskApitests(tests.Modeltests): item = pagure.lib.model.PagureGroup( group_name='rel-eng', group_type='user', + display_name='Release engineering group', user_id=1, # pingou ) self.session.add(item) diff --git a/tests/test_pagure_flask_ui_groups.py b/tests/test_pagure_flask_ui_groups.py index 26e392d..efb2a9e 100644 --- a/tests/test_pagure_flask_ui_groups.py +++ b/tests/test_pagure_flask_ui_groups.py @@ -88,10 +88,12 @@ class PagureFlaskGroupstests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn('

Create group

', output.data) self.assertEqual(output.data.count( - 'This field is required.'), 1) + 'This field is required.'), 3) data = { 'group_name': 'test_group', + 'display_name': 'Test Group', + 'description': 'This is a group for the tests', } # Missing CSRF @@ -130,6 +132,8 @@ class PagureFlaskGroupstests(tests.Modeltests): data = { 'group_name': 'test_admin_group', 'group_type': 'admin', + 'display_name': 'Test Admin Group', + 'description': 'This is another group for the tests', 'csrf_token': csrf_token, } diff --git a/tests/test_pagure_flask_ui_repo.py b/tests/test_pagure_flask_ui_repo.py index 8d20941..fb23dc9 100644 --- a/tests/test_pagure_flask_ui_repo.py +++ b/tests/test_pagure_flask_ui_repo.py @@ -190,6 +190,8 @@ class PagureFlaskRepotests(tests.Modeltests): self.session, group_name='foo', group_type='bar', + display_name='foo group', + description=None, user='pingou', is_admin=False, blacklist=pagure.APP.config['BLACKLISTED_GROUPS'], @@ -269,6 +271,8 @@ class PagureFlaskRepotests(tests.Modeltests): msg = pagure.lib.add_group( self.session, group_name='foo', + display_name='foo group', + description=None, group_type='bar', user='pingou', is_admin=False, @@ -313,7 +317,6 @@ class PagureFlaskRepotests(tests.Modeltests): self.assertIn( '\n Group added', output.data) - @patch('pagure.ui.repo.admin_session_timedout') def test_remove_user_when_user_mngt_off(self, ast): """ Test the remove_user endpoint when user management is turned @@ -469,6 +472,8 @@ class PagureFlaskRepotests(tests.Modeltests): session=self.session, group_name='testgrp', group_type='user', + display_name='testgrp group', + description=None, user='pingou', is_admin=False, blacklist=[], @@ -548,6 +553,8 @@ class PagureFlaskRepotests(tests.Modeltests): session=self.session, group_name='testgrp', group_type='user', + display_name='testgrp group', + description=None, user='pingou', is_admin=False, blacklist=[], diff --git a/tests/test_pagure_lib.py b/tests/test_pagure_lib.py index f233651..f566487 100644 --- a/tests/test_pagure_lib.py +++ b/tests/test_pagure_lib.py @@ -1895,6 +1895,8 @@ class PagureLibtests(tests.Modeltests): pagure.lib.add_group, self.session, group_name='foo', + display_name='foo group', + description=None, group_type='bar', user='pingou', is_admin=True, @@ -1910,6 +1912,8 @@ class PagureLibtests(tests.Modeltests): pagure.lib.add_group, self.session, group_name='foo', + display_name='foo group', + description=None, group_type='user', user='test', is_admin=False, @@ -1922,6 +1926,8 @@ class PagureLibtests(tests.Modeltests): msg = pagure.lib.add_group( self.session, group_name='foo', + display_name='foo group', + description=None, group_type='bar', user='pingou', is_admin=False, @@ -1940,6 +1946,8 @@ class PagureLibtests(tests.Modeltests): pagure.lib.add_group, self.session, group_name='foo', + display_name='foo group', + description=None, group_type='bar', user='pingou', is_admin=False, @@ -1952,6 +1960,8 @@ class PagureLibtests(tests.Modeltests): pagure.lib.add_group, self.session, group_name='forks', + display_name='foo group', + description=None, group_type='bar', user='pingou', is_admin=False, @@ -2072,6 +2082,8 @@ class PagureLibtests(tests.Modeltests): msg = pagure.lib.add_group( self.session, group_name='foo', + display_name='foo group', + description=None, group_type='bar', user='pingou', is_admin=False, @@ -2087,6 +2099,8 @@ class PagureLibtests(tests.Modeltests): msg = pagure.lib.add_group( self.session, group_name='bar', + display_name='bar group', + description=None, group_type='admin', user='pingou', is_admin=True, diff --git a/tests/test_pagure_lib_git.py b/tests/test_pagure_lib_git.py index fff7ac4..730e512 100644 --- a/tests/test_pagure_lib_git.py +++ b/tests/test_pagure_lib_git.py @@ -148,6 +148,8 @@ repo requests/forks/pingou/test3 msg = pagure.lib.add_group( self.session, group_name='sysadmin', + display_name='sysadmin group', + description=None, group_type='user', user='pingou', is_admin=False, @@ -158,6 +160,8 @@ repo requests/forks/pingou/test3 msg = pagure.lib.add_group( self.session, group_name='devs', + display_name='devs group', + description=None, group_type='user', user='pingou', is_admin=False, diff --git a/tests/test_pagure_lib_model.py b/tests/test_pagure_lib_model.py index ff08eb6..9e21ca4 100644 --- a/tests/test_pagure_lib_model.py +++ b/tests/test_pagure_lib_model.py @@ -115,6 +115,8 @@ class PagureLibModeltests(tests.Modeltests): """ Test the PagureGroup.__repr__ function of pagure.lib.model. """ item = pagure.lib.model.PagureGroup( group_name='admin', + display_name='admin group', + description='the local admin group', user_id=1, ) self.session.add(item) From 0148d9466baaefc94b98090164c6a7f305b11518 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Aug 11 2016 13:48:15 +0000 Subject: [PATCH 6/16] Add unit-tests around the edit_group feature --- diff --git a/tests/test_pagure_flask_ui_groups.py b/tests/test_pagure_flask_ui_groups.py index efb2a9e..6505cbc 100644 --- a/tests/test_pagure_flask_ui_groups.py +++ b/tests/test_pagure_flask_ui_groups.py @@ -152,6 +152,97 @@ class PagureFlaskGroupstests(tests.Modeltests): ' Groups 2', output.data) + def test_edit_group(self): + """ Test the edit_group endpoint. """ + + output = self.app.get('/group/test_group/edit') + self.assertEqual(output.status_code, 302) + + user = tests.FakeUser() + with tests.user_set(pagure.APP, user): + output = self.app.get('/group/test_group/edit') + self.assertEqual(output.status_code, 404) + self.assertIn('

Group not found

', output.data) + + self.test_add_group() + + user.username = 'foo' + with tests.user_set(pagure.APP, user): + output = self.app.get('/group/foo/edit') + self.assertEqual(output.status_code, 404) + self.assertIn('

Group not found

', output.data) + + output = self.app.get('/group/test_group/edit') + self.assertEqual(output.status_code, 200) + self.assertIn( + 'Edit group: test_group - Pagure', + output.data) + self.assertIn( + '
', + output.data) + self.assertIn( + '', output.data) + + csrf_token = output.data.split( + 'name="csrf_token" type="hidden" value="')[1].split('">')[0] + + # Missing CSRF + data = { + 'group_name': 'test_group', + 'display_name': 'Test Group edited', + 'description': 'This is a group for the tests edited', + } + + output = self.app.post( + '/group/test_group/edit', data=data, follow_redirects=True) + #print output.data + self.assertEqual(output.status_code, 200) + self.assertIn( + 'Edit group: test_group - Pagure', + output.data) + self.assertIn( + '', + output.data) + self.assertIn( + '', output.data) + + # User not allowed + data['csrf_token'] = csrf_token + + output = self.app.post( + '/group/test_group/edit', data=data, follow_redirects=True) + self.assertEqual(output.status_code, 200) + self.assertIn( + 'Group - Pagure', + output.data) + self.assertIn( + '\n You are not ' + 'allowed to edit this group', output.data) + self.assertIn( + ' ' + ' test_group', output.data) + + user.username = 'pingou' + with tests.user_set(pagure.APP, user): + # Invalid repo + output = self.app.post( + '/group/bar/edit', data=data, follow_redirects=True) + self.assertEqual(output.status_code, 404) + self.assertIn('

Group not found

', output.data) + + output = self.app.post( + '/group/test_group/edit', data=data, follow_redirects=True) + self.assertEqual(output.status_code, 200) + self.assertIn('Group - Pagure', output.data) + self.assertIn( + '' + '  test_group', output.data) + self.assertIn( + 'Group "Test Group edited" (test_group) edited', + output.data) + def test_group_delete(self): """ Test the group_delete endpoint. """ output = self.app.post('/group/foo/delete') diff --git a/tests/test_pagure_lib.py b/tests/test_pagure_lib.py index f566487..6952975 100644 --- a/tests/test_pagure_lib.py +++ b/tests/test_pagure_lib.py @@ -2228,6 +2228,71 @@ class PagureLibtests(tests.Modeltests): group = pagure.lib.search_groups(self.session, group_name='foo') self.assertEqual(len(group.users), 1) + def test_edit_group_info(self): + """ Test the edit_group_info method of pagure.lib. """ + self.test_add_group() + group = pagure.lib.search_groups(self.session, group_name='foo') + self.assertNotEqual(group, None) + self.assertEqual(group.group_name, 'foo') + + # Invalid new user + self.assertRaises( + pagure.exceptions.PagureException, + pagure.lib.edit_group_info, + self.session, + group=group, + display_name='edited name', + description=None, + user='foo', + is_admin=False, + ) + + # Invalid user + self.assertRaises( + pagure.exceptions.PagureException, + pagure.lib.edit_group_info, + self.session, + group=group, + display_name='edited name', + description=None, + user='foobar', + is_admin=False, + ) + + # User not allowed + self.assertRaises( + pagure.exceptions.PagureException, + pagure.lib.edit_group_info, + self.session, + group=group, + display_name='edited name', + description=None, + user='bar', + is_admin=False, + ) + + msg = pagure.lib.edit_group_info( + self.session, + group=group, + display_name='edited name', + description=None, + user='pingou', + is_admin=False, + ) + self.session.commit() + self.assertEqual(msg, 'Group "edited name" (foo) edited') + + msg = pagure.lib.edit_group_info( + self.session, + group=group, + display_name='edited name', + description=None, + user='pingou', + is_admin=False, + ) + self.session.commit() + self.assertEqual(msg, 'Nothing changed') + def test_add_group_to_project(self): """ Test the add_group_to_project method of pagure.lib. """ tests.create_projects(self.session) From 20d4054cfa7d8f3320481ca028ee0c8a795ff5d4 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Aug 11 2016 16:47:08 +0000 Subject: [PATCH 7/16] Drop the small red stars, they aren't used anywhere anymore --- diff --git a/pagure/forms.py b/pagure/forms.py index 8802c98..523d49f 100644 --- a/pagure/forms.py +++ b/pagure/forms.py @@ -362,13 +362,13 @@ class CommentForm(wtf.Form): class EditGroupForm(wtf.Form): """ Form to ask for a password change. """ display_name = wtforms.TextField( - 'Group name to display *', + 'Group name to display', [ wtforms.validators.Required(), ] ) description = wtforms.TextField( - 'Description *', + 'Description', [ wtforms.validators.Required(), ] From 305fe244db21080c80bba88d037304dcbbc3017c Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Aug 11 2016 16:47:25 +0000 Subject: [PATCH 8/16] Only notify if there is a project to be notified about --- diff --git a/pagure/lib/notify.py b/pagure/lib/notify.py index 885492d..890f6cd 100644 --- a/pagure/lib/notify.py +++ b/pagure/lib/notify.py @@ -52,7 +52,7 @@ def log(project, topic, msg, redis=None): # Send fedmsg notification (if fedmsg is there and set-up) fedmsg_publish(topic, msg) - if redis: + if redis and project: redis.publish( 'pagure.hook', json.dumps({ From 3b08c551cfa1d172ef51159fc85f11324aeea514 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Aug 11 2016 16:48:38 +0000 Subject: [PATCH 9/16] Make the edit_group template pretty! --- diff --git a/pagure/templates/edit_group.html b/pagure/templates/edit_group.html index 8013b60..a3bc517 100644 --- a/pagure/templates/edit_group.html +++ b/pagure/templates/edit_group.html @@ -1,32 +1,38 @@ {% extends "master.html" %} -{% from "_formhelper.html" import render_field_in_row %} +{% from "_formhelper.html" import render_bootstrap_field %} {% set tag = "groups" %} {% block title %}Edit group: {{ group.group_name }}{% endblock %} - {% block content %} - -

Edit group: {{ group.group_name }}

- -
- - - - {{ render_field_in_row(form.display_name) }} - {{ render_field_in_row(form.description) }} - {%- if admin %} - {{ render_field_in_row(form.group_type) }} - {%- endif %} -
-

- - - {{ form.csrf_token }} -

- -
+
+
+
+
+
+ Edit group: {{ group.group_name }} +
+
+
+ + {{ render_bootstrap_field( + form.display_name, + field_description="Name of the group that will be displayed in the UI") }} + {{ render_bootstrap_field( + form.description, + field_description="Small description of the group") }} +
+

+ + + {{ form.csrf_token }} +

+
+
+
+
+
+
{% endblock %} From 73e7fdf4855c3adb145d100a43eecf747e5c1664 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Aug 11 2016 16:48:49 +0000 Subject: [PATCH 10/16] Pre-fill the content of the form if the request was a GET This makes editing group's info so much easier --- diff --git a/pagure/ui/groups.py b/pagure/ui/groups.py index 877333d..66c67ab 100644 --- a/pagure/ui/groups.py +++ b/pagure/ui/groups.py @@ -162,7 +162,9 @@ def edit_group(group): pagure.APP.logger.debug( 'Could not edit group `%s`.' % (group.group_name)) pagure.APP.logger.exception(err) - + elif flask.request.method == 'GET': + form.display_name.data = group.display_name + form.description.data = group.description return flask.render_template( 'edit_group.html', From fa31fa963ae4da34f647eff4194188b7429e5f79 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Aug 11 2016 16:49:20 +0000 Subject: [PATCH 11/16] Fix the title of the page and add a button to edit the group's info --- diff --git a/pagure/templates/group_info.html b/pagure/templates/group_info.html index 5632e87..3dd82a8 100644 --- a/pagure/templates/group_info.html +++ b/pagure/templates/group_info.html @@ -1,7 +1,7 @@ {% extends "master.html" %} {% from "_render_repo.html" import render_repos_as_card %} -{% block title %}Group {{ group.name }}{% endblock %} +{% block title %}Group {{ group.group_name }}{% endblock %} {% set tag = "groups" %} {% from "_browseheader.html" import browse_header %} @@ -20,23 +20,33 @@

-  {{ group.group_name }} +  {{ + group.display_name }} {% if authenticated and (member or admin) and config.get('ENABLE_GROUP_MNGT') %} -
- {{ form.csrf_token }} - -
+
+ + + +
+ {% if admin %} + {% endif %} + {{ form.csrf_token }} + +
+
{% endif %}

+ {% if group.description %}

{{ group.description }}

{% endif %} created {{ group.created |humanize }} by {{ group.creator.fullname }} ({{ group.creator.user }})
From 29b32d5c5bd9acb8aaea7c9862883ed0762b9d4d Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Aug 11 2016 16:49:34 +0000 Subject: [PATCH 12/16] Show the display name when listing the groups, put the group name as title --- diff --git a/pagure/templates/group_list.html b/pagure/templates/group_list.html index 2747332..b75eed8 100644 --- a/pagure/templates/group_list.html +++ b/pagure/templates/group_list.html @@ -87,7 +87,9 @@
-
{{ group.group_name }}
+
+ {{ group.display_name }} +
Formed {{ group.created |humanize }} From 615c238a74bff869a64e2323f6c6f90c6f74f721 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Aug 11 2016 16:56:41 +0000 Subject: [PATCH 13/16] Adjust the unit-tests for the change in behavior --- diff --git a/tests/test_pagure_flask_ui_groups.py b/tests/test_pagure_flask_ui_groups.py index 6505cbc..8f11da5 100644 --- a/tests/test_pagure_flask_ui_groups.py +++ b/tests/test_pagure_flask_ui_groups.py @@ -181,8 +181,8 @@ class PagureFlaskGroupstests(tests.Modeltests): '
', output.data) self.assertIn( - '', output.data) + '', output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] @@ -205,8 +205,8 @@ class PagureFlaskGroupstests(tests.Modeltests): '', output.data) self.assertIn( - '', output.data) + '', output.data) # User not allowed data['csrf_token'] = csrf_token @@ -215,14 +215,14 @@ class PagureFlaskGroupstests(tests.Modeltests): '/group/test_group/edit', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertIn( - 'Group - Pagure', + 'Group test_group - Pagure', output.data) self.assertIn( '\n You are not ' 'allowed to edit this group', output.data) self.assertIn( ' ' - ' test_group', output.data) + ' Test Group', output.data) user.username = 'pingou' with tests.user_set(pagure.APP, user): @@ -235,10 +235,11 @@ class PagureFlaskGroupstests(tests.Modeltests): output = self.app.post( '/group/test_group/edit', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) - self.assertIn('Group - Pagure', output.data) self.assertIn( - '' - '  test_group', output.data) + 'Group test_group - Pagure', output.data) + self.assertIn( + ' ' + ' Test Group', output.data) self.assertIn( 'Group "Test Group edited" (test_group) edited', output.data) @@ -335,7 +336,7 @@ class PagureFlaskGroupstests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn( '  ' - 'test_group', output.data) + 'Test Group', output.data) output = self.app.get('/group/test_admin_group') self.assertEqual(output.status_code, 404) @@ -349,7 +350,7 @@ class PagureFlaskGroupstests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn( '  ' - 'test_admin_group', output.data) + 'Test Admin Group', output.data) self.assertEqual(output.data.count('  ' - 'test_admin_group', output.data) + 'Test Admin Group', output.data) self.assertEqual(output.data.count('  ' - 'test_admin_group', output.data) + 'Test Admin Group', output.data) self.assertEqual(output.data.count('  ' - 'test_admin_group', output.data) + 'Test Admin Group', output.data) self.assertEqual(output.data.count('  ' - 'test_group', output.data) + 'Test Group', output.data) self.assertEqual(output.data.count('  ' - 'test_group', output.data) + 'Test Group', output.data) self.assertEqual(output.data.count('  ' - 'test_group', output.data) + 'Test Group', output.data) self.assertEqual(output.data.count('  ' - 'test_group', output.data) + 'Test Group', output.data) self.assertEqual(output.data.count('  ' - 'test_group', output.data) + 'Test Group', output.data) self.assertEqual(output.data.count('  ' - 'test_group', output.data) + 'Test Group', output.data) self.assertEqual(output.data.count('  ' - 'test_group', output.data) + 'Test Group', output.data) self.assertEqual(output.data.count('