From f5dd72c6c44b90e6dbe118a60a893734cf2af84b Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Thu, 6 Apr 2017 20:32:09 +0300 Subject: [PATCH] Fix CSV separator stripping bug in csv import --- members/models.py | 12 ++++++------ members/static/js/members_controllers.js | 2 +- members/tests.py | 12 +++++++++++- members/views.py | 10 +++++++++- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/members/models.py b/members/models.py index aa52019..d0b47da 100644 --- a/members/models.py +++ b/members/models.py @@ -69,12 +69,12 @@ class Member(models.Model): try: obj = cls.objects.create( - first_name=row[0], - last_name=row[1], - email=row[2], - POR=row[3], - AYY=row[4].lower() in affirmative_answers, - jas=row[5].lower() in affirmative_answers, + first_name=row[0].strip(), + last_name=row[1].strip(), + email=row[2].strip(), + POR=row[3].strip(), + AYY=row[4].lower().strip() in affirmative_answers, + jas=row[5].lower().strip() in affirmative_answers, paid=timezone.now() ) print("added obj {}".format(obj)) diff --git a/members/static/js/members_controllers.js b/members/static/js/members_controllers.js index 5fadf64..282fe9f 100644 --- a/members/static/js/members_controllers.js +++ b/members/static/js/members_controllers.js @@ -266,7 +266,7 @@ app.controller("applEditController", memberDataEditor("/members/applications")); app.controller("addManyController", function($scope, $http, $window) { $scope.memberData = ''; $scope.sendCSV = function() { - $http.post("/members/api/csvimport", $scope.memberData).then( + $http.post("/members/api/csvimport", {'csv': $scope.memberData}).then( function(response) { notySuccess("Lähetys onnistui"); $window.location.reload(); diff --git a/members/tests.py b/members/tests.py index 437021c..25ce485 100644 --- a/members/tests.py +++ b/members/tests.py @@ -1,11 +1,21 @@ -from django.test import TestCase +from django.test import TestCase, Client from members.models import Member +from django.contrib.auth.models import User +import time # Create your tests here. class MemberRegisterTestCase(TestCase): def setUp(self): memb = Member.objects.create(first_name="Tidus", last_name="Tester") + test_admin = User.objects.create_superuser('test_admin', 'myemail@test.com', 'password123') def test_member_created(self): members = Member.objects.get(first_name="Tidus") self.assertTrue(members) + + def test_csv_import(self): + c = Client() + c.login(username='test_admin', password='password123') + + response = c.post('/members/api/csvimport', {'csv': 'reiska, reiska, asd@asd, espoo, 1, 1'}) + self.assertEqual(response.status_code, 200) diff --git a/members/views.py b/members/views.py index b3b3734..bdfdaff 100644 --- a/members/views.py +++ b/members/views.py @@ -197,10 +197,18 @@ def member(request, *args, **kwargs): @permission_required('members.change_member', login_url='/login') def csv_import(request, *args, **kwargs): data = request.body.decode("utf-8") - resp_data = Member.import_csv(data) + + try: + payload = json.loads(data) + except: + return HttpResponse(json.dumps({'error': 'Malformed request'}), 400) + + resp_data = Member.import_csv(payload['csv']) resp = HttpResponse(json.dumps(resp_data)) if resp_data['status'] == 'failure': resp.status_code = 400 + memberlogger.warning('POST request failed with status code {}'.format(resp.status_code)) + return resp