def test_student_optional_full_update_positive(self):
        """Test successfully fully updating a student with optional params"""
        grade = sample_grade()
        classroom1 = sample_classroom()
        classroom2 = sample_classroom()
        classroom3 = sample_classroom()

        payload = sample_student_payload(
            fullname="Testonildo",
            active=False,
            departure_date='2010-10-10',
            guardian2='Mr. Guard',
            grade=grade.id,
            classes=[classroom1.id, classroom3.id])
        res = self.client.put(student_detail_url(self.student.id), payload)
        self.student.refresh_from_db()
        payload.pop('classes')

        self.assertEqual(res.status_code, status.HTTP_200_OK)
        self.assertEqual(Student.objects.get(**payload), self.student)
        self.assertEqual(self.student.guardian2, payload['guardian2'])
        self.assertEqual(self.student.grade, grade)
        self.assertIn(classroom1, self.student.classes.all())
        self.assertIn(classroom3, self.student.classes.all())
        self.assertNotIn(classroom2, self.student.classes.all())

        serializer = StudentCreateSerializer(self.student)
        self.assertEqual(res.data, serializer.data)
    def test_student_optional_create_positive(self):
        """Test successfully creating a student object with optional params"""
        grade = sample_grade()
        classroom1 = sample_classroom()
        classroom2 = sample_classroom()
        classroom3 = sample_classroom()

        payload = sample_student_payload(
            fullname="Testonildo",
            active=False,
            departure_date='2010-10-10',
            guardian2='Mr. Guard',
            grade=grade.id,
            classes=[classroom1.id, classroom3.id])
        res = self.client.post(STUDENT_LIST_URL, payload)
        payload.pop('classes')

        self.assertEqual(res.status_code, status.HTTP_201_CREATED)
        student = Student.objects.filter(**payload)
        self.assertTrue(student.exists)

        student = student[0]
        serializer = StudentCreateSerializer(student)
        self.assertEqual(res.data, serializer.data)

        self.assertFalse(student.active)
        self.assertEqual(student.departure_date,
                         str_to_date(payload['departure_date']))
        self.assertEqual(student.guardian2, payload['guardian2'])
        self.assertEqual(student.grade, grade)
        self.assertIn(classroom1, student.classes.all())
        self.assertIn(classroom3, student.classes.all())
        self.assertNotIn(classroom2, student.classes.all())
    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())
예제 #4
0
    def setUp(self):
        self.client = APIClient()
        self.client.force_authenticate(sample_user())

        self.classroom1 = sample_classroom()
        self.classroom2 = sample_classroom()
        self.classroom3 = sample_classroom()

        self.teacher1 = sample_teacher(
            fullname="Teacher 1",
            academic_level='Gr'
        )
        self.teacher2 = sample_teacher(
            fullname="Teacher 2",
            academic_level='Ms'
        )
        self.teacher3 = sample_teacher(
            fullname="Teacher 3",
            academic_level='Dr'
        )
        self.teacher4 = sample_teacher(
            fullname="Teacher 4",
            academic_level='Dr',
        )
        self.teacher5 = sample_teacher(
            fullname="Teacher 5",
            academic_level='Ms',
            active=False
        )

        self.teacher1.classes.add(self.classroom1)
        self.teacher2.classes.add(self.classroom2)
        self.teacher3.classes.add(self.classroom3)
        self.teacher5.classes.add(self.classroom1)
    def test_student_optional_partial_update_positive(self):
        """Test successful partial update of a student with optional params"""
        grade = sample_grade()
        classroom1 = sample_classroom()
        classroom2 = sample_classroom()
        classroom3 = sample_classroom()

        payload = {
            'active': False,
            'departure_date': '2010-10-10',
            'guardian2': 'Mr. Guard',
            'grade': grade.id,
            'classes': [classroom1.id, classroom3.id]
        }
        res = self.client.patch(student_detail_url(self.student.id), payload)
        self.student.refresh_from_db()
        payload.pop('classes')

        self.assertEqual(res.status_code, status.HTTP_200_OK)

        self.assertEqual(self.student.active, payload['active'])
        self.assertEqual(self.student.departure_date,
                         str_to_date(payload['departure_date']))
        self.assertEqual(self.student.guardian2, payload['guardian2'])

        self.assertEqual(self.student.grade, grade)
        self.assertIn(classroom1, self.student.classes.all())
        self.assertIn(classroom3, self.student.classes.all())
        self.assertNotIn(classroom2, self.student.classes.all())

        serializer = StudentCreateSerializer(self.student)
        self.assertEqual(res.data, serializer.data)
    def test_days_of_week(self):
        """Test the days_of_week field is a comma separated integer list"""
        classroom = sample_classroom(days_of_week='1,2,7')
        classroom.full_clean()

        classroom = sample_classroom(days_of_week='1,2,8')
        with self.assertRaises(ValidationError):
            classroom.full_clean()
    def setUp(self):
        self.client = APIClient()
        self.client.force_authenticate(sample_user())

        self.classroom1 = sample_classroom(name="Class1")
        self.classroom2 = sample_classroom(name="Class2")
        self.teacher = sample_teacher(fullname="The Teacher")
        self.teacher.classes.add(self.classroom1)
        self.teacher.classes.add(self.classroom2)
예제 #8
0
    def test_retrive_classroom_list(self):
        """Test retriving the classroom list"""
        sample_classroom(name='CR 1', identifier='BC01')
        sample_classroom(name='CR 2', identifier='AB01', grade=sample_grade())
        classrooms = Classroom.objects.all().order_by('identifier')
        serializer = ClassroomListSerializer(classrooms, many=True)
        res = self.client.get(CLASSROOM_LIST_URL)

        self.assertEqual(res.status_code, status.HTTP_200_OK)
        self.assertEqual(res.data, serializer.data)
 def test_string_representation(self):
     """Test the string representation of the model"""
     classroom = sample_classroom(name="Chemistry I", identifier="Q-001")
     self.assertEqual(
         str(classroom),
         classroom.identifier + ' - ' + classroom.name
     )
예제 #10
0
    def test_retrieve_classroom_detail(self):
        """Test retriving the detail view of a classroom"""
        classroom = sample_classroom(name='Test', grade=sample_grade())
        serializer = ClassroomDetailSerializer(classroom)
        res = self.client.get(classroom_detail_url(classroom.id))

        self.assertEqual(res.status_code, status.HTTP_200_OK)
        self.assertEqual(res.data, serializer.data)
예제 #11
0
    def setUp(self):
        self.user = sample_user()
        self.client = APIClient()
        self.client.force_authenticate(self.user)

        self.grade1 = sample_grade()
        self.grade2 = sample_grade()
        self.grade3 = sample_grade()
        self.classroom1 = sample_classroom()
        self.classroom2 = sample_classroom()
        self.classroom3 = sample_classroom()

        self.student1 = sample_student(
            fullname='John Default',
            grade=self.grade1,
        )
        self.student2 = sample_student(
            fullname='Jane Jeans',
            grade=self.grade2
        )
        self.student3 = sample_student(
            fullname='Dave Derik',
            active=False,
            grade=self.grade2
        )
        self.student4 = sample_student(
            fullname='Johna Default',
            grade=self.grade1
        )
        self.student5 = sample_student(
            fullname='Leon Daqui',
            grade=self.grade3
        )

        self.student1.classes.add(self.classroom2)
        self.student2.classes.add(self.classroom1)
        self.student3.classes.add(self.classroom2)
        self.student4.classes.add(self.classroom3)

        self.student1_serializer = StudentListSerializer(self.student1)
        self.student2_serializer = StudentListSerializer(self.student2)
        self.student3_serializer = StudentListSerializer(self.student3)
        self.student4_serializer = StudentListSerializer(self.student4)
        self.student5_serializer = StudentListSerializer(self.student5)
예제 #12
0
    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)
예제 #13
0
    def test_partial_update(self):
        """Test partially updating the a classroom object"""
        classroom = sample_classroom(name="Test CR", room='A45')
        payload = {'name': 'Other name', 'room': 'Other room'}
        res = self.client.patch(classroom_detail_url(classroom.id), payload)
        classroom.refresh_from_db()

        self.assertEqual(res.status_code, status.HTTP_200_OK)
        self.assertEqual(classroom.name, payload['name'])
        self.assertEqual(classroom.room, payload['room'])
예제 #14
0
    def test_full_update(self):
        """Test fully updating the a classroom object"""
        classroom = sample_classroom(name="Test CR", room='A45')
        payload = sample_classroom_payload(name="Other name",
                                           days_of_week='1',
                                           grade=sample_grade().id)
        res = self.client.put(classroom_detail_url(classroom.id), payload)
        classroom.refresh_from_db()

        self.assertEqual(res.status_code, status.HTTP_200_OK)
        self.assertEqual(Classroom.objects.get(**payload), classroom)
예제 #15
0
    def setUp(self):
        self.user = sample_user()
        self.client = APIClient()
        self.client.force_authenticate(self.user)

        self.grade = sample_grade()
        self.classroom = sample_classroom()

        self.student = sample_student(fullname='Le Studant', grade=self.grade)
        self.student.classes.add(self.classroom)

        self.serializer = StudentDetailSerializer(self.student)