From 608900b9855f60aacb6fce124aa0106276f394ad Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jul 11 2016 10:35:01 +0000 Subject: [PATCH 1/4] Undo the change encoding the project's description to UTF-8 --- diff --git a/pagure/lib/__init__.py b/pagure/lib/__init__.py index 48e2b10..8f45036 100644 --- a/pagure/lib/__init__.py +++ b/pagure/lib/__init__.py @@ -1017,7 +1017,7 @@ def new_project(session, user, name, blacklist, allowed_prefix, project = model.Project( name=name, - description=description.encode('utf-8') if description else None, + description=description if description else None, url=url if url else None, avatar_email=avatar_email if avatar_email else None, user_id=user_obj.id, From 5833b398467eec2ed44427b5f6148d69b7c7ca19 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jul 11 2016 10:35:21 +0000 Subject: [PATCH 2/4] Add unit-tests for creating a project with a non-ascii description --- diff --git a/tests/test_pagure_flask_ui_app.py b/tests/test_pagure_flask_ui_app.py index 09a34d3..a443f2a 100644 --- a/tests/test_pagure_flask_ui_app.py +++ b/tests/test_pagure_flask_ui_app.py @@ -16,6 +16,7 @@ import shutil import sys import os +import six import json from mock import patch @@ -266,6 +267,57 @@ class PagureFlaskApptests(tests.Modeltests): self.assertTrue(os.path.exists( os.path.join(tests.HERE, 'requests', 'project-1.git'))) + def test_non_ascii_new_project(self): + """ Test the new_project endpoint with a non-ascii project. """ + # Before + projects = pagure.lib.search_projects(self.session) + self.assertEqual(len(projects), 0) + self.assertFalse(os.path.exists( + os.path.join(tests.HERE, 'project-1.git'))) + self.assertFalse(os.path.exists( + os.path.join(tests.HERE, 'tickets', 'project-1.git'))) + self.assertFalse(os.path.exists( + os.path.join(tests.HERE, 'docs', 'project-1.git'))) + self.assertFalse(os.path.exists( + os.path.join(tests.HERE, 'requests', 'project-1.git'))) + + user = tests.FakeUser() + user.username = 'foo' + with tests.user_set(pagure.APP, user): + output = self.app.get('/new/') + self.assertEqual(output.status_code, 200) + self.assertIn( + b'Create new Project', output.data) + + csrf_token = output.data.decode('utf-8').split( + 'name="csrf_token" type="hidden" value="')[1].split('">')[0] + + data = { + 'description': 'Prõjéctö #1', + 'name': 'project-1', + 'csrf_token': csrf_token, + } + output = self.app.post('/new/', data=data, follow_redirects=True) + self.assertEqual(output.status_code, 200)1 + self.assertIn( + '
\nPrõjéctö #1
', + output.data if six.PY2 else output.data.decode('utf-8')) + self.assertIn(b'

This repo is brand new!

', output.data) + self.assertIn( + b'Overview - project-1 - Pagure', output.data) + + # After + projects = pagure.lib.search_projects(self.session) + self.assertEqual(len(projects), 1) + self.assertTrue(os.path.exists( + os.path.join(tests.HERE, 'project-1.git'))) + self.assertTrue(os.path.exists( + os.path.join(tests.HERE, 'tickets', 'project-1.git'))) + self.assertTrue(os.path.exists( + os.path.join(tests.HERE, 'docs', 'project-1.git'))) + self.assertTrue(os.path.exists( + os.path.join(tests.HERE, 'requests', 'project-1.git'))) + @patch('pagure.ui.app.admin_session_timedout') def test_user_settings(self, ast): """ Test the user_settings endpoint. """ From a219ad416a7a7e7f38978c0573888a0aba9b90f9 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jul 11 2016 10:38:45 +0000 Subject: [PATCH 3/4] Adjust the test to create the README file while at it --- diff --git a/tests/test_pagure_flask_ui_app.py b/tests/test_pagure_flask_ui_app.py index a443f2a..1b085f6 100644 --- a/tests/test_pagure_flask_ui_app.py +++ b/tests/test_pagure_flask_ui_app.py @@ -296,15 +296,18 @@ class PagureFlaskApptests(tests.Modeltests): 'description': 'Prõjéctö #1', 'name': 'project-1', 'csrf_token': csrf_token, + 'create_readme': True, } output = self.app.post('/new/', data=data, follow_redirects=True) - self.assertEqual(output.status_code, 200)1 + self.assertEqual(output.status_code, 200) self.assertIn( '
\nPrõjéctö #1
', output.data if six.PY2 else output.data.decode('utf-8')) - self.assertIn(b'

This repo is brand new!

', output.data) self.assertIn( - b'Overview - project-1 - Pagure', output.data) + '''
+

project-1

+

Prõjéctö #1

+
''', output.data if six.PY2 else output.data.decode('utf-8')) # After projects = pagure.lib.search_projects(self.session) From 645b6673a9a2d2e5de66c470b5ef4d93ef476330 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jul 11 2016 11:51:24 +0000 Subject: [PATCH 4/4] Expend the unit-tests to include an example with cirillic characters --- diff --git a/tests/test_pagure_flask_ui_app.py b/tests/test_pagure_flask_ui_app.py index 1b085f6..1236f14 100644 --- a/tests/test_pagure_flask_ui_app.py +++ b/tests/test_pagure_flask_ui_app.py @@ -309,17 +309,35 @@ class PagureFlaskApptests(tests.Modeltests):

Prõjéctö #1

''', output.data if six.PY2 else output.data.decode('utf-8')) + data = { + 'description': 'Мой первый суперский репозиторий', + 'name': 'project-2', + 'csrf_token': csrf_token, + 'create_readme': True, + } + output = self.app.post('/new/', data=data, follow_redirects=True) + self.assertEqual(output.status_code, 200) + self.assertIn( + '
\nМой первый суперский репозиторий
', + output.data if six.PY2 else output.data.decode('utf-8')) + self.assertIn( + '''
+

project-2

+

Мой первый суперский репозиторий

+
''', output.data if six.PY2 else output.data.decode('utf-8')) + # After projects = pagure.lib.search_projects(self.session) - self.assertEqual(len(projects), 1) - self.assertTrue(os.path.exists( - os.path.join(tests.HERE, 'project-1.git'))) - self.assertTrue(os.path.exists( - os.path.join(tests.HERE, 'tickets', 'project-1.git'))) - self.assertTrue(os.path.exists( - os.path.join(tests.HERE, 'docs', 'project-1.git'))) - self.assertTrue(os.path.exists( - os.path.join(tests.HERE, 'requests', 'project-1.git'))) + self.assertEqual(len(projects), 2) + for project in ['project-1', 'project-2']: + self.assertTrue(os.path.exists( + os.path.join(tests.HERE, '%s.git' % project))) + self.assertTrue(os.path.exists( + os.path.join(tests.HERE, 'tickets', '%s.git' % project))) + self.assertTrue(os.path.exists( + os.path.join(tests.HERE, 'docs', '%s.git' % project))) + self.assertTrue(os.path.exists( + os.path.join(tests.HERE, 'requests', '%s.git' % project))) @patch('pagure.ui.app.admin_session_timedout') def test_user_settings(self, ast):