-
Notifications
You must be signed in to change notification settings - Fork 7
/
planned_timetable_slot_spec.rb
60 lines (48 loc) · 2.04 KB
/
planned_timetable_slot_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
require 'spec_helper'
require 'roles/planned_timetable_slot'
require 'models/person'
require 'sirius/time_converter'
require 'roles/planned_semester_period'
describe PlannedTimetableSlot do
let(:slot) { Fabricate(:timetable_slot, first_hour: 1, duration: 2, parity: :both, day: :monday) }
let(:period) { Period.parse('7:30', '9:00') }
let(:converter) { instance_double(Sirius::TimeConverter, convert_time: period) }
let(:semester_calendar) { instance_double(PlannedSemesterPeriod, plan: [period]) }
let(:faculty_semester) { Fabricate.build(:faculty_semester) }
subject(:planned_slot) { described_class.new(slot, converter) }
describe '#generate_events' do
it 'converts Timetableslot to events' do
events = planned_slot.generate_events(faculty_semester, semester_calendar)
expect(events.size).to be > 0
expect(events.first).to be_an_instance_of(Event)
end
it 'sets deleted flag for deleted timetable slots' do
slot.deleted_at = Time.now
events = planned_slot.generate_events(faculty_semester, semester_calendar)
expect(events.first.deleted).to be_truthy
end
end
describe '#clear_extra_events' do
let!(:extra_event) do
Fabricate(:event, absolute_sequence_number: 20, timetable_slot_id: slot.id,
applied_schedule_exception_ids: [Fabricate(:schedule_exception).id],
parallel_id: slot.parallel.id)
end
let!(:planned_event) do
Fabricate(:event, timetable_slot_id: slot.id, parallel_id: slot.parallel.id)
end
it 'marks extra events as deleted' do
expect {
planned_slot.clear_extra_events([planned_event])
[extra_event, planned_event].each(&:refresh)
}.to change(extra_event, :deleted).from(false).to(true)
expect(planned_event.deleted).to be_falsey
end
it 'removes any applied_schedule_exceptions from marked event' do
expect {
planned_slot.clear_extra_events([planned_event])
extra_event.refresh
}.to change(extra_event, :applied_schedule_exception_ids).to(nil)
end
end
end