panda_pal 4.1.0.beta3 → 5.0.0.beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,144 +0,0 @@
1
- require 'rails_helper'
2
-
3
- module PandaPal
4
- PandaPal::Organization
5
-
6
- RSpec.describe OrganizationConcerns::TaskScheduling, type: :model do
7
- let!(:organization) { create(:panda_pal_organization) }
8
- let(:schedules) { {} }
9
-
10
- before :each do
11
- Organization.instance_variable_set(:@_schedule_descriptors, nil)
12
- Organization.scheduled_task('0 0 0 * * *', :ident) { }
13
-
14
- allow(Sidekiq).to receive(:remove_schedule)
15
- allow(Sidekiq).to receive(:get_schedule) { schedules }
16
- end
17
-
18
- def descriptors
19
- Organization.instance_variable_get(:@_schedule_descriptors)
20
- end
21
-
22
- def descriptor
23
- descriptors[descriptors.keys[0]]
24
- end
25
-
26
- describe '.scheduled_task' do
27
- it 'adds to the set of descriptors' do
28
- expect(descriptors).to match(
29
- 'ident' => {
30
- :key=>"ident",
31
- :schedule=>"0 0 0 * * *",
32
- :worker=>Proc,
33
- :queue=>"default",
34
- }
35
- )
36
- end
37
- end
38
-
39
- describe '.sync_schedules' do
40
- it 'adds new schedules' do
41
- expect(Sidekiq).to receive(:set_schedule).with(/org:\w+-ident/, anything)
42
- Organization.sync_schedules
43
- end
44
-
45
- it 'removes schedules for deleted Orgs' do
46
- schedules['org:deleted_org-schedule'] = {}
47
- expect(Sidekiq).to receive(:remove_schedule).with('org:deleted_org-schedule')
48
- Organization.sync_schedules
49
- end
50
-
51
- it 'keeps schedules created from other sources' do
52
- schedules['other-schedule'] = {}
53
- expect(Sidekiq).not_to receive(:remove_schedule).with('other-schedule')
54
- Organization.sync_schedules
55
- end
56
- end
57
-
58
- describe '#generate_schedule' do
59
- it 'generates the expected schedule' do
60
- expect(organization.generate_schedule).to eq({
61
- "org:#{organization.name}-ident" => {
62
- "cron"=>"0 0 0 * * *",
63
- "queue"=>"default",
64
- "class"=>"PandaPal::OrganizationConcerns::TaskScheduling::ScheduledTaskExecutor",
65
- "args"=>[organization.name, "ident"],
66
- }
67
- })
68
- end
69
- end
70
-
71
- describe '#schedule_task_cron_time' do
72
- before :each do
73
- organization.settings = { timezone: 'America/Denver' }
74
- end
75
-
76
- it 'includes timezone if in settings' do
77
- expect(organization.send(:schedule_task_cron_time, descriptor)).to eq '0 0 0 * * * America/Denver'
78
- end
79
-
80
- it 'does not re-append timezone if already present' do
81
- descriptor[:schedule] = '1 1 1 * * * America/Chicago'
82
- expect(organization.send(:schedule_task_cron_time, descriptor)).to eq '1 1 1 * * * America/Chicago'
83
- end
84
- end
85
-
86
- describe '#sync_schedule' do
87
- it 'adds new schedules' do
88
- expect(Sidekiq).to receive(:set_schedule).with(/org:\w+-ident/, anything)
89
- organization.sync_schedule
90
- end
91
-
92
- it 'removes old jobs' do
93
- schedules["org:#{organization.name}-old_schedule"] = {}
94
- expect(Sidekiq).to receive(:remove_schedule).with("org:#{organization.name}-old_schedule")
95
- organization.sync_schedule
96
- end
97
- end
98
-
99
- describe 'SettingsValidation' do
100
- before :each do
101
- organization.settings = {}
102
- end
103
-
104
- it 'passes a valid timezone' do
105
- organization.settings[:timezone] = 'America/Denver'
106
- expect(organization).to be_valid
107
- end
108
-
109
- it 'fails an invalid timezone' do
110
- organization.settings[:timezone] = 'Timezone/Blorg'
111
- expect(organization).not_to be_valid
112
- end
113
-
114
- it 'allows [:task_schedules] entry to be missing' do
115
- expect(organization).to be_valid
116
- end
117
-
118
- it 'does not require [:task_schedules] sub-entries' do
119
- organization.settings[:task_schedules] = {}
120
- expect(organization).to be_valid
121
- end
122
-
123
- it 'allows task entry to be false' do
124
- organization.settings[:task_schedules] = { ident: false }
125
- expect(organization).to be_valid
126
- end
127
-
128
- it 'allows task entry to be a valid cron string' do
129
- organization.settings[:task_schedules] = { ident: '0 0 0 * * * America/Denver' }
130
- expect(organization).to be_valid
131
- end
132
-
133
- it 'does not allow task entry to be an invalid cron string' do
134
- organization.settings[:task_schedules] = { ident: 'blort' }
135
- expect(organization).not_to be_valid
136
- end
137
-
138
- it 'does not allow sub-entries for unknown tasks' do
139
- organization.settings[:task_schedules] = { missing_ident: '0 0 0 * * * America/Denver' }
140
- expect(organization).not_to be_valid
141
- end
142
- end
143
- end
144
- end