diff --git a/spec/factories/event_schedule.rb b/spec/factories/event_schedule.rb new file mode 100644 index 00000000..60e702ce --- /dev/null +++ b/spec/factories/event_schedule.rb @@ -0,0 +1,22 @@ +# Read about factories at https://github.com/thoughtbot/factory_girl + +FactoryGirl.define do + factory :event_schedule do + event + after(:build) do |event_schedule| + program = event_schedule.event.program + unless (venue = program.conference.venue) + venue = create(:venue, conference: program.conference) + end + (event_schedule.room = create(:room, venue: venue)) unless event_schedule.room.present? + (event_schedule.start_time = program.conference.start_date.to_time) unless event_schedule.start_time.present? + unless program.selected_schedule.present? + schedule = create(:schedule, program: program) + program.schedules << schedule + program.selected_schedule = schedule.id + program.save! + end + event_schedule.schedule_id = program.selected_schedule + end + end +end diff --git a/spec/factories/events.rb b/spec/factories/events.rb index 6d8dc2b1..3ae38109 100644 --- a/spec/factories/events.rb +++ b/spec/factories/events.rb @@ -18,22 +18,20 @@ FactoryGirl.define do factory :event_full do difficulty_level track - room after(:build) do |event| event.commercials << build(:event_commercial, commercialable: event) event.difficulty_level = build(:difficulty_level, program: event.program) event.track = build(:track, program: event.program) - unless (venue = event.program.conference.venue) - venue = create(:venue, conference: event.program.conference) + unless event.program.conference.venue + create(:venue, conference: event.program.conference) end - event.room = build(:room, venue: venue) event.comment_threads << build(:comment, commentable: event) end factory :event_scheduled do after(:build) do |event| event.state = 'confirmed' - event.start_time = event.program.conference.start_date.to_time + event.event_schedules << build(:event_schedule, event: event) end end end diff --git a/spec/factories/schedule.rb b/spec/factories/schedule.rb new file mode 100644 index 00000000..e1c9dc2f --- /dev/null +++ b/spec/factories/schedule.rb @@ -0,0 +1,7 @@ +# Read about factories at https://github.com/thoughtbot/factory_girl + +FactoryGirl.define do + factory :schedule do + program + end +end diff --git a/spec/models/event_schedule_spec.rb b/spec/models/event_schedule_spec.rb new file mode 100644 index 00000000..97a888f2 --- /dev/null +++ b/spec/models/event_schedule_spec.rb @@ -0,0 +1,10 @@ +require 'spec_helper' + +describe EventSchedule do + + describe 'association' do + it { should belong_to(:schedule) } + it { should belong_to(:event) } + it { should belong_to(:room) } + end +end diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb index c9cd64d3..d21b4665 100644 --- a/spec/models/event_spec.rb +++ b/spec/models/event_spec.rb @@ -27,7 +27,10 @@ describe Event do describe 'max_attendees_no_more_than_room_size' do before :each do - event.room = create(:room, size: 3) + unless (venue = event.program.conference.venue) + venue = create(:venue, conference: event.program.conference) + end + create(:event_schedule, event: event, room: create(:room, venue: venue, size: 3)) event.require_registration = true end @@ -116,8 +119,7 @@ describe Event do describe '#scheduled?' do it { expect(event.scheduled?).to eq false } it 'returns true if the event is scheduled' do - event.room = create(:room) - event.start_time = conference.start_date.to_time + create(:event_schedule, event: event) expect(event.scheduled?).to eq true end end @@ -259,11 +261,11 @@ describe Event do describe '#as_json' do it 'adds the event\'s room_guid, track_color and length' do - event.room = create(:room) + create(:event_schedule, event: event) event.track = create(:track, color: '#efefef') json_hash = event.as_json(nil) - expect(json_hash[:room_guid]).to eq(event.room.guid) + expect(json_hash[:room_guid]).to eq(event.scheduled_room.guid) expect(json_hash[:track_color]).to eq('#EFEFEF') expect(json_hash[:length]).to eq(30) end diff --git a/spec/models/program_spec.rb b/spec/models/program_spec.rb index d9c7590d..5306df3f 100644 --- a/spec/models/program_spec.rb +++ b/spec/models/program_spec.rb @@ -8,6 +8,7 @@ describe Program do describe 'association' do it { is_expected.to belong_to :conference } it { is_expected.to have_one(:cfp).dependent(:destroy) } + it { is_expected.to have_many(:schedules).dependent(:destroy) } it { is_expected.to have_many(:event_types).dependent(:destroy) } it { is_expected.to have_many(:tracks).dependent(:destroy) } it { is_expected.to have_many(:difficulty_levels).dependent(:destroy) } diff --git a/spec/models/room_spec.rb b/spec/models/room_spec.rb index 9220416b..8d5c6cf5 100644 --- a/spec/models/room_spec.rb +++ b/spec/models/room_spec.rb @@ -11,7 +11,7 @@ describe Room do describe 'association' do it { should belong_to(:venue) } - it { should have_many(:events).dependent(:nullify) } + it { should have_many(:event_schedules).dependent(:nullify) } end describe 'callback' do diff --git a/spec/models/schedule_spec.rb b/spec/models/schedule_spec.rb new file mode 100644 index 00000000..85d155c0 --- /dev/null +++ b/spec/models/schedule_spec.rb @@ -0,0 +1,9 @@ +require 'spec_helper' + +describe Schedule do + + describe 'association' do + it { should belong_to(:program) } + it { should have_many(:event_schedules).dependent(:destroy) } + end +end diff --git a/spec/serializers/event_serializer_spec.rb b/spec/serializers/event_serializer_spec.rb index c7b1c38f..979f8b5d 100644 --- a/spec/serializers/event_serializer_spec.rb +++ b/spec/serializers/event_serializer_spec.rb @@ -10,12 +10,12 @@ describe EventSerializer, type: :serializer do guid: event.guid, title: 'Some Talk', length: 30, - date: '', + scheduled_date: '', language: nil, abstract: '
Lorem ipsum dolor sit amet
', speaker_ids: [], type: 'Example Event Type', - room: nil, + scheduled_room: nil, track: nil } }.to_json @@ -30,9 +30,9 @@ describe EventSerializer, type: :serializer do let(:track) { create(:track) } before do - event.update_attributes(start_time: Date.new(2014, 03, 04), language: 'English') + event.language = 'English' event.event_users << speaker - event.room = room + create(:event_schedule, event: event, room: room, start_time: Date.new(2014, 03, 04)) event.track = track end @@ -42,12 +42,12 @@ describe EventSerializer, type: :serializer do guid: event.guid, title: 'Some Talk', length: 30, - date: ' 2014-03-04T00:00:00+0000 ', + scheduled_date: ' 2014-03-04T00:00:00+0000 ', language: 'English', abstract: 'Lorem ipsum dolor sit amet
', speaker_ids: [speaker.user.id], type: 'Example Event Type', - room: room.guid, + scheduled_room: room.guid, track: track.guid } }.to_json