2014-12-23 19:03:30 -05:00
|
|
|
from collections import Sequence
|
|
|
|
|
from types import GeneratorType
|
2013-08-02 09:02:15 -05:00
|
|
|
import unittest
|
|
|
|
|
|
2014-06-11 15:06:22 +02:00
|
|
|
from school import School
|
|
|
|
|
|
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):
|
|
|
|
|
self.assertCountEqual(set(), self.school.grade(n))
|
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)
|
2016-04-03 17:12:40 +02:00
|
|
|
self.assertCountEqual(("Aimee",), self.school.grade(2))
|
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)
|
2016-04-03 17:12:40 +02:00
|
|
|
self.assertCountEqual(("James", "Blair", "Paul"), self.school.grade(2))
|
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)
|
2016-04-03 17:12:40 +02:00
|
|
|
self.assertCountEqual(("Chelsea",), self.school.grade(3))
|
|
|
|
|
self.assertCountEqual(("Logan",), self.school.grade(7))
|
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)
|
2016-04-03 17:12:40 +02:00
|
|
|
self.assertCountEqual(("Franklin", "Bradley"), self.school.grade(5))
|
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):
|
2016-04-03 17:12:40 +02:00
|
|
|
self.assertCountEqual(set(), self.school.grade(1))
|
2014-02-22 10:55:33 +08:00
|
|
|
|
2013-08-02 09:02:15 -05:00
|
|
|
def test_sort_school(self):
|
2016-04-03 17:12:40 +02:00
|
|
|
|
2014-12-23 19:03:30 -05:00
|
|
|
students = [
|
|
|
|
|
(3, ("Kyle",)),
|
|
|
|
|
(4, ("Christopher", "Jennifer",)),
|
|
|
|
|
(6, ("Kareem",))
|
|
|
|
|
]
|
|
|
|
|
for grade, students_in_grade in students:
|
|
|
|
|
for student in students_in_grade:
|
|
|
|
|
self.school.add(student, grade)
|
|
|
|
|
|
|
|
|
|
result = self.school.sort()
|
|
|
|
|
|
|
|
|
|
# Attempts to catch false positives
|
|
|
|
|
self.assertTrue(isinstance(result, Sequence) or
|
|
|
|
|
isinstance(result, GeneratorType) or
|
|
|
|
|
callable(getattr(result, '__reversed__', False)))
|
|
|
|
|
|
|
|
|
|
result_list = list(result.items() if hasattr(result, "items")
|
|
|
|
|
else result)
|
|
|
|
|
|
|
|
|
|
self.assertEqual(result_list, students)
|
|
|
|
|
|
2013-08-02 09:02:15 -05:00
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
unittest.main()
|