Skip to content

Commit 1432149

Browse files
committed
Ensure presence gets a valid value
1 parent 93aa691 commit 1432149

2 files changed

Lines changed: 73 additions & 0 deletions

File tree

app/models/event.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class Event < ApplicationRecord
1919
include WithTimezone
2020

2121
before_validation :fix_keywords, on: :create, if: :scraper_record
22+
before_validation :presence_default
2223
before_save :check_country_name # :set_default_times
2324
before_save :geocoding_cache_lookup, if: :address_will_change?
2425
after_save :enqueue_geocoding_worker, if: :address_changed?
@@ -124,6 +125,7 @@ class Event < ApplicationRecord
124125
validates :latitude, numericality: { greater_than_or_equal_to: -90, less_than_or_equal_to: 90, allow_nil: true }
125126
validates :longitude, numericality: { greater_than_or_equal_to: -180, less_than_or_equal_to: 180, allow_nil: true }
126127
# validates :duration, format: { with: /\A[0-9][0-9]:[0-5][0-9]\z/, message: "must be in format HH:MM" }, allow_blank: true
128+
validates :presence, inclusion: { in: presences.keys, allow_blank: true }
127129
validate :allowed_url
128130
clean_array_fields(:keywords, :fields, :event_types, :target_audience,
129131
:eligibility, :host_institutions, :sponsors)
@@ -495,4 +497,8 @@ def fix_keywords
495497
end
496498
end
497499
end
500+
501+
def presence_default
502+
self.presence = :onsite if presence.blank?
503+
end
498504
end

test/models/event_test.rb

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -571,20 +571,87 @@ class EventTest < ActiveSupport::TestCase
571571
end
572572

573573
test 'can still set presence through online setter' do
574+
assert @event.valid?
574575
assert @event.onsite?
575576
refute @event.online?
576577
refute @event.hybrid?
577578

578579
@event.online = true
579580

581+
assert @event.valid?
580582
refute @event.onsite?
581583
assert @event.online?
582584
refute @event.hybrid?
583585

584586
@event.online = false
585587

588+
assert @event.valid?
586589
assert @event.onsite?
587590
refute @event.online?
588591
refute @event.hybrid?
592+
593+
@event.online = ''
594+
595+
assert @event.valid?
596+
assert @event.onsite?
597+
refute @event.online?
598+
refute @event.hybrid?
599+
end
600+
601+
test 'validates presence' do
602+
@event.presence = 'onsite'
603+
604+
assert @event.valid?
605+
assert @event.onsite?
606+
refute @event.online?
607+
refute @event.hybrid?
608+
609+
@event.presence = 0
610+
611+
assert @event.valid?
612+
assert @event.onsite?
613+
refute @event.online?
614+
refute @event.hybrid?
615+
616+
@event.presence = :online
617+
618+
assert @event.valid?
619+
refute @event.onsite?
620+
assert @event.online?
621+
refute @event.hybrid?
622+
623+
@event.presence = 1
624+
625+
assert @event.valid?
626+
refute @event.onsite?
627+
assert @event.online?
628+
refute @event.hybrid?
629+
630+
@event.presence = 'hybrid'
631+
632+
assert @event.valid?
633+
refute @event.onsite?
634+
refute @event.online?
635+
assert @event.hybrid?
636+
637+
@event.presence = nil
638+
639+
assert @event.valid?
640+
assert @event.onsite?
641+
refute @event.online?
642+
refute @event.hybrid?
643+
644+
@event.presence = ''
645+
646+
assert @event.valid?
647+
assert @event.onsite?
648+
refute @event.online?
649+
refute @event.hybrid?
650+
651+
# TODO: Use enum validation in Rails 7.1 https://github.com/rails/rails/pull/49100
652+
assert_raises(ArgumentError) do
653+
@event.presence = 'xyz'
654+
refute @event.valid?
655+
end
589656
end
590657
end

0 commit comments

Comments
 (0)