diff --git a/smash/web/templates/export/index.html b/smash/web/templates/export/index.html
index b1813ec7f47d6d675a61a633580272169aa20250..8c0501149511bc3e7704588e508de4128629503f 100644
--- a/smash/web/templates/export/index.html
+++ b/smash/web/templates/export/index.html
@@ -18,12 +18,12 @@
 {% block maincontent %}
 
     <div>
-        <a href="{% url 'web.views.export_to_csv2' 'subjects' %}" class="btn btn-app">
+        <a href="{% url 'web.views.export_to_csv' 'subjects' %}" class="btn btn-app">
             <i class="fa fa-download"></i>
             Subjects
         </a>
         <br/>
-        <a href="{% url 'web.views.export_to_csv2' 'appointments' %}" class="btn btn-app">
+        <a href="{% url 'web.views.export_to_csv' 'appointments' %}" class="btn btn-app">
             <i class="fa fa-download"></i>
             Appointments
         </a>
diff --git a/smash/web/tests/test_view_export.py b/smash/web/tests/test_view_export.py
new file mode 100644
index 0000000000000000000000000000000000000000..1fc16657a5eb6e098f98869f2ca881c9e2d6ac14
--- /dev/null
+++ b/smash/web/tests/test_view_export.py
@@ -0,0 +1,17 @@
+# coding=utf-8
+from django.urls import reverse
+
+from functions import create_subject, create_appointment
+from . import LoggedInTestCase
+
+
+class TestExportView(LoggedInTestCase):
+    def test_export_subjects(self):
+        create_subject()
+        response = self.client.get(reverse('web.views.export_to_csv', kwargs={'data_type': "subjects"}))
+        self.assertEqual(response.status_code, 200)
+
+    def test_export_appointments(self):
+        create_appointment()
+        response = self.client.get(reverse('web.views.export_to_csv', kwargs={'data_type': "appointments"}))
+        self.assertEqual(response.status_code, 200)
diff --git a/smash/web/urls.py b/smash/web/urls.py
index 332b57008700a272e3962fbc9ce23eceffa4bb75..c19857fc45b4fee3f2623fa800390c1d204c1025 100644
--- a/smash/web/urls.py
+++ b/smash/web/urls.py
@@ -160,7 +160,7 @@ urlpatterns = [
     ####################
 
     url(r'^export$', views.export.export, name='web.views.export'),
-    url(r'^export/(?P<type>[A-z]+)$', views.export.export_to_csv2, name='web.views.export_to_csv2'),
+    url(r'^export/(?P<data_type>[A-z]+)$', views.export.export_to_csv, name='web.views.export_to_csv'),
 
     ####################
     #       CONFIGURATION     #
diff --git a/smash/web/views/export.py b/smash/web/views/export.py
index 6f98432d6a056091e83a53173d503d0692290f66..e5a250536e5d39f6e5c38ddc77623011de253d53 100644
--- a/smash/web/views/export.py
+++ b/smash/web/views/export.py
@@ -10,23 +10,27 @@ from ..models import Subject, Appointment
 
 
 @login_required
-def export_to_csv2(request, type="subjects"):
+def export_to_csv(request, data_type="subjects"):
     # Create the HttpResponse object with the appropriate CSV header.
     response = HttpResponse(content_type='text/csv')
-    response['Content-Disposition'] = 'attachment; filename="' + type + '-' + get_today_midnight_date().strftime(
+    response['Content-Disposition'] = 'attachment; filename="' + data_type + '-' + get_today_midnight_date().strftime(
         "%Y-%m-%d") + '.csv"'
 
-    writer = csv.writer(response, quotechar=str(u'"'), quoting=csv.QUOTE_ALL)
-    if type == "subjects":
-        write_subjects_to_csv(writer)
-    elif type == "appointments":
-        write_appointments_to_csv(writer)
+    if data_type == "subjects":
+        data = get_subjects_as_array()
+    elif data_type == "appointments":
+        data = get_appointments_as_array()
     else:
         return e500_error(request)
+    writer = csv.writer(response, quotechar=str(u'"'), quoting=csv.QUOTE_ALL)
+    for row in data:
+        writer.writerow(row)
+
     return response
 
 
-def write_subjects_to_csv(writer):
+def get_subjects_as_array():
+    result = []
     subject_fields = []
     for field in Subject._meta.fields:
         if field.name != "ID":
@@ -36,17 +40,19 @@ def write_subjects_to_csv(writer):
     for field in subject_fields:
         field_names.append(field.verbose_name)
 
-    writer.writerow(field_names)
+    result.append(field_names)
 
     subjects = Subject.objects.order_by('-last_name')
     for subject in subjects:
         row = []
         for field in subject_fields:
             row.append(getattr(subject, field.name))
-        writer.writerow([unicode(s).replace("\n", ";").replace("\r", ";").encode("utf-8") for s in row])
+        result.append([unicode(s).replace("\n", ";").replace("\r", ";").encode("utf-8") for s in row])
+    return result
 
 
-def write_appointments_to_csv(writer):
+def get_appointments_as_array():
+    result = []
     appointments_fields = []
     for field in Appointment._meta.fields:
         if field.name != "visit" and field.name != "id" and \
@@ -58,7 +64,7 @@ def write_appointments_to_csv(writer):
     for field in appointments_fields:
         field_names.append(field.verbose_name)
 
-    writer.writerow(field_names)
+    result.append(field_names)
 
     appointments = Appointment.objects.order_by('-datetime_when')
 
@@ -68,10 +74,11 @@ def write_appointments_to_csv(writer):
         for field in appointments_fields:
             row.append(getattr(appointment, field.name))
         type_string = ""
-        for type in appointment.appointment_types.all():
-            type_string += type.code + ","
+        for appointment_type in appointment.appointment_types.all():
+            type_string += appointment_type.code + ","
         row.append(type_string)
-        writer.writerow([unicode(s).replace("\n", ";").replace("\r", ";").encode("utf-8") for s in row])
+        result.append([unicode(s).replace("\n", ";").replace("\r", ";").encode("utf-8") for s in row])
+    return result
 
 
 def export(request):