Skip to content

Commit

Permalink
Validate SessionDate#value
Browse files Browse the repository at this point in the history
This adds validate to ensure that the date of the session is within the
academic year of the session.
  • Loading branch information
thomasleese committed Sep 25, 2024
1 parent 3a598ae commit 88e8ee1
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 3 deletions.
19 changes: 18 additions & 1 deletion app/models/session_date.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,22 @@ class SessionDate < ApplicationRecord

belongs_to :session

validates :value, uniqueness: { scope: :session }
validates :value,
uniqueness: {
scope: :session
},
comparison: {
greater_than_or_equal_to: :earliest_possible_value,
less_than_or_equal_to: :latest_possible_value
}

private

def earliest_possible_value
Date.new((session || Date.current).academic_year, 9, 1)
end

def latest_possible_value
Date.new((session || Date.current).academic_year + 1, 8, 31)
end
end
14 changes: 12 additions & 2 deletions spec/models/session_date_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,17 @@
# fk_rails_... (session_id => sessions.id)
#
describe SessionDate do
subject(:session_date) { build(:session_date) }
subject(:session_date) { build(:session_date, session:) }

it { should be_valid }
let(:session) { create(:session, academic_year: 2024) }

describe "validations" do
it "validates that the date is within the academic year" do
expect(session_date).to validate_comparison_of(
:value
).is_greater_than_or_equal_to(
Date.new(2024, 9, 1)
).is_less_than_or_equal_to(Date.new(2025, 8, 31))
end
end
end

0 comments on commit 88e8ee1

Please sign in to comment.