diff --git a/smash/web/tests/view/test_appointments.py b/smash/web/tests/view/test_appointments.py
index a1544f213bdcfcb70a699f4b9299c61faa5b069d..e17bb743efcab2bf5f7b467e2786592f7ed1c566 100644
--- a/smash/web/tests/view/test_appointments.py
+++ b/smash/web/tests/view/test_appointments.py
@@ -4,11 +4,11 @@ import logging
 from django.core.files.uploadedfile import SimpleUploadedFile
 from django.urls import reverse
 
-from web.forms import SubjectEditForm, StudySubjectEditForm, AppointmentEditForm
+from web.forms import SubjectEditForm, StudySubjectEditForm, AppointmentEditForm, AppointmentAddForm
 from web.models import Appointment, StudySubject, Visit
 from web.tests import LoggedInTestCase
 from web.tests.functions import create_study_subject, create_visit, create_appointment, create_worker, \
-    create_flying_team, format_form_field
+    create_flying_team, format_form_field, get_test_location
 from web.views.notifications import get_today_midnight_date
 
 logger = logging.getLogger(__name__)
@@ -19,6 +19,41 @@ class AppointmentsViewTests(LoggedInTestCase):
         super(AppointmentsViewTests, self).setUp()
         create_worker(self.user, True)
 
+    def test_get_add_general_appointment(self):
+        #test get without visit_id
+        response = self.client.get(reverse('web.views.appointment_add_general'))
+        self.assertEqual(response.status_code, 200)
+    def test_get_add_appointment(self):
+        #test get with visit_id
+        subject = create_study_subject()
+        visit = create_visit(subject)
+        response = self.client.get(reverse('web.views.appointment_add', 
+            kwargs={'visit_id': visit.id}))
+        self.assertEqual(response.status_code, 200)
+
+    def test_post_add_general_appointment(self):
+        location = get_test_location()
+        form_appointment = AppointmentAddForm(user=self.user)
+        form_data = {}
+        form_data['datetime_when'] = datetime.datetime.today()
+        form_data['location'] = location.id
+        form_data['length'] = 10
+        response = self.client.post(reverse('web.views.appointment_add_general'), data=form_data)
+        self.assertEqual(response.status_code, 302)
+
+    def test_add_appointment(self):
+        subject = create_study_subject()
+        visit = create_visit(subject)
+        location = get_test_location()
+        form_data = {}
+        form_appointment = AppointmentAddForm(user=self.user)
+        form_data['datetime_when'] = datetime.datetime.today()
+        form_data['location'] = location.id
+        form_data['length'] = 10
+        response = self.client.post(reverse('web.views.appointment_add', 
+            kwargs={'visit_id': visit.id}), data=form_data)
+        self.assertEqual(response.status_code, 302)
+    
     def test_appointments_list_request(self):
         response = self.client.get(reverse('web.views.appointments'))
         self.assertEqual(response.status_code, 200)
diff --git a/smash/web/views/appointment.py b/smash/web/views/appointment.py
index 028c3b9f5f460b207842280968682fdadcce76ff..bc782e45a686222e32dab5465f3cbff5f158cd2b 100644
--- a/smash/web/views/appointment.py
+++ b/smash/web/views/appointment.py
@@ -56,6 +56,9 @@ def appointment_add(request, visit_id=None):
                 return redirect('web.views.appointments')
             else:
                 return redirect('web.views.visit_details', id=visit_id)
+        else:
+            raise ValidationError("Invalid request: Errors: {}. Non field errors: {}".format(form.errors, form.non_field_errors()))
+
     else:
         form = AppointmentAddForm(user=request.user)