2017-03-23 13:37:20 +01:00
|
|
|
import unittest
|
2013-08-02 09:02:15 -05:00
|
|
|
|
2021-01-31 16:49:12 -05:00
|
|
|
from grade_school import (
|
|
|
|
|
School,
|
|
|
|
|
)
|
2014-06-11 15:06:22 +02:00
|
|
|
|
2023-07-14 15:52:15 -07:00
|
|
|
# These tests are auto-generated with test data from:
|
|
|
|
|
# https://github.com/exercism/problem-specifications/tree/main/exercises/grade-school/canonical-data.json
|
|
|
|
|
# File last updated on 2023-07-14
|
2014-02-22 10:55:33 +08:00
|
|
|
|
2019-08-06 16:14:08 -04:00
|
|
|
|
2018-07-20 14:50:32 -04:00
|
|
|
class GradeSchoolTest(unittest.TestCase):
|
2021-10-18 13:59:23 -07:00
|
|
|
def test_roster_is_empty_when_no_student_is_added(self):
|
|
|
|
|
school = School()
|
|
|
|
|
expected = []
|
2021-11-10 12:57:08 -08:00
|
|
|
|
2021-10-18 13:59:23 -07:00
|
|
|
self.assertEqual(school.roster(), expected)
|
|
|
|
|
|
2021-11-10 12:57:08 -08:00
|
|
|
def test_add_a_student(self):
|
|
|
|
|
school = School()
|
|
|
|
|
school.add_student(name="Aimee", grade=2)
|
|
|
|
|
expected = [True]
|
|
|
|
|
self.assertEqual(school.added(), expected)
|
|
|
|
|
|
2021-10-18 13:59:23 -07:00
|
|
|
def test_student_is_added_to_the_roster(self):
|
2018-07-20 14:50:32 -04:00
|
|
|
school = School()
|
2019-08-06 16:14:08 -04:00
|
|
|
school.add_student(name="Aimee", grade=2)
|
|
|
|
|
expected = ["Aimee"]
|
2021-11-10 12:57:08 -08:00
|
|
|
|
2018-07-20 14:50:32 -04:00
|
|
|
self.assertEqual(school.roster(), expected)
|
|
|
|
|
|
2021-11-10 12:57:08 -08:00
|
|
|
def test_adding_multiple_students_in_the_same_grade_in_the_roster(self):
|
|
|
|
|
school = School()
|
|
|
|
|
school.add_student(name="Blair", grade=2)
|
|
|
|
|
school.add_student(name="James", grade=2)
|
|
|
|
|
school.add_student(name="Paul", grade=2)
|
|
|
|
|
expected = [True, True, True]
|
|
|
|
|
self.assertEqual(school.added(), expected)
|
|
|
|
|
|
2021-10-18 13:59:23 -07:00
|
|
|
def test_multiple_students_in_the_same_grade_are_added_to_the_roster(self):
|
2018-07-20 14:50:32 -04:00
|
|
|
school = School()
|
2019-08-06 16:14:08 -04:00
|
|
|
school.add_student(name="Blair", grade=2)
|
|
|
|
|
school.add_student(name="James", grade=2)
|
|
|
|
|
school.add_student(name="Paul", grade=2)
|
|
|
|
|
expected = ["Blair", "James", "Paul"]
|
2021-11-10 12:57:08 -08:00
|
|
|
|
|
|
|
|
self.assertEqual(school.roster(), expected)
|
|
|
|
|
|
|
|
|
|
def test_cannot_add_student_to_same_grade_in_the_roster_more_than_once(self):
|
|
|
|
|
school = School()
|
|
|
|
|
school.add_student(name="Blair", grade=2)
|
|
|
|
|
school.add_student(name="James", grade=2)
|
|
|
|
|
school.add_student(name="James", grade=2)
|
|
|
|
|
school.add_student(name="Paul", grade=2)
|
|
|
|
|
expected = [True, True, False, True]
|
|
|
|
|
self.assertEqual(school.added(), expected)
|
|
|
|
|
|
|
|
|
|
def test_student_not_added_to_same_grade_in_the_roster_more_than_once(self):
|
|
|
|
|
school = School()
|
|
|
|
|
school.add_student(name="Blair", grade=2)
|
|
|
|
|
school.add_student(name="James", grade=2)
|
|
|
|
|
school.add_student(name="James", grade=2)
|
|
|
|
|
school.add_student(name="Paul", grade=2)
|
|
|
|
|
expected = ["Blair", "James", "Paul"]
|
|
|
|
|
|
2018-07-20 14:50:32 -04:00
|
|
|
self.assertEqual(school.roster(), expected)
|
|
|
|
|
|
2021-11-10 12:57:08 -08:00
|
|
|
def test_adding_students_in_multiple_grades(self):
|
|
|
|
|
school = School()
|
|
|
|
|
school.add_student(name="Chelsea", grade=3)
|
|
|
|
|
school.add_student(name="Logan", grade=7)
|
|
|
|
|
expected = [True, True]
|
|
|
|
|
self.assertEqual(school.added(), expected)
|
|
|
|
|
|
2021-10-18 13:59:23 -07:00
|
|
|
def test_students_in_multiple_grades_are_added_to_the_roster(self):
|
2018-07-20 14:50:32 -04:00
|
|
|
school = School()
|
2019-08-06 16:14:08 -04:00
|
|
|
school.add_student(name="Chelsea", grade=3)
|
|
|
|
|
school.add_student(name="Logan", grade=7)
|
|
|
|
|
expected = ["Chelsea", "Logan"]
|
2021-11-10 12:57:08 -08:00
|
|
|
|
|
|
|
|
self.assertEqual(school.roster(), expected)
|
|
|
|
|
|
|
|
|
|
def test_cannot_add_same_student_to_multiple_grades_in_the_roster(self):
|
|
|
|
|
school = School()
|
|
|
|
|
school.add_student(name="Blair", grade=2)
|
|
|
|
|
school.add_student(name="James", grade=2)
|
|
|
|
|
school.add_student(name="James", grade=3)
|
|
|
|
|
school.add_student(name="Paul", grade=3)
|
|
|
|
|
expected = [True, True, False, True]
|
|
|
|
|
self.assertEqual(school.added(), expected)
|
|
|
|
|
|
|
|
|
|
def test_student_not_added_to_multiple_grades_in_the_roster(self):
|
|
|
|
|
school = School()
|
|
|
|
|
school.add_student(name="Blair", grade=2)
|
|
|
|
|
school.add_student(name="James", grade=2)
|
|
|
|
|
school.add_student(name="James", grade=3)
|
|
|
|
|
school.add_student(name="Paul", grade=3)
|
|
|
|
|
expected = ["Blair", "James", "Paul"]
|
|
|
|
|
|
|
|
|
|
self.assertEqual(school.roster(), expected)
|
|
|
|
|
|
|
|
|
|
def test_students_are_sorted_by_grades_in_the_roster(self):
|
|
|
|
|
school = School()
|
|
|
|
|
school.add_student(name="Jim", grade=3)
|
|
|
|
|
school.add_student(name="Peter", grade=2)
|
|
|
|
|
school.add_student(name="Anna", grade=1)
|
|
|
|
|
expected = ["Anna", "Peter", "Jim"]
|
|
|
|
|
|
|
|
|
|
self.assertEqual(school.roster(), expected)
|
|
|
|
|
|
|
|
|
|
def test_students_are_sorted_by_name_in_the_roster(self):
|
|
|
|
|
school = School()
|
|
|
|
|
school.add_student(name="Peter", grade=2)
|
|
|
|
|
school.add_student(name="Zoe", grade=2)
|
|
|
|
|
school.add_student(name="Alex", grade=2)
|
|
|
|
|
expected = ["Alex", "Peter", "Zoe"]
|
|
|
|
|
|
2018-07-20 14:50:32 -04:00
|
|
|
self.assertEqual(school.roster(), expected)
|
|
|
|
|
|
2021-10-18 13:59:23 -07:00
|
|
|
def test_students_are_sorted_by_grades_and_then_by_name_in_the_roster(self):
|
2018-07-20 14:50:32 -04:00
|
|
|
school = School()
|
2019-08-06 16:14:08 -04:00
|
|
|
school.add_student(name="Peter", grade=2)
|
|
|
|
|
school.add_student(name="Anna", grade=1)
|
|
|
|
|
school.add_student(name="Barb", grade=1)
|
|
|
|
|
school.add_student(name="Zoe", grade=2)
|
|
|
|
|
school.add_student(name="Alex", grade=2)
|
|
|
|
|
school.add_student(name="Jim", grade=3)
|
|
|
|
|
school.add_student(name="Charlie", grade=1)
|
|
|
|
|
expected = ["Anna", "Barb", "Charlie", "Alex", "Peter", "Zoe", "Jim"]
|
2021-11-10 12:57:08 -08:00
|
|
|
|
2018-07-20 14:50:32 -04:00
|
|
|
self.assertEqual(school.roster(), expected)
|
|
|
|
|
|
2021-10-18 13:59:23 -07:00
|
|
|
def test_grade_is_empty_if_no_students_in_the_roster(self):
|
|
|
|
|
school = School()
|
|
|
|
|
expected = []
|
|
|
|
|
self.assertEqual(school.grade(1), expected)
|
|
|
|
|
|
2021-11-10 12:57:08 -08:00
|
|
|
def test_grade_is_empty_if_no_students_in_that_grade(self):
|
|
|
|
|
school = School()
|
|
|
|
|
school.add_student(name="Peter", grade=2)
|
|
|
|
|
school.add_student(name="Zoe", grade=2)
|
|
|
|
|
school.add_student(name="Alex", grade=2)
|
|
|
|
|
school.add_student(name="Jim", grade=3)
|
|
|
|
|
expected = []
|
|
|
|
|
self.assertEqual(school.grade(1), expected)
|
|
|
|
|
|
|
|
|
|
def test_student_not_added_to_same_grade_more_than_once(self):
|
|
|
|
|
school = School()
|
|
|
|
|
school.add_student(name="Blair", grade=2)
|
|
|
|
|
school.add_student(name="James", grade=2)
|
|
|
|
|
school.add_student(name="James", grade=2)
|
|
|
|
|
school.add_student(name="Paul", grade=2)
|
|
|
|
|
expected = ["Blair", "James", "Paul"]
|
|
|
|
|
self.assertEqual(school.grade(2), expected)
|
|
|
|
|
|
|
|
|
|
def test_student_not_added_to_multiple_grades(self):
|
|
|
|
|
school = School()
|
|
|
|
|
school.add_student(name="Blair", grade=2)
|
|
|
|
|
school.add_student(name="James", grade=2)
|
|
|
|
|
school.add_student(name="James", grade=3)
|
|
|
|
|
school.add_student(name="Paul", grade=3)
|
|
|
|
|
expected = ["Blair", "James"]
|
|
|
|
|
self.assertEqual(school.grade(2), expected)
|
|
|
|
|
|
|
|
|
|
def test_student_not_added_to_other_grade_for_multiple_grades(self):
|
|
|
|
|
school = School()
|
|
|
|
|
school.add_student(name="Blair", grade=2)
|
|
|
|
|
school.add_student(name="James", grade=2)
|
|
|
|
|
school.add_student(name="James", grade=3)
|
|
|
|
|
school.add_student(name="Paul", grade=3)
|
|
|
|
|
expected = ["Paul"]
|
|
|
|
|
self.assertEqual(school.grade(3), expected)
|
|
|
|
|
|
2021-10-18 13:59:23 -07:00
|
|
|
def test_students_are_sorted_by_name_in_a_grade(self):
|
2018-07-20 14:50:32 -04:00
|
|
|
school = School()
|
2019-08-06 16:14:08 -04:00
|
|
|
school.add_student(name="Franklin", grade=5)
|
|
|
|
|
school.add_student(name="Bradley", grade=5)
|
|
|
|
|
school.add_student(name="Jeff", grade=1)
|
|
|
|
|
expected = ["Bradley", "Franklin"]
|
2018-07-20 14:50:32 -04:00
|
|
|
self.assertEqual(school.grade(5), expected)
|