From f3c9b10b95749afb986d40cedbc8e790e2393504 Mon Sep 17 00:00:00 2001 From: "mahlon@laika.com" Date: Tue, 28 Oct 2014 21:29:25 +0000 Subject: [PATCH] Add additional recurring event tests. FossilOrigin-Name: acf33e24ffa73e09b61f5a7e1e8dadc4afed94dfe8b1d7eef7653f30e82090a1 --- .rvm.gems | 1 + .simplecov | 2 +- lib/symphony/metronome/scheduler.rb | 2 +- .../symphony/metronome/scheduledevent_spec.rb | 40 ++++++++++++++++++- 4 files changed, 41 insertions(+), 4 deletions(-) diff --git a/.rvm.gems b/.rvm.gems index 7a68602..becf5a8 100644 --- a/.rvm.gems +++ b/.rvm.gems @@ -4,3 +4,4 @@ sqlite3 -v1.3.9 symphony -v0.6.0 rspec -v3.0.0.beta2 timecop -v0.7.1 +simplecov -v0.9.1 diff --git a/.simplecov b/.simplecov index ffb1567..09dd59d 100644 --- a/.simplecov +++ b/.simplecov @@ -2,7 +2,7 @@ SimpleCov.start do add_filter 'spec' - add_filter 'integration' + add_filter 'migrations' add_group "Needing tests" do |file| file.covered_percent < 90 end diff --git a/lib/symphony/metronome/scheduler.rb b/lib/symphony/metronome/scheduler.rb index 4be3aa0..a1bc1a8 100644 --- a/lib/symphony/metronome/scheduler.rb +++ b/lib/symphony/metronome/scheduler.rb @@ -126,7 +126,7 @@ class Symphony::Metronome::Scheduler end - ### Process all event that have reached their runtime. + ### Process all events that have reached their runtime. ### def process_events now = Time.now diff --git a/spec/symphony/metronome/scheduledevent_spec.rb b/spec/symphony/metronome/scheduledevent_spec.rb index 568562f..8558658 100644 --- a/spec/symphony/metronome/scheduledevent_spec.rb +++ b/spec/symphony/metronome/scheduledevent_spec.rb @@ -107,11 +107,27 @@ describe Symphony::Metronome::ScheduledEvent do expect( ev.runtime ).to be >= time + 3600 + 30 end + it 'can reschedule itself into the future when recurring (recently run)' do + ds.insert( + :created => time, + :expression => 'every 30 seconds', + :options => "", + :lastrun => time - 12 + ) + ev = described_class.new( ds.first ) + + Timecop.travel( time ) do + ev.reset_runtime + end + + expect( ev.runtime ).to be >= time + 18 + end + it 'removes itself when firing if expired' do ds.insert( :created => time, :expression => 'every 30 seconds for an hour', - :options => "" + :options => "" ) ev = described_class.new( ds.first ) @@ -123,7 +139,7 @@ describe Symphony::Metronome::ScheduledEvent do ev = described_class.new( :created => time, :expression => 'every 30 seconds', - :options => '{"excitement_level":12}' + :options => '{"excitement_level":12}' ) res = 0 @@ -134,6 +150,26 @@ describe Symphony::Metronome::ScheduledEvent do expect( res ).to be( 12 ) end + it "won't re-fire recurring events if they already fired within their interval window" do + ds.insert( + :created => time, + :expression => 'every 30 seconds', + :options => '{"excitement_level":12}', + :lastrun => time - 12 + ) + ev = described_class.new( ds.first ) + + res = 0 + Timecop.travel( time ) do + rv = ev.fire do |opts, id| + res = opts['excitement_level'] + end + expect( rv ).to be_falsey + end + + expect( res ).to be( 0 ) + end + it 'randomizes start times if a splay is configured' do described_class.instance_variable_set( :@splay, 5 )