From 0b26ed5c355467c1e5def8c2268040bc3b2f046a Mon Sep 17 00:00:00 2001 From: Ana Date: Tue, 26 Jul 2016 16:20:31 +0200 Subject: [PATCH] EventSchedule validations event, schedule, room and start_time are mandatory in EventSchedule. --- app/controllers/admin/schedules_controller.rb | 3 ++- app/controllers/conference_controller.rb | 4 ++-- app/models/event.rb | 4 ++-- app/models/event_schedule.rb | 9 ++++++--- app/models/program.rb | 2 +- app/serializers/event_schedule_serializer.rb | 2 +- app/views/proposal/show.html.haml | 2 +- db/schema.rb | 6 +++--- spec/controllers/conference_controller_spec.rb | 2 +- spec/models/event_schedule_spec.rb | 7 +++++++ 10 files changed, 26 insertions(+), 15 deletions(-) diff --git a/app/controllers/admin/schedules_controller.rb b/app/controllers/admin/schedules_controller.rb index 686c0ef9..d560c246 100644 --- a/app/controllers/admin/schedules_controller.rb +++ b/app/controllers/admin/schedules_controller.rb @@ -47,7 +47,8 @@ module Admin return end - event_schedule = event.event_schedules.create(schedule_id: params[:schedule]) unless event_schedule.present? + Rails.logger.debug(event_schedule.present?.to_s) + event_schedule = event.event_schedules.new(schedule_id: params[:schedule]) unless event_schedule.present? room = Room.where(guid: room_params).first if room.nil? diff --git a/app/controllers/conference_controller.rb b/app/controllers/conference_controller.rb index 146fca38..fcde92ad 100644 --- a/app/controllers/conference_controller.rb +++ b/app/controllers/conference_controller.rb @@ -18,7 +18,7 @@ class ConferenceController < ApplicationController end @events = @conference.program.events - @events_xml = @program.schedules.find(program.selected_schedule).event_schedules.where('start_time IS NOT NULL AND room_id IS NOT NULL').order(start_time: :asc) + @events_xml = @program.schedules.find(@program.selected_schedule).event_schedules.order(start_time: :asc) .map(&:event).group_by{ |event| event.scheduled_start_time.to_date } if program.selected_schedule.present? @dates = @conference.start_date..@conference.end_date @step_minutes = EventType::LENGTH_STEP.minutes @@ -38,7 +38,7 @@ class ConferenceController < ApplicationController @dates = @conference.start_date..@conference.end_date if @program.selected_schedule.present? - @events_schedules = @program.schedules.find(@program.selected_schedule).event_schedules.where('start_time IS NOT NULL AND room_id IS NOT NULL').order(start_time: :asc) + @events_schedules = @program.schedules.find(@program.selected_schedule).event_schedules.order(start_time: :asc) else @events_schedules = [] end diff --git a/app/models/event.rb b/app/models/event.rb index 807339ee..f80f85ef 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -75,7 +75,7 @@ class Event < ActiveRecord::Base # ====Returns # * +true+ or +false+ def scheduled? - selected_event_schedule.try(:start_time).present? && selected_event_schedule.try(:room).present? + selected_event_schedule.present? end ## @@ -84,7 +84,7 @@ class Event < ActiveRecord::Base # ====Returns # * +true+ or +false+ def unscheduled?(schedule_id) - state == 'confirmed' && (!event_schedule(schedule_id).try(:start_time).present? || !event_schedule(schedule_id).try(:room).present?) + state == 'confirmed' && !event_schedule(schedule_id).present? end def registration_possible? diff --git a/app/models/event_schedule.rb b/app/models/event_schedule.rb index 157a478e..dd69aec9 100644 --- a/app/models/event_schedule.rb +++ b/app/models/event_schedule.rb @@ -3,13 +3,16 @@ class EventSchedule < ActiveRecord::Base belongs_to :event belongs_to :room + validates :schedule, presence: true + validates :event, presence: true + validates :room, presence: true + validates :start_time, presence: true + scope :confirmed, -> { joins(:event).where('state = ?', 'confirmed') } scope :canceled, -> { joins(:event).where('state = ?', 'canceled') } scope :withdrawn, -> { joins(:event).where('state = ?', 'withdrawn') } - def room_guid - room.try(:guid) - end + delegate :guid, to: :room, prefix: true ## # Returns end of the event diff --git a/app/models/program.rb b/app/models/program.rb index a1f22c74..9a25376a 100644 --- a/app/models/program.rb +++ b/app/models/program.rb @@ -28,7 +28,7 @@ class Program < ActiveRecord::Base end def scheduled(schedule_id) - joins(:event_schedules).where('event_schedules.schedule_id = ? AND event_schedules.start_time IS NOT NULL AND event_schedules.room_id IS NOT NULL', schedule_id) + joins(:event_schedules).where('event_schedules.schedule_id = ?', schedule_id) end def unscheduled(schedule_id) diff --git a/app/serializers/event_schedule_serializer.rb b/app/serializers/event_schedule_serializer.rb index 94042aa0..c0de52eb 100644 --- a/app/serializers/event_schedule_serializer.rb +++ b/app/serializers/event_schedule_serializer.rb @@ -9,6 +9,6 @@ class EventScheduleSerializer < ActiveModel::Serializer end def room - object.room.try(:guid) + object.room.guid end end diff --git a/app/views/proposal/show.html.haml b/app/views/proposal/show.html.haml index 2eedf981..501b22e2 100644 --- a/app/views/proposal/show.html.haml +++ b/app/views/proposal/show.html.haml @@ -68,7 +68,7 @@ %dl#proposal-info .col-md-12 %dt Date: - %dd= @event_schedule.start_time.strftime("%Y %B %e %H:%M") if @event_schedule.try(:start_time) + %dd= @event_schedule.start_time.strftime("%Y %B %e %H:%M") if @event_schedule .col-md-12 %dt Duration: %dd= show_time(@event.event_type.length) diff --git a/db/schema.rb b/db/schema.rb index 50c0eb92..7761dd93 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20160704092023) do +ActiveRecord::Schema.define(version: 20160705110711) do create_table "ahoy_events", force: :cascade do |t| t.uuid "visit_id", limit: 16 @@ -180,9 +180,9 @@ ActiveRecord::Schema.define(version: 20160704092023) do t.integer "event_id" t.integer "schedule_id" t.integer "room_id" - t.datetime "start_time" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.datetime "start_time" end add_index "event_schedules", ["event_id"], name: "index_event_schedules_on_event_id" @@ -271,10 +271,10 @@ ActiveRecord::Schema.define(version: 20160704092023) do t.datetime "created_at" t.datetime "updated_at" t.string "languages" + t.integer "selected_schedule" t.boolean "blind_voting", default: false t.datetime "voting_start_date" t.datetime "voting_end_date" - t.integer "selected_schedule" end create_table "qanswers", force: :cascade do |t| diff --git a/spec/controllers/conference_controller_spec.rb b/spec/controllers/conference_controller_spec.rb index 856d618d..1c2cc281 100644 --- a/spec/controllers/conference_controller_spec.rb +++ b/spec/controllers/conference_controller_spec.rb @@ -39,7 +39,7 @@ describe ConferenceController do it 'assigns variables' do expect(assigns(:conference)).to eq conference - expect(assigns(:events_xml)).to eq conference.program.schedules.find(conference.program.selected_schedule).event_schedules.where('start_time IS NOT NULL AND room_id IS NOT NULL') + expect(assigns(:events_xml)).to eq conference.program.schedules.find(conference.program.selected_schedule).event_schedules .order(start_time: :asc).map(&:event).group_by{ |event| event.scheduled_start_time.to_date } end diff --git a/spec/models/event_schedule_spec.rb b/spec/models/event_schedule_spec.rb index 97a888f2..669e9eed 100644 --- a/spec/models/event_schedule_spec.rb +++ b/spec/models/event_schedule_spec.rb @@ -7,4 +7,11 @@ describe EventSchedule do it { should belong_to(:event) } it { should belong_to(:room) } end + + describe 'validation' do + it { is_expected.to validate_presence_of(:schedule) } + it { is_expected.to validate_presence_of(:event) } + it { is_expected.to validate_presence_of(:room) } + it { is_expected.to validate_presence_of(:start_time) } + end end