test/clockwork_test.rb in clockwork-0.1.1 vs test/clockwork_test.rb in clockwork-0.2.0
- old
+ new
@@ -1,11 +1,18 @@
require File.dirname(__FILE__) + '/../lib/clockwork'
require 'contest'
+require 'mocha'
+module Clockwork
+ def log(msg)
+ end
+end
+
class ClockworkTest < Test::Unit::TestCase
setup do
Clockwork.clear!
+ Clockwork.handler { }
end
def assert_will_run(t)
assert_equal 1, Clockwork.tick(t).size
end
@@ -13,38 +20,75 @@
def assert_wont_run(t)
assert_equal 0, Clockwork.tick(t).size
end
test "once a minute" do
- Clockwork.every('1m') { }
+ Clockwork.every(1.minute, 'myjob')
assert_will_run(t=Time.now)
assert_wont_run(t+30)
assert_will_run(t+60)
end
test "every three minutes" do
- Clockwork.every('3m') { }
+ Clockwork.every(3.minutes, 'myjob')
assert_will_run(t=Time.now)
assert_wont_run(t+2*60)
assert_will_run(t+3*60)
end
test "once an hour" do
- Clockwork.every('1h') { }
+ Clockwork.every(1.hour, 'myjob')
assert_will_run(t=Time.now)
assert_wont_run(t+30*60)
assert_will_run(t+60*60)
end
test "once a day at 16:20" do
- Clockwork.every('1d', :at => '16:20') { }
+ Clockwork.every(1.day, 'myjob', :at => '16:20')
assert_wont_run Time.parse('jan 1 2010 16:19:59')
assert_will_run Time.parse('jan 1 2010 16:20:00')
assert_wont_run Time.parse('jan 1 2010 16:20:01')
assert_wont_run Time.parse('jan 2 2010 16:19:59')
assert_will_run Time.parse('jan 2 2010 16:20:00')
+ end
+
+ test "aborts when no handler defined" do
+ Clockwork.clear!
+ assert_raise(Clockwork::NoHandlerDefined) do
+ Clockwork.every(1.minute, 'myjob')
+ end
+ end
+
+ test "general handler" do
+ $set_me = 0
+ Clockwork.handler { $set_me = 1 }
+ Clockwork.every(1.minute, 'myjob')
+ Clockwork.tick(Time.now)
+ assert_equal 1, $set_me
+ end
+
+ test "event-specific handler" do
+ $set_me = 0
+ Clockwork.every(1.minute, 'myjob') { $set_me = 2 }
+ Clockwork.tick(Time.now)
+ assert_equal 2, $set_me
+ end
+
+ test "exceptions are trapped and logged" do
+ Clockwork.handler { raise 'boom' }
+ event = Clockwork.every(1.minute, 'myjob')
+ event.expects(:log_error)
+ assert_nothing_raised { Clockwork.tick(Time.now) }
+ end
+
+ test "exceptions still set the last timestamp to avoid spastic error loops" do
+ Clockwork.handler { raise 'boom' }
+ event = Clockwork.every(1.minute, 'myjob')
+ event.stubs(:log_error)
+ Clockwork.tick(t = Time.now)
+ assert_equal t, event.last
end
end