77 lines
2.2 KiB
Ruby
77 lines
2.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "test_helper"
|
|
|
|
class GradeTest < ActiveSupport::TestCase
|
|
test "factory" do
|
|
assert build(:grade).validate!
|
|
end
|
|
|
|
test "has many classroom_grades" do
|
|
grade = create(:grade)
|
|
cg1 = create(:classroom_grade, grade: grade)
|
|
cg2 = create(:classroom_grade, grade: grade)
|
|
|
|
assert_equal 2, grade.classroom_grades.count
|
|
assert_includes grade.classroom_grades, cg1
|
|
assert_includes grade.classroom_grades, cg2
|
|
end
|
|
|
|
test "has many classrooms through classroom_grades" do
|
|
grade = create(:grade)
|
|
classroom1 = create(:classroom)
|
|
classroom2 = create(:classroom)
|
|
create(:classroom_grade, grade: grade, classroom: classroom1)
|
|
create(:classroom_grade, grade: grade, classroom: classroom2)
|
|
|
|
assert_equal 2, grade.classrooms.count
|
|
assert_includes grade.classrooms, classroom1
|
|
assert_includes grade.classrooms, classroom2
|
|
end
|
|
|
|
test "can destroy a grade with no classrooms" do
|
|
grade = create(:grade)
|
|
|
|
assert_difference "Grade.count", -1 do
|
|
grade.destroy
|
|
end
|
|
end
|
|
|
|
test "cannot destroy a grade that is used by classrooms" do
|
|
grade = create(:grade)
|
|
create(:classroom_grade, grade: grade)
|
|
|
|
assert_not grade.destroy
|
|
assert grade.errors.any?
|
|
assert_includes grade.errors[:base], "Cannot delete record because dependent classroom grades exist"
|
|
end
|
|
|
|
test "name must be present" do
|
|
grade = build(:grade, name: nil)
|
|
assert_not grade.valid?
|
|
assert_includes grade.errors[:name], "can't be blank"
|
|
end
|
|
|
|
test "level must be present" do
|
|
grade = build(:grade, level: nil)
|
|
assert_not grade.valid?
|
|
assert_includes grade.errors[:level], "can't be blank"
|
|
end
|
|
|
|
test "name is unique and case-insensitively" do
|
|
create(:grade, name: "5th Grade", level: 6)
|
|
|
|
duplicate = build(:grade, name: "5TH grade", level: 6)
|
|
assert_not duplicate.valid?
|
|
assert_includes duplicate.errors[:name], "has already been taken"
|
|
end
|
|
|
|
test "level is unique" do
|
|
create(:grade, name: "5th Grade", level: 6)
|
|
|
|
duplicate = build(:grade, name: "5th Grade", level: 6)
|
|
assert_not duplicate.valid?
|
|
assert_includes duplicate.errors[:level], "has already been taken"
|
|
end
|
|
end
|