clockwork-mocks 1.3.0 → 1.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bad3a611b8f9f74f5d53f98f486af7c2f5ac2557
4
- data.tar.gz: ab77bd94f870a31e553fde0f7d65c02592b70cf6
3
+ metadata.gz: d1bad1a54175dbed4dbe8530c589ca6d2d699404
4
+ data.tar.gz: e515fa9fc4bea5f981a1b410115c55d0e6dd7816
5
5
  SHA512:
6
- metadata.gz: cca4ce9c635e96241e52316114e5d7e59357c1d42fb07db72b552e08ab0a2aeceae2bd44670ef77c1a2f4e7362f269b088826c853f75fbf88f3a7ff349121393
7
- data.tar.gz: 1991ef04ea9fac5d4fd8b949d9ed5ac9bcbd641693afd72cd0609d20c5ce00c3730dd473106d709ac0e88a2c2e424121de6b739b9690ab23d43335ef62d20758
6
+ metadata.gz: efd69b2649a2d37862af8c01ecd32df2b282bfa3c05aceab75395a2a1a532bfba2fbc88f2df869285790cf3a55c4d0663f8aacb31858476b9b1c64b498c8c771
7
+ data.tar.gz: 55019f777ec301c4269d595ff217634ab013f1ea197ed7c2c42173db7a7c766855de188eb8161642515c07a4f21bf31a8d70bb68b97927c5a69d2f88d7d72796
data/README.md CHANGED
@@ -4,12 +4,52 @@ This gem provides **helpers for integration testing with clockwork**.
4
4
  [Clockwork](https://github.com/Rykian/clockwork) provides a cron-like utility for ruby.
5
5
  It works especially well in combination with [timecop](https://github.com/travisjeffery/timecop).
6
6
 
7
+ ## Example Usecase
8
+
9
+ Image you have a rails app with a clockwork task scheduled every night to check for inactive users and sends them reminders via email.
10
+ Your `clock.rb` file would look as follows:
11
+
12
+ ```ruby
13
+ module Clockwork
14
+ every(1.day, 'inactives', at: '00:00') do
15
+ User.inactive.each do
16
+ Mailer.reminder_mail.deliver_later
17
+ end
18
+ end
19
+ end
20
+ ```
21
+
22
+ By using ClockworkMocks in combination with RSpec and Timecop, you could test this as follows:
23
+
24
+ ```ruby
25
+ RSpec.describe ... do
26
+ before { ClockworkMocks.reset_rspec(method(:allow), method(:receive)) }
27
+ let!(:user) { create(:user) }
28
+
29
+ context 'after 7 days without action' do
30
+ before do
31
+ Timecop.freeze 7.days.from_now
32
+ ClockworkMocks.work
33
+ end
34
+ after { Timecop.return }
35
+
36
+ it 'should have sent the user a reminder' do
37
+ expect(ActionMailer::Base.deliveries).not_to be_empty
38
+ end
39
+ end
40
+ end
41
+ ```
42
+
43
+ Note that this does not replace proper unit tests, but gives you the possibility to additionally test your system as a whole.
44
+
7
45
  ## Installation
8
46
 
9
- Add this line to your application's Gemfile:
47
+ Add this to your application's Gemfile:
10
48
 
11
49
  ```ruby
12
- gem 'clockwork-mocks'
50
+ group :test do
51
+ gem 'clockwork-mocks'
52
+ end
13
53
  ```
14
54
 
15
55
  And then execute:
@@ -48,11 +88,11 @@ Using this interface, you can use any stub provider to stub `Clockwork`'s method
48
88
  For example with rspec-mock:
49
89
 
50
90
  ```ruby
51
- allow.call(Clockwork).to receive.call(:handler) do |&block|
91
+ allow(Clockwork).to receive(:handler) do |&block|
52
92
  ClockworkMocks.scheduler.handler(&block)
53
93
  end
54
94
 
55
- allow.call(Clockwork).to receive.call(:every) do |interval, name, hash, &block|
95
+ allow(Clockwork).to receive(:every) do |interval, name, hash, &block|
56
96
  ClockworkMocks.scheduler.every interval, name, hash, &block
57
97
  end
58
98
 
@@ -91,6 +131,17 @@ not so often
91
131
  often
92
132
  ```
93
133
 
134
+ ### Sidekiq
135
+
136
+ If you use clockwork to schedule sidekiq jobs but want them to actually execute during integration testing I recommend one of two options:
137
+
138
+ 1. Use sidekiq's inline mode to execute all jobs immediately during integration testing.
139
+ This works well if you don't on scheduled jobs or don't care about the execution date.
140
+ 2. Use a library like [sidekiq-fake-scheduler](https://github.com/dpoetzsch/sidekiq-fake-scheduler).
141
+ This is superior to inline mode in that it respects the dates when the jobs are scheduled so you can test your application more fine-grained.
142
+ The proposed gem neatly integrates with clockwork-mocks.
143
+ Disclaimer: I am the creator and maintainer of sidekiq-fake-scheduler.
144
+
94
145
  ## Development
95
146
 
96
147
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -12,7 +12,7 @@ module ClockworkMocks
12
12
  end
13
13
 
14
14
  def reset!
15
- @due = Time.now
15
+ @due = Time.now.utc
16
16
  @due = calc_due
17
17
  end
18
18
 
@@ -20,7 +20,7 @@ module ClockworkMocks
20
20
  if @block
21
21
  @block.call
22
22
  elsif handler
23
- handler.call(@name, Time.now)
23
+ handler.call(@name, Time.now.utc)
24
24
  end
25
25
  @due = calc_due
26
26
  end
@@ -30,7 +30,7 @@ module ClockworkMocks
30
30
  private
31
31
 
32
32
  def calc_due
33
- ndue = Time.at((due || Time.now).to_f + @interval)
33
+ ndue = Time.at((due || Time.now.utc).to_f + @interval).utc
34
34
 
35
35
  return ndue unless @hash[:at]
36
36
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ClockworkMocks
4
- VERSION = '1.3.0'
4
+ VERSION = '1.3.1'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clockwork-mocks
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Poetzsch-Heffter
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-09-05 00:00:00.000000000 Z
11
+ date: 2017-09-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: clockwork
@@ -153,7 +153,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
153
153
  version: '0'
154
154
  requirements: []
155
155
  rubyforge_project:
156
- rubygems_version: 2.5.2
156
+ rubygems_version: 2.5.2.1
157
157
  signing_key:
158
158
  specification_version: 4
159
159
  summary: Helpers for manual scheduling of clockwork tasks for integration testing