From aa038b3d05ddb2c064987511f57b1c52ad032b69 Mon Sep 17 00:00:00 2001 From: Nathan Sprenkle Date: Wed, 21 Dec 2022 11:30:29 -0500 Subject: [PATCH] fix: fix issue with constructing an error message (#138) --- CHANGELOG.rst | 3 +++ bulk_grades/__init__.py | 2 +- bulk_grades/views.py | 4 ++-- tests/test_views.py | 30 ++++++++++++++++++++++++++++++ 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 1c62be7..af431f3 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -13,6 +13,9 @@ Change Log Unreleased +[1.0.1] - 2022-12-21 +* Fix a bug in building error response messaging. + [1.0.0] - 2022-02-16 * Dropped Support for Django22, 30 and 31 * Added Support for Django40 diff --git a/bulk_grades/__init__.py b/bulk_grades/__init__.py index a683674..81b7f88 100644 --- a/bulk_grades/__init__.py +++ b/bulk_grades/__init__.py @@ -2,6 +2,6 @@ Support for bulk scoring and grading. """ -__version__ = '1.0.0' +__version__ = '1.0.1' default_app_config = 'bulk_grades.apps.BulkGradesConfig' # pylint: disable=invalid-name diff --git a/bulk_grades/views.py b/bulk_grades/views.py index c8f91a3..0165b01 100644 --- a/bulk_grades/views.py +++ b/bulk_grades/views.py @@ -99,9 +99,9 @@ def post(self, request, course_id, *args, **kwargs): data = self.processor.status() data['error_messages'] = [] for error_message in self.processor.error_messages: + line_numbers = [str(line_number+1) for line_number in self.processor.error_messages[error_message]] is_plural = 's' if len(line_numbers) > 1 else '' - line_numbers = ', '.join(str(line_number+1) for line_number in self.processor.error_messages[error_message]) - new_message = f'{error_message} (on line{is_plural} {line_numbers})' + new_message = f'{error_message} (on line{is_plural} {", ".join(line_numbers)})' data['error_messages'].append(new_message) diff --git a/tests/test_views.py b/tests/test_views.py index 2c5b8bb..fa8e068 100644 --- a/tests/test_views.py +++ b/tests/test_views.py @@ -122,6 +122,36 @@ def test_post(self): } ) + def test_post_error(self): + # Given bad CSV content + csv_content = 'bad' + csv_file = SimpleUploadedFile('test_file.csv', csv_content.encode('utf8'), content_type='text/csv') + + # When I post the file + self.client.login(username=self.staff.username, password=self.password) + response = self.client.post( + reverse('bulk_grades', args=[self.course_id]), + {'csv': csv_file}, + ) + + # Then I get an error response back + self.assertEqual(response.status_code, 200) + self.assertDictEqual( + response.json(), + { + 'saved': 0, + 'error_messages': ['Missing column: user_id (on line 1)'], + 'can_commit': False, + 'error_rows': [], + 'waiting': False, + 'processed': 0, + 'saved_error_id': None, + 'percentage': '0.0%', + 'total': 0, + 'result_id': None + } + ) + class GradeOperationHistoryViewTests(ViewTestsMixin, TestCase):