def test_teacher_full_update_unauthenticated_negative(self): """Test an unauthenticated request cannot fully update teacher""" payload = sample_teacher_payload(fullname="Other Name") res = self.client.put(self.teacher_url, payload) self.assertEqual(res.status_code, status.HTTP_403_FORBIDDEN) self.assertEqual(Teacher.objects.get(id=self.teacher.id), self.teacher)
def test_teacher_create_api_basic_positive(self): """Test successfully creating a basic teacher object""" payload = sample_teacher_payload( fullname="Teacher Tester", sex='F', birthdate='1990-02-27', email='*****@*****.**', academic_level='Dr', bank_agency=21421, bank_account=11117, monthly_payment=12412 ) res = self.client.post(TEACHER_LIST_URL, payload) self.assertEqual(res.status_code, status.HTTP_201_CREATED) teacher = Teacher.objects.filter(**payload) self.assertTrue(teacher.exists()) teacher = teacher[0] serializer = TeacherCreateSerializer(teacher) self.assertEqual(res.data, serializer.data) self.assertTrue(teacher.active) self.assertFalse(teacher.classes.exists()) self.assertEqual(teacher.register_date, dt.date.today())
def test_teacher_create_api_optional_positive(self): """Test successfully creating a teacher object with optional params""" classroom1 = sample_classroom(name='Class1') classroom2 = sample_classroom(name='Class2') payload = sample_teacher_payload( fullname="Tester Teacher", active=False, departure_date='2010-10-01', classes=[classroom1.id, classroom2.id] ) res = self.client.post(TEACHER_LIST_URL, payload) payload.pop('classes') self.assertEqual(res.status_code, status.HTTP_201_CREATED) teacher = Teacher.objects.filter(**payload) self.assertTrue(teacher.exists()) teacher = teacher[0] serializer = TeacherCreateSerializer(teacher) self.assertEqual(res.data, serializer.data) self.assertFalse(teacher.active) self.assertEqual( teacher.departure_date, str_to_date(payload['departure_date']) ) self.assertIn(classroom1, teacher.classes.all()) self.assertIn(classroom2, teacher.classes.all())
def test_teacher_full_update_illegal_operation_negative(self): """Test an illegal teacher full update operation is not performed""" teacher = sample_teacher(fullname="First Teacher") payload = sample_teacher_payload(id_doc=teacher.id_doc) res = self.client.put(self.teacher_url, payload) self.assertEqual(res.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual(Teacher.objects.get(id=self.teacher.id), self.teacher)
def test_teacher_full_update_set_firstname_negative(self): """Test the teacher firstname cannot be set by a full update request""" payload = sample_teacher_payload(fullname="Peter Pan", firstname="Ott") res = self.client.put(self.teacher_url, payload) self.teacher.refresh_from_db() self.assertEqual(res.status_code, status.HTTP_200_OK) self.assertNotEqual(self.teacher.firstname, payload['firstname']) self.assertNotEqual(res.data['firstname'], payload['firstname'])
def test_teacher_full_update_set_id_negative(self): """Test the teacher id cannot be set by a full update request""" payload = sample_teacher_payload(id=self.teacher.id + 1) res = self.client.put(self.teacher_url, payload) self.teacher.refresh_from_db() self.assertEqual(res.status_code, status.HTTP_200_OK) self.assertNotEqual(self.teacher.id, payload['id']) self.assertNotEqual(res.data['id'], payload['id'])
def test_teacher_create_set_firstname_negative(self): """Test the teacher firstname cannot be set by the create request""" payload = sample_teacher_payload(fullname="Peter Pan", firstname="Ott") res = self.client.post(TEACHER_LIST_URL, payload) request_firstname = payload.pop('firstname') teacher = Teacher.objects.get(**payload) self.assertEqual(res.status_code, status.HTTP_201_CREATED) self.assertNotEqual(teacher.firstname, request_firstname) self.assertNotEqual(res.data['firstname'], request_firstname)
def test_teacher_create_set_id_negative(self): """Test the teacher id cannot be set by the create request""" payload = sample_teacher_payload(id=99999) res = self.client.post(TEACHER_LIST_URL, payload) request_id = payload.pop('id') teacher = Teacher.objects.get(**payload) self.assertEqual(res.status_code, status.HTTP_201_CREATED) self.assertNotEqual(teacher.id, request_id) self.assertNotEqual(res.data['id'], request_id)
def test_teacher_create_illegal_operation_negative(self): """Test an illegal create teacher operation is not performed""" teacher = sample_teacher(fullname="First Teacher") payload = sample_teacher_payload( fullname="Doppelganger", id_doc=teacher.id_doc ) res = self.client.post(TEACHER_LIST_URL, payload) self.assertEqual(res.status_code, status.HTTP_400_BAD_REQUEST) self.assertFalse(Teacher.objects.filter(**payload).exists())
def test_teacher_full_update_basic_positive(self): """Test successfully fully updating a teacher with basic information""" payload = sample_teacher_payload(fullname="Other Name", sex='F', birthdate='1996-01-30', email='*****@*****.**', academic_level='Ms', bank_agency=24214, bank_account=124312, monthly_payment=1900) res = self.client.put(self.teacher_url, payload) self.teacher.refresh_from_db() serializer = TeacherCreateSerializer(self.teacher) self.assertEqual(res.status_code, status.HTTP_200_OK) self.assertEqual(Teacher.objects.get(**payload), self.teacher) self.assertEqual(res.data, serializer.data)
def test_teacher_full_update_optional_positive(self): """Test successfully fully updating a teacher with optional params""" classroom1 = sample_classroom(name="Class1") classroom2 = sample_classroom(name="Class2") payload = sample_teacher_payload( fullname="Other name", active=False, departure_date='2010-10-01', classes=[classroom1.id, classroom2.id]) res = self.client.put(self.teacher_url, payload) payload.pop('classes') self.teacher.refresh_from_db() serializer = TeacherCreateSerializer(self.teacher) self.assertEqual(res.status_code, status.HTTP_200_OK) self.assertEqual(Teacher.objects.get(**payload), self.teacher) self.assertIn(classroom1, self.teacher.classes.all()) self.assertIn(classroom2, self.teacher.classes.all()) self.assertEqual(res.data, serializer.data)
def test_teacher_full_update_invalid_payload_negative(self): """Test teacher cannot be fully updated with invalid payload""" payloads = [ sample_teacher_payload(sex='U'), sample_teacher_payload(birthdate=dt.date.today() + dt.timedelta(days=1)), sample_teacher_payload(monthly_payment=99999999999999), sample_teacher_payload(academic_level='Aa'), sample_teacher_payload(bank_agency=-123), sample_teacher_payload(bank_account=-2144), sample_teacher_payload(classes=[99994]) ] for payload in payloads: res = self.client.put(self.teacher_url, payload) payload.pop('classes', None) self.assertEqual(res.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual(Teacher.objects.get(id=self.teacher.id), self.teacher)
def test_teacher_create_invalid_payload_negative(self): """Test an invalid payload request does not create a teacher object""" payloads = [ sample_teacher_payload(sex='U'), sample_teacher_payload( birthdate=dt.date.today() + dt.timedelta(days=1) ), sample_teacher_payload(monthly_payment=99999999999999), sample_teacher_payload(academic_level='Aa'), sample_teacher_payload(bank_agency=-123), sample_teacher_payload(bank_account=-2144), sample_teacher_payload(classes=[99994]) ] for payload in payloads: res = self.client.post(TEACHER_LIST_URL, payload) payload.pop('classes', None) self.assertEqual(res.status_code, status.HTTP_400_BAD_REQUEST) self.assertFalse(Teacher.objects.filter(**payload).exists())
def test_teacher_create_unathenticated_forbidden(self): """Test an unathenticated request cannot create a teacher object""" payload = sample_teacher_payload() res = APIClient().post(TEACHER_LIST_URL, payload) self.assertEqual(res.status_code, status.HTTP_403_FORBIDDEN)