Files
Eric Bell 392781f7aa chore: init commit
in worker.../repo/GITFOLDER.zip is the .git folder.
2026-08-11 14:44:09 -04:00

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