2017-03-23 13:37:20 +01:00
|
|
|
import unittest
|
2014-12-23 19:03:30 -05:00
|
|
|
from collections import Sequence
|
|
|
|
|
from types import GeneratorType
|
2013-08-02 09:02:15 -05:00
|
|
|
|
2016-08-17 11:57:29 -07:00
|
|
|
from grade_school import School
|
2014-06-11 15:06:22 +02:00
|
|
|
|
2014-02-22 10:55:33 +08:00
|
|
|
|
2013-08-02 09:02:15 -05:00
|
|
|
class SchoolTest(unittest.TestCase):
|
|
|
|
|
def setUp(self):
|
2016-04-03 17:12:40 +02:00
|
|
|
# assertCountEqual is py3, py2 only knowns assetItemsEqual
|
|
|
|
|
if not hasattr(self, 'assertCountEqual'):
|
|
|
|
|
self.assertCountEqual = self.assertItemsEqual
|
2013-08-02 09:02:15 -05:00
|
|
|
self.school = School("Haleakala Hippy School")
|
2014-02-22 10:55:33 +08:00
|
|
|
|
2013-08-02 09:02:15 -05:00
|
|
|
def test_an_empty_school(self):
|
2016-04-03 17:12:40 +02:00
|
|
|
for n in range(1, 9):
|
2017-03-23 13:37:20 +01:00
|
|
|
self.assertCountEqual(self.school.grade(n), set())
|
2014-02-22 10:55:33 +08:00
|
|
|
|
2013-08-02 09:02:15 -05:00
|
|
|
def test_add_student(self):
|
|
|
|
|
self.school.add("Aimee", 2)
|
2017-03-23 13:37:20 +01:00
|
|
|
self.assertCountEqual(self.school.grade(2), ("Aimee", ))
|
2014-02-22 10:55:33 +08:00
|
|
|
|
2013-08-02 09:02:15 -05:00
|
|
|
def test_add_more_students_in_same_class(self):
|
|
|
|
|
self.school.add("James", 2)
|
|
|
|
|
self.school.add("Blair", 2)
|
|
|
|
|
self.school.add("Paul", 2)
|
2017-03-23 13:37:20 +01:00
|
|
|
self.assertCountEqual(self.school.grade(2), ("James", "Blair", "Paul"))
|
2014-02-22 10:55:33 +08:00
|
|
|
|
2013-08-02 09:02:15 -05:00
|
|
|
def test_add_students_to_different_grades(self):
|
|
|
|
|
self.school.add("Chelsea", 3)
|
|
|
|
|
self.school.add("Logan", 7)
|
2017-03-23 13:37:20 +01:00
|
|
|
self.assertCountEqual(self.school.grade(3), ("Chelsea", ))
|
|
|
|
|
self.assertCountEqual(self.school.grade(7), ("Logan", ))
|
2014-02-22 10:55:33 +08:00
|
|
|
|
2013-08-02 09:02:15 -05:00
|
|
|
def test_get_students_in_a_grade(self):
|
|
|
|
|
self.school.add("Franklin", 5)
|
|
|
|
|
self.school.add("Bradley", 5)
|
|
|
|
|
self.school.add("Jeff", 1)
|
2017-03-23 13:37:20 +01:00
|
|
|
self.assertCountEqual(self.school.grade(5), ("Franklin", "Bradley"))
|
2014-02-22 10:55:33 +08:00
|
|
|
|
2013-08-02 09:02:15 -05:00
|
|
|
def test_get_students_in_a_non_existant_grade(self):
|
2017-03-23 13:37:20 +01:00
|
|
|
self.assertCountEqual(self.school.grade(1), set())
|
2014-02-22 10:55:33 +08:00
|
|
|
|
2013-08-02 09:02:15 -05:00
|
|
|
def test_sort_school(self):
|
2017-03-23 13:37:20 +01:00
|
|
|
students = [(3, ("Kyle", )), (4, ("Christopher", "Jennifer", )),
|
|
|
|
|
(6, ("Kareem", ))]
|
2016-04-03 17:12:40 +02:00
|
|
|
|
2017-05-28 10:04:20 +02:00
|
|
|
for grade, students_in_grade in students[::-1]:
|
|
|
|
|
for student in students_in_grade[::-1]:
|
2014-12-23 19:03:30 -05:00
|
|
|
self.school.add(student, grade)
|
|
|
|
|
|
|
|
|
|
result = self.school.sort()
|
|
|
|
|
|
|
|
|
|
# Attempts to catch false positives
|
2017-03-23 13:37:20 +01:00
|
|
|
self.assertTrue(
|
|
|
|
|
isinstance(result, Sequence) or
|
|
|
|
|
isinstance(result, GeneratorType) or
|
|
|
|
|
callable(getattr(result, '__reversed__', False)))
|
2014-12-23 19:03:30 -05:00
|
|
|
|
2017-03-23 13:37:20 +01:00
|
|
|
result_list = list(result.items()
|
|
|
|
|
if hasattr(result, "items") else result)
|
2014-12-23 19:03:30 -05:00
|
|
|
|
2017-03-23 13:37:20 +01:00
|
|
|
self.assertEqual(students, result_list)
|
2014-12-23 19:03:30 -05:00
|
|
|
|
2013-08-02 09:02:15 -05:00
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
unittest.main()
|