You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
sqm-dashboards/spec/models/academic_year_spec.rb

117 lines
4.0 KiB

require "rails_helper"
RSpec.describe AcademicYear, type: :model do
describe ".find_by_date" do
context "when an academic year is not split into seasons" do
before do
create(:academic_year, range: "2022-23")
create(:academic_year, range: "2023-24")
create(:academic_year, range: "2024-25")
end
it "parses 2022-23 as the range" do
ranges = AcademicYear.by_range.keys
date = Date.parse("2022-12-12")
expect(AcademicYear.range_from_date(date, ranges)).to eq "2022-23"
end
end
context "when an academic year is split into seasons" do
before do
create(:academic_year, range: "2021-22 Fall")
create(:academic_year, range: "2021-22 Spring")
create(:academic_year, range: "2022-23")
create(:academic_year, range: "2023-24 Fall")
create(:academic_year, range: "2023-24 Spring")
create(:academic_year, range: "2024-25")
end
context "and the range falls on an academic year without seasons" do
it "returns a range without the season added" do
ranges = AcademicYear.by_range.keys
# Start of 2022-23
date = Date.parse("2022-7-1")
expect(AcademicYear.range_from_date(date, ranges)).to eq "2022-23"
# End of 2022-23
date = Date.parse("2023-6-30")
expect(AcademicYear.range_from_date(date, ranges)).to eq "2022-23"
# Start of 2024-25
date = Date.parse("2024-7-1")
expect(AcademicYear.range_from_date(date, ranges)).to eq "2024-25"
# End of 2024-25
date = Date.parse("2025-6-30")
expect(AcademicYear.range_from_date(date, ranges)).to eq "2024-25"
end
end
context "and the range falls within an academic year with seasons" do
it "returns a range with the season added using the cutoff date of the last Sunday in February" do
ranges = AcademicYear.by_range.keys
# Start of Fall 2023-24
date = Date.parse("2023-7-1")
expect(AcademicYear.range_from_date(date, ranges)).to eq "2023-24 Fall"
# End of Fall 2023-24
date = Date.parse("2024-2-24")
expect(AcademicYear.range_from_date(date, ranges)).to eq "2023-24 Fall"
# Start of Spring 2023-24
date = Date.parse("2024-2-25")
expect(AcademicYear.range_from_date(date, ranges)).to eq "2023-24 Spring"
# End of Spring 2023-24
date = Date.parse("2024-6-30")
expect(AcademicYear.range_from_date(date, ranges)).to eq "2023-24 Spring"
# Start of Fall 2021-22
date = Date.parse("2021-7-1")
expect(AcademicYear.range_from_date(date, ranges)).to eq "2021-22 Fall"
# End of Fall 2021-22
date = Date.parse("2022-2-26")
expect(AcademicYear.range_from_date(date, ranges)).to eq "2021-22 Fall"
# Start of Spring 2021-22
date = Date.parse("2022-2-27")
expect(AcademicYear.range_from_date(date, ranges)).to eq "2021-22 Spring"
# End of Spring 2021-22
date = Date.parse("2022-6-30")
expect(AcademicYear.range_from_date(date, ranges)).to eq "2021-22 Spring"
end
end
end
end
describe ".range_without_season" do
context "when the range doesn't have a season " do
before do
create(:academic_year, range: "2022-23")
create(:academic_year, range: "2023-24")
create(:academic_year, range: "2024-25")
end
it "parses 2022-23 as the range" do
ay = AcademicYear.find_by_range "2022-23"
expect(ay.range_without_season).to eq "2022-23"
end
end
context "when an academic year is split into seasons" do
before do
create(:academic_year, range: "2023-24 Fall")
create(:academic_year, range: "2023-24 Spring")
end
it "removes the season from the range" do
ay = AcademicYear.find_by_range "2023-24 Fall"
expect(ay.range_without_season).to eq "2023-24"
end
end
end
end