Skip to content

Commit 14fbd61

Browse files
authored
Merge pull request #375 from Insti/Grade_school_tests
Grade school: Make tests less implemetation dependent.
2 parents 49a10dd + 6cfbfb8 commit 14fbd61

File tree

2 files changed

+71
-50
lines changed

2 files changed

+71
-50
lines changed

exercises/grade-school/example.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
module BookKeeping
2-
VERSION = 1
2+
VERSION = 2
33
end
44

55
class School
@@ -15,7 +15,7 @@ def grade(level)
1515
@db[level].sort
1616
end
1717

18-
def to_h
18+
def students_by_grade
1919
sorted = @db.map { |grade, students| [grade, students.sort] }.sort
2020
Hash[sorted]
2121
end

exercises/grade-school/grade_school_test.rb

Lines changed: 69 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -4,85 +4,106 @@
44
require_relative 'grade_school'
55

66
class SchoolTest < Minitest::Test
7-
attr_reader :school
8-
9-
def setup
10-
@school = School.new
11-
end
12-
13-
def test_an_empty_school
14-
assert_equal({}, school.to_h)
7+
def test_empty_grade
8+
school = School.new
9+
expected = []
10+
assert_equal expected, school.grade(1)
1511
end
1612

1713
def test_add_student
1814
skip
19-
school.add('Aimee', 2)
20-
assert_equal({ 2 => ['Aimee'] }, school.to_h)
15+
school = School.new
16+
assert school.add('Aimee', 2)
17+
expected = ['Aimee']
18+
assert_equal expected, school.grade(2)
2119
end
2220

23-
def test_add_more_students_in_same_class
21+
def test_add_students_to_different_grades
2422
skip
25-
school.add('Blair', 2)
26-
school.add('James', 2)
27-
school.add('Paul', 2)
28-
assert_equal({ 2 => %w(Blair James Paul) }, school.to_h)
23+
school = School.new
24+
school.add('Aimee', 3)
25+
school.add('Beemee', 7)
26+
assert_equal ['Aimee'], school.grade(3)
27+
assert_equal ['Beemee'], school.grade(7)
2928
end
3029

31-
def test_add_students_to_different_grades
30+
def test_grade_with_multiple_students
3231
skip
33-
school.add('Chelsea', 3)
34-
school.add('Logan', 7)
35-
assert_equal({ 3 => ['Chelsea'], 7 => ['Logan'] }, school.to_h)
32+
school = School.new
33+
grade = 6
34+
students = %w(Aimee Beemee Ceemee)
35+
students.each { |student| school.add(student, grade) }
36+
assert_equal students, school.grade(grade)
3637
end
3738

38-
def test_get_students_in_a_grade
39+
def test_grade_with_multiple_students_sorts_correctly
3940
skip
40-
school.add('Bradley', 5)
41-
school.add('Franklin', 5)
42-
school.add('Jeff', 1)
43-
assert_equal %w(Bradley Franklin), school.grade(5)
41+
school = School.new
42+
grade = 6
43+
students = %w(Beemee Aimee Ceemee)
44+
students.each { |student| school.add(student, grade) }
45+
expected = students.sort
46+
assert_equal expected, school.grade(grade)
4447
end
4548

46-
def test_get_students_sorted_in_a_grade
49+
def test_empty_students_by_grade
4750
skip
48-
school.add('Franklin', 5)
49-
school.add('Bradley', 5)
50-
school.add('Jeff', 1)
51-
assert_equal %w(Bradley Franklin), school.grade(5)
51+
school = School.new
52+
expected = {}
53+
assert_equal expected, school.students_by_grade
5254
end
5355

54-
def test_get_students_in_a_non_existant_grade
56+
def test_students_by_grade
5557
skip
56-
assert_equal [], school.grade(1)
58+
school = School.new
59+
grade = 6
60+
students = %w(Beemee Aimee Ceemee)
61+
students.each { |student| school.add(student, grade) }
62+
expected = { grade => students.sort }
63+
assert_equal expected, school.students_by_grade
5764
end
5865

59-
def test_sort_school # rubocop:disable Metrics/MethodLength
66+
def test_students_by_grade_sorted
6067
skip
61-
[
62-
['Jennifer', 4], ['Kareem', 6],
63-
['Christopher', 4], ['Kyle', 3]
64-
].each do |name, grade|
65-
school.add(name, grade)
68+
school = School.new
69+
everyone.each do |grade, students|
70+
students.each { |student| school.add(student, grade) }
6671
end
67-
sorted = {
68-
3 => ['Kyle'],
69-
4 => %w(Christopher Jennifer),
70-
6 => ['Kareem']
71-
}
72-
assert_equal sorted, school.to_h
73-
assert_equal [3, 4, 6], school.to_h.keys
72+
expected = everyone_sorted
73+
assert_equal expected, school.students_by_grade
74+
end
75+
76+
def everyone
77+
{ 2 => %w(Beemee Aimee Ceemee),
78+
1 => %w(Effmee Geemee),
79+
3 => %w(Eeemee Deemee) }
7480
end
7581

76-
# Problems in exercism evolve over time,
77-
# as we find better ways to ask questions.
82+
def everyone_sorted
83+
{ 1 => %w(Effmee Geemee),
84+
2 => %w(Aimee Beemee Ceemee),
85+
3 => %w(Deemee Eeemee) }
86+
end
87+
88+
# Problems in exercism evolve over time, as we find better ways to ask
89+
# questions.
7890
# The version number refers to the version of the problem you solved,
7991
# not your solution.
8092
#
81-
# Define a constant named VERSION inside of BookKeeping.
93+
# Define a constant named VERSION inside of the top level BookKeeping
94+
# module, which may be placed near the end of your file.
95+
#
96+
# In your file, it will look like this:
97+
#
98+
# module BookKeeping
99+
# VERSION = 2 # Where the version number matches the one in the test.
100+
# end
101+
#
82102
# If you are curious, read more about constants on RubyDoc:
83103
# http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/constants.html
104+
84105
def test_bookkeeping
85106
skip
86-
assert_equal 1, BookKeeping::VERSION
107+
assert_equal 2, BookKeeping::VERSION
87108
end
88109
end

0 commit comments

Comments
 (0)