stepper_motor 0.1.7 → 0.1.9

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.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +12 -0
  3. data/.github/workflows/ci.yml +51 -0
  4. data/CHANGELOG.md +81 -2
  5. data/Gemfile +11 -0
  6. data/README.md +13 -374
  7. data/Rakefile +21 -3
  8. data/bin/test +5 -0
  9. data/lib/generators/install_generator.rb +6 -1
  10. data/lib/generators/stepper_motor_migration_003.rb.erb +6 -0
  11. data/lib/generators/stepper_motor_migration_004.rb.erb +24 -0
  12. data/lib/stepper_motor/forward_scheduler.rb +8 -4
  13. data/lib/stepper_motor/journey/flow_control.rb +58 -0
  14. data/lib/stepper_motor/journey/recovery.rb +34 -0
  15. data/lib/stepper_motor/journey.rb +85 -84
  16. data/lib/stepper_motor/perform_step_job_v2.rb +2 -2
  17. data/lib/stepper_motor/recover_stuck_journeys_job_v1.rb +3 -1
  18. data/lib/stepper_motor/step.rb +70 -5
  19. data/lib/stepper_motor/version.rb +1 -1
  20. data/lib/stepper_motor.rb +0 -1
  21. data/lib/tasks/stepper_motor_tasks.rake +8 -0
  22. data/manual/MANUAL.md +538 -0
  23. data/rbi/stepper_motor.rbi +459 -0
  24. data/sig/stepper_motor.rbs +406 -3
  25. data/stepper_motor.gemspec +46 -0
  26. data/test/dummy/Rakefile +8 -0
  27. data/test/dummy/app/assets/stylesheets/application.css +1 -0
  28. data/test/dummy/app/controllers/application_controller.rb +6 -0
  29. data/test/dummy/app/helpers/application_helper.rb +4 -0
  30. data/test/dummy/app/jobs/application_job.rb +9 -0
  31. data/test/dummy/app/mailers/application_mailer.rb +6 -0
  32. data/test/dummy/app/models/application_record.rb +5 -0
  33. data/test/dummy/app/views/layouts/application.html.erb +27 -0
  34. data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
  35. data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
  36. data/test/dummy/app/views/pwa/manifest.json.erb +22 -0
  37. data/test/dummy/app/views/pwa/service-worker.js +26 -0
  38. data/test/dummy/bin/dev +2 -0
  39. data/test/dummy/bin/rails +4 -0
  40. data/test/dummy/bin/rake +4 -0
  41. data/test/dummy/bin/setup +34 -0
  42. data/test/dummy/config/application.rb +28 -0
  43. data/test/dummy/config/boot.rb +7 -0
  44. data/test/dummy/config/cable.yml +10 -0
  45. data/test/dummy/config/database.yml +32 -0
  46. data/test/dummy/config/environment.rb +7 -0
  47. data/test/dummy/config/environments/development.rb +71 -0
  48. data/test/dummy/config/environments/production.rb +91 -0
  49. data/test/dummy/config/environments/test.rb +55 -0
  50. data/test/dummy/config/initializers/content_security_policy.rb +27 -0
  51. data/test/dummy/config/initializers/filter_parameter_logging.rb +10 -0
  52. data/test/dummy/config/initializers/inflections.rb +18 -0
  53. data/test/dummy/config/initializers/stepper_motor.rb +1 -0
  54. data/test/dummy/config/locales/en.yml +31 -0
  55. data/test/dummy/config/puma.rb +40 -0
  56. data/test/dummy/config/routes.rb +16 -0
  57. data/test/dummy/config/storage.yml +34 -0
  58. data/test/dummy/config.ru +8 -0
  59. data/test/dummy/db/migrate/20250525132523_stepper_motor_migration_001.rb +38 -0
  60. data/test/dummy/db/migrate/20250525132524_stepper_motor_migration_002.rb +6 -0
  61. data/test/dummy/db/migrate/20250525132525_stepper_motor_migration_003.rb +6 -0
  62. data/test/dummy/db/migrate/20250525132526_stepper_motor_migration_004.rb +24 -0
  63. data/test/dummy/db/schema.rb +36 -0
  64. data/test/dummy/public/400.html +114 -0
  65. data/test/dummy/public/404.html +114 -0
  66. data/test/dummy/public/406-unsupported-browser.html +114 -0
  67. data/test/dummy/public/422.html +114 -0
  68. data/test/dummy/public/500.html +114 -0
  69. data/test/dummy/public/icon.png +0 -0
  70. data/test/dummy/public/icon.svg +3 -0
  71. data/test/side_effects_helper.rb +67 -0
  72. data/test/stepper_motor/cyclic_scheduler_test.rb +77 -0
  73. data/{spec/stepper_motor/forward_scheduler_spec.rb → test/stepper_motor/forward_scheduler_test.rb} +9 -10
  74. data/test/stepper_motor/journey/exception_handling_test.rb +89 -0
  75. data/test/stepper_motor/journey/flow_control_test.rb +78 -0
  76. data/test/stepper_motor/journey/idempotency_test.rb +65 -0
  77. data/test/stepper_motor/journey/step_definition_test.rb +187 -0
  78. data/test/stepper_motor/journey/uniqueness_test.rb +48 -0
  79. data/test/stepper_motor/journey_test.rb +352 -0
  80. data/{spec/stepper_motor/recover_stuck_journeys_job_spec.rb → test/stepper_motor/recover_stuck_journeys_job_test.rb} +14 -14
  81. data/{spec/stepper_motor/recovery_spec.rb → test/stepper_motor/recovery_test.rb} +27 -27
  82. data/test/stepper_motor/test_helper_test.rb +44 -0
  83. data/test/stepper_motor_test.rb +9 -0
  84. data/test/test_helper.rb +46 -0
  85. metadata +98 -44
  86. data/.rspec +0 -3
  87. data/.ruby-version +0 -1
  88. data/.standard.yml +0 -4
  89. data/.yardopts +0 -1
  90. data/spec/helpers/side_effects.rb +0 -85
  91. data/spec/spec_helper.rb +0 -90
  92. data/spec/stepper_motor/cyclic_scheduler_spec.rb +0 -68
  93. data/spec/stepper_motor/generator_spec.rb +0 -16
  94. data/spec/stepper_motor/journey_spec.rb +0 -401
  95. data/spec/stepper_motor/test_helper_spec.rb +0 -48
  96. data/spec/stepper_motor_spec.rb +0 -7
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stepper_motor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julik Tarkhanov
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2025-05-19 00:00:00.000000000 Z
10
+ date: 2025-05-25 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: activerecord
@@ -53,13 +52,13 @@ dependencies:
53
52
  - !ruby/object:Gem::Version
54
53
  version: '0'
55
54
  - !ruby/object:Gem::Dependency
56
- name: globalid
55
+ name: minitest
57
56
  requirement: !ruby/object:Gem::Requirement
58
57
  requirements:
59
58
  - - ">="
60
59
  - !ruby/object:Gem::Version
61
60
  version: '0'
62
- type: :runtime
61
+ type: :development
63
62
  prerelease: false
64
63
  version_requirements: !ruby/object:Gem::Requirement
65
64
  requirements:
@@ -67,49 +66,49 @@ dependencies:
67
66
  - !ruby/object:Gem::Version
68
67
  version: '0'
69
68
  - !ruby/object:Gem::Dependency
70
- name: sqlite3
69
+ name: rails
71
70
  requirement: !ruby/object:Gem::Requirement
72
71
  requirements:
73
- - - ">="
72
+ - - "~>"
74
73
  - !ruby/object:Gem::Version
75
- version: '0'
74
+ version: '7.0'
76
75
  type: :development
77
76
  prerelease: false
78
77
  version_requirements: !ruby/object:Gem::Requirement
79
78
  requirements:
80
- - - ">="
79
+ - - "~>"
81
80
  - !ruby/object:Gem::Version
82
- version: '0'
81
+ version: '7.0'
83
82
  - !ruby/object:Gem::Dependency
84
- name: rake
83
+ name: sqlite3
85
84
  requirement: !ruby/object:Gem::Requirement
86
85
  requirements:
87
- - - "~>"
86
+ - - ">="
88
87
  - !ruby/object:Gem::Version
89
- version: '13.0'
88
+ version: '0'
90
89
  type: :development
91
90
  prerelease: false
92
91
  version_requirements: !ruby/object:Gem::Requirement
93
92
  requirements:
94
- - - "~>"
93
+ - - ">="
95
94
  - !ruby/object:Gem::Version
96
- version: '13.0'
95
+ version: '0'
97
96
  - !ruby/object:Gem::Dependency
98
- name: rspec
97
+ name: rake
99
98
  requirement: !ruby/object:Gem::Requirement
100
99
  requirements:
101
100
  - - "~>"
102
101
  - !ruby/object:Gem::Version
103
- version: '3.0'
102
+ version: '13.0'
104
103
  type: :development
105
104
  prerelease: false
106
105
  version_requirements: !ruby/object:Gem::Requirement
107
106
  requirements:
108
107
  - - "~>"
109
108
  - !ruby/object:Gem::Version
110
- version: '3.0'
109
+ version: '13.0'
111
110
  - !ruby/object:Gem::Dependency
112
- name: rspec-rails
111
+ name: standard
113
112
  requirement: !ruby/object:Gem::Requirement
114
113
  requirements:
115
114
  - - ">="
@@ -123,21 +122,21 @@ dependencies:
123
122
  - !ruby/object:Gem::Version
124
123
  version: '0'
125
124
  - !ruby/object:Gem::Dependency
126
- name: standard
125
+ name: magic_frozen_string_literal
127
126
  requirement: !ruby/object:Gem::Requirement
128
127
  requirements:
129
- - - '='
128
+ - - ">="
130
129
  - !ruby/object:Gem::Version
131
- version: 1.28.5
130
+ version: '0'
132
131
  type: :development
133
132
  prerelease: false
134
133
  version_requirements: !ruby/object:Gem::Requirement
135
134
  requirements:
136
- - - '='
135
+ - - ">="
137
136
  - !ruby/object:Gem::Version
138
- version: 1.28.5
137
+ version: '0'
139
138
  - !ruby/object:Gem::Dependency
140
- name: magic_frozen_string_literal
139
+ name: yard
141
140
  requirement: !ruby/object:Gem::Requirement
142
141
  requirements:
143
142
  - - ">="
@@ -151,7 +150,7 @@ dependencies:
151
150
  - !ruby/object:Gem::Version
152
151
  version: '0'
153
152
  - !ruby/object:Gem::Dependency
154
- name: yard
153
+ name: redcarpet
155
154
  requirement: !ruby/object:Gem::Requirement
156
155
  requirements:
157
156
  - - ">="
@@ -165,7 +164,7 @@ dependencies:
165
164
  - !ruby/object:Gem::Version
166
165
  version: '0'
167
166
  - !ruby/object:Gem::Dependency
168
- name: redcarpet
167
+ name: sord
169
168
  requirement: !ruby/object:Gem::Requirement
170
169
  requirements:
171
170
  - - ">="
@@ -185,23 +184,27 @@ executables: []
185
184
  extensions: []
186
185
  extra_rdoc_files: []
187
186
  files:
188
- - ".rspec"
189
- - ".ruby-version"
190
- - ".standard.yml"
191
- - ".yardopts"
187
+ - ".github/dependabot.yml"
188
+ - ".github/workflows/ci.yml"
192
189
  - CHANGELOG.md
190
+ - Gemfile
193
191
  - LICENSE.md
194
192
  - README.md
195
193
  - Rakefile
196
194
  - bin/console
197
195
  - bin/setup
196
+ - bin/test
198
197
  - lib/generators/install_generator.rb
199
198
  - lib/generators/stepper_motor_migration_001.rb.erb
200
199
  - lib/generators/stepper_motor_migration_002.rb.erb
200
+ - lib/generators/stepper_motor_migration_003.rb.erb
201
+ - lib/generators/stepper_motor_migration_004.rb.erb
201
202
  - lib/stepper_motor.rb
202
203
  - lib/stepper_motor/cyclic_scheduler.rb
203
204
  - lib/stepper_motor/forward_scheduler.rb
204
205
  - lib/stepper_motor/journey.rb
206
+ - lib/stepper_motor/journey/flow_control.rb
207
+ - lib/stepper_motor/journey/recovery.rb
205
208
  - lib/stepper_motor/perform_step_job.rb
206
209
  - lib/stepper_motor/perform_step_job_v2.rb
207
210
  - lib/stepper_motor/railtie.rb
@@ -209,17 +212,70 @@ files:
209
212
  - lib/stepper_motor/step.rb
210
213
  - lib/stepper_motor/test_helper.rb
211
214
  - lib/stepper_motor/version.rb
215
+ - lib/tasks/stepper_motor_tasks.rake
216
+ - manual/MANUAL.md
217
+ - rbi/stepper_motor.rbi
212
218
  - sig/stepper_motor.rbs
213
- - spec/helpers/side_effects.rb
214
- - spec/spec_helper.rb
215
- - spec/stepper_motor/cyclic_scheduler_spec.rb
216
- - spec/stepper_motor/forward_scheduler_spec.rb
217
- - spec/stepper_motor/generator_spec.rb
218
- - spec/stepper_motor/journey_spec.rb
219
- - spec/stepper_motor/recover_stuck_journeys_job_spec.rb
220
- - spec/stepper_motor/recovery_spec.rb
221
- - spec/stepper_motor/test_helper_spec.rb
222
- - spec/stepper_motor_spec.rb
219
+ - stepper_motor.gemspec
220
+ - test/dummy/Rakefile
221
+ - test/dummy/app/assets/stylesheets/application.css
222
+ - test/dummy/app/controllers/application_controller.rb
223
+ - test/dummy/app/helpers/application_helper.rb
224
+ - test/dummy/app/jobs/application_job.rb
225
+ - test/dummy/app/mailers/application_mailer.rb
226
+ - test/dummy/app/models/application_record.rb
227
+ - test/dummy/app/views/layouts/application.html.erb
228
+ - test/dummy/app/views/layouts/mailer.html.erb
229
+ - test/dummy/app/views/layouts/mailer.text.erb
230
+ - test/dummy/app/views/pwa/manifest.json.erb
231
+ - test/dummy/app/views/pwa/service-worker.js
232
+ - test/dummy/bin/dev
233
+ - test/dummy/bin/rails
234
+ - test/dummy/bin/rake
235
+ - test/dummy/bin/setup
236
+ - test/dummy/config.ru
237
+ - test/dummy/config/application.rb
238
+ - test/dummy/config/boot.rb
239
+ - test/dummy/config/cable.yml
240
+ - test/dummy/config/database.yml
241
+ - test/dummy/config/environment.rb
242
+ - test/dummy/config/environments/development.rb
243
+ - test/dummy/config/environments/production.rb
244
+ - test/dummy/config/environments/test.rb
245
+ - test/dummy/config/initializers/content_security_policy.rb
246
+ - test/dummy/config/initializers/filter_parameter_logging.rb
247
+ - test/dummy/config/initializers/inflections.rb
248
+ - test/dummy/config/initializers/stepper_motor.rb
249
+ - test/dummy/config/locales/en.yml
250
+ - test/dummy/config/puma.rb
251
+ - test/dummy/config/routes.rb
252
+ - test/dummy/config/storage.yml
253
+ - test/dummy/db/migrate/20250525132523_stepper_motor_migration_001.rb
254
+ - test/dummy/db/migrate/20250525132524_stepper_motor_migration_002.rb
255
+ - test/dummy/db/migrate/20250525132525_stepper_motor_migration_003.rb
256
+ - test/dummy/db/migrate/20250525132526_stepper_motor_migration_004.rb
257
+ - test/dummy/db/schema.rb
258
+ - test/dummy/public/400.html
259
+ - test/dummy/public/404.html
260
+ - test/dummy/public/406-unsupported-browser.html
261
+ - test/dummy/public/422.html
262
+ - test/dummy/public/500.html
263
+ - test/dummy/public/icon.png
264
+ - test/dummy/public/icon.svg
265
+ - test/side_effects_helper.rb
266
+ - test/stepper_motor/cyclic_scheduler_test.rb
267
+ - test/stepper_motor/forward_scheduler_test.rb
268
+ - test/stepper_motor/journey/exception_handling_test.rb
269
+ - test/stepper_motor/journey/flow_control_test.rb
270
+ - test/stepper_motor/journey/idempotency_test.rb
271
+ - test/stepper_motor/journey/step_definition_test.rb
272
+ - test/stepper_motor/journey/uniqueness_test.rb
273
+ - test/stepper_motor/journey_test.rb
274
+ - test/stepper_motor/recover_stuck_journeys_job_test.rb
275
+ - test/stepper_motor/recovery_test.rb
276
+ - test/stepper_motor/test_helper_test.rb
277
+ - test/stepper_motor_test.rb
278
+ - test/test_helper.rb
223
279
  homepage: https://steppermotor.dev
224
280
  licenses:
225
281
  - LGPL
@@ -228,7 +284,6 @@ metadata:
228
284
  homepage_uri: https://steppermotor.dev
229
285
  source_code_uri: https://github.com/stepper-motor/stepper_motor
230
286
  changelog_uri: https://github.com/stepper-motor/stepper_motor/blob/main/CHANGELOG.md
231
- post_install_message:
232
287
  rdoc_options: []
233
288
  require_paths:
234
289
  - lib
@@ -243,8 +298,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
243
298
  - !ruby/object:Gem::Version
244
299
  version: '0'
245
300
  requirements: []
246
- rubygems_version: 3.3.7
247
- signing_key:
301
+ rubygems_version: 3.6.6
248
302
  specification_version: 4
249
303
  summary: Effortless step workflows that embed nicely inside Rails
250
304
  test_files: []
data/.rspec DELETED
@@ -1,3 +0,0 @@
1
- --format documentation
2
- --color
3
- --require spec_helper
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 3.1.1
data/.standard.yml DELETED
@@ -1,4 +0,0 @@
1
- ruby_version: 3.1
2
- ignore:
3
- - 'spec/app/db/**/*':
4
- - Layout/TrailingWhitespace # Templated migrations have whitespace
data/.yardopts DELETED
@@ -1 +0,0 @@
1
- --markup markdown - docs/MANUAL.md
@@ -1,85 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module SideEffects
4
- module SpecHelper
5
- def self.included(into)
6
- into.before(:each) { SideEffects.clear! }
7
- into.after(:each) { SideEffects.clear! }
8
- super
9
- end
10
- end
11
-
12
- def self.produced?(name)
13
- Thread.current[:side_effects].to_h.key?(name.to_s)
14
- end
15
-
16
- def self.none?
17
- Thread.current[:side_effects].to_h.empty?
18
- end
19
-
20
- def self.names
21
- Thread.current[:side_effects].to_h.keys.map(&:to_s)
22
- end
23
-
24
- def self.clear!
25
- Thread.current[:side_effects] = {}
26
- end
27
-
28
- def self.touch!(name)
29
- if Thread.current[:side_effects].nil?
30
- raise <<~ERROR
31
- The current thread locals do not contain :side_effects, which means that your job
32
- is running on a different thread than the specs. This is probably due to bad configuration
33
- of the ActiveJob test adapter.
34
- ERROR
35
- end
36
- Thread.current[:side_effects][name.to_s] = true
37
- end
38
-
39
- RSpec::Matchers.define :have_produced_side_effects_named do |*side_effect_names|
40
- match(notify_expectation_failures: true) do |actual|
41
- SideEffects.clear!
42
- actual.call
43
- side_effect_names.each do |side_effect_name|
44
- expect(SideEffects).to be_produced(side_effect_name), "The side effect named #{side_effect_name.inspect} should have been produced, but wasn't"
45
- end
46
- true
47
- end
48
-
49
- def supports_block_expectations?
50
- true
51
- end
52
- end
53
-
54
- RSpec::Matchers.define :not_have_produced_side_effects_named do |*side_effect_names|
55
- match(notify_expectation_failures: true) do |actual|
56
- expect(side_effect_names).not_to be_empty
57
-
58
- SideEffects.clear!
59
- actual.call
60
-
61
- side_effect_names.each do |side_effect_name|
62
- expect(SideEffects).not_to be_produced(side_effect_name), "The side effect named #{side_effect_name.inspect} should not have been produced, but was"
63
- end
64
-
65
- true
66
- end
67
-
68
- def supports_block_expectations?
69
- true
70
- end
71
- end
72
-
73
- RSpec::Matchers.define :not_have_produced_any_side_effects do
74
- match(notify_expectation_failures: true) do |actual|
75
- SideEffects.clear!
76
- actual.call
77
- expect(SideEffects).to be_none
78
- true
79
- end
80
-
81
- def supports_block_expectations?
82
- true
83
- end
84
- end
85
- end
data/spec/spec_helper.rb DELETED
@@ -1,90 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "stepper_motor"
4
- require "active_support/testing/time_helpers"
5
- require "active_job"
6
- require "active_record"
7
- require "globalid"
8
- require_relative "helpers/side_effects"
9
- require "fileutils"
10
-
11
- module StepperMotorRailtieTestHelpers
12
- def establish_test_connection
13
- ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: fake_app_root + "/db.sqlite3")
14
- StepperMotor::InstallGenerator.source_root(File.dirname(__FILE__) + "/../../lib")
15
- end
16
-
17
- def fake_app_root
18
- File.dirname(__FILE__) + "/app"
19
- end
20
-
21
- def run_generator
22
- generator = StepperMotor::InstallGenerator.new
23
- generator.destination_root = fake_app_root
24
- generator.create_migration_file
25
- end
26
-
27
- def run_migrations
28
- # Before running the migrations we need to require the migration files, since there is no
29
- # "full" Rails environment available
30
- Dir.glob(fake_app_root + "/db/migrate/*.rb").sort.each do |migration_file_path|
31
- require migration_file_path
32
- end
33
-
34
- ActiveRecord::Migrator.migrations_paths = [File.join(fake_app_root + "/db/migrate")]
35
- ActiveRecord::Tasks::DatabaseTasks.root = fake_app_root
36
- ActiveRecord::Tasks::DatabaseTasks.migrate
37
- end
38
- extend self
39
- end
40
-
41
- module ActiveSupportTestCaseMethodsStub
42
- def self.included(into)
43
- into.before(:each) { before_setup }
44
- into.after(:each) { after_teardown }
45
- end
46
-
47
- def before_setup
48
- # Blank implementation as TestCase modules super() into it
49
- end
50
-
51
- def after_teardown
52
- # Blank implementation as TestCase modules super() into it
53
- end
54
- end
55
-
56
- module JourneyDefinitionHelper
57
- def create_journey_subclass(&blk)
58
- # https://stackoverflow.com/questions/4113479/dynamic-class-definition-with-a-class-name
59
- random_component = Random.hex(2)
60
- random_name = "JourneySubclass#{random_component}"
61
- klass = Class.new(StepperMotor::Journey, &blk)
62
- Object.const_set(random_name, klass)
63
- klass
64
- end
65
- end
66
-
67
- RSpec.configure do |config|
68
- # Enable flags like --only-failures and --next-failure
69
- config.example_status_persistence_file_path = ".rspec_status"
70
-
71
- # Disable RSpec exposing methods globally on `Module` and `main`
72
- config.disable_monkey_patching!
73
-
74
- config.expect_with :rspec do |c|
75
- c.syntax = :expect
76
- end
77
-
78
- config.include ActiveSupport::Testing::TimeHelpers
79
- config.include StepperMotorRailtieTestHelpers
80
- config.include SideEffects::SpecHelper
81
- config.include ActiveSupportTestCaseMethodsStub
82
- config.include JourneyDefinitionHelper
83
-
84
- config.before :suite do
85
- StepperMotorRailtieTestHelpers.establish_test_connection
86
- StepperMotorRailtieTestHelpers.run_generator
87
- StepperMotorRailtieTestHelpers.run_migrations
88
- ActiveJob::Base.logger.level = Logger::FATAL
89
- end
90
- end
@@ -1,68 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "../spec_helper"
4
-
5
- RSpec.describe "StepperMotor::CyclicScheduler" do
6
- include ActiveJob::TestHelper
7
-
8
- before do
9
- @previous_scheduler = StepperMotor.scheduler
10
- StepperMotor::Journey.delete_all
11
- end
12
-
13
- after do
14
- StepperMotor.scheduler = @previous_scheduler
15
- end
16
-
17
- def far_future_journey_class
18
- @klass ||= create_journey_subclass do
19
- step :do_thing, wait: 40.minutes do
20
- raise "We do not test this so it should never run"
21
- end
22
- end
23
- end
24
-
25
- it "does not schedule a journey which is too far in the future" do
26
- scheduler = StepperMotor::CyclicScheduler.new(cycle_duration: 30.seconds)
27
- StepperMotor.scheduler = scheduler
28
-
29
- expect(scheduler).to receive(:schedule).with(instance_of(far_future_journey_class)).once.and_call_original
30
- _journey = far_future_journey_class.create!
31
-
32
- expect(scheduler).not_to receive(:schedule)
33
- scheduler.run_scheduling_cycle
34
- end
35
-
36
- it "only schedules journeys which are within its execution window" do
37
- scheduler = StepperMotor::CyclicScheduler.new(cycle_duration: 40.minutes)
38
- StepperMotor.scheduler = scheduler
39
-
40
- expect(scheduler).to receive(:schedule).with(instance_of(far_future_journey_class)).once.and_call_original
41
- journey = far_future_journey_class.create!
42
-
43
- expect(scheduler).to receive(:schedule).with(journey).and_call_original
44
- scheduler.run_scheduling_cycle
45
- end
46
-
47
- it "also schedules journeys which had to run in the past" do
48
- scheduler = StepperMotor::CyclicScheduler.new(cycle_duration: 10.seconds)
49
- StepperMotor.scheduler = scheduler
50
-
51
- expect(scheduler).to receive(:schedule).with(instance_of(far_future_journey_class)).once.and_call_original
52
- journey = far_future_journey_class.create!
53
- journey.update!(next_step_to_be_performed_at: 10.minutes.ago)
54
-
55
- expect(scheduler).to receive(:schedule).with(journey).and_call_original
56
- scheduler.run_scheduling_cycle
57
- end
58
-
59
- it "performs the scheduling job" do
60
- scheduler = StepperMotor::CyclicScheduler.new(cycle_duration: 10.seconds)
61
- StepperMotor.scheduler = scheduler
62
- job_class = StepperMotor::CyclicScheduler::RunSchedulingCycleJob
63
- expect(scheduler).to receive(:run_scheduling_cycle).and_call_original
64
- job_class.perform_now
65
- end
66
-
67
- it "does not perform the job if the configured scheduler is not the CyclicScheduler"
68
- end
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "../spec_helper"
4
-
5
- RSpec.describe "StepperMotor::InstallGenerator" do
6
- it "is able to set up a test database" do
7
- expect {
8
- establish_test_connection
9
- run_generator
10
- run_migrations
11
- }.not_to raise_error
12
- expect(ActiveRecord::Base.connection.tables).to include("stepper_motor_journeys")
13
- ensure
14
- FileUtils.rm_rf(fake_app_root)
15
- end
16
- end