aboutsummaryrefslogtreecommitdiff
path: root/test/tc_mauve_calendar_interface.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/tc_mauve_calendar_interface.rb')
-rw-r--r--test/tc_mauve_calendar_interface.rb155
1 files changed, 155 insertions, 0 deletions
diff --git a/test/tc_mauve_calendar_interface.rb b/test/tc_mauve_calendar_interface.rb
new file mode 100644
index 0000000..ddf4039
--- /dev/null
+++ b/test/tc_mauve_calendar_interface.rb
@@ -0,0 +1,155 @@
+$:.unshift "../lib"
+
+require 'th_mauve'
+require 'mauve/calendar_interface'
+require 'mauve/configuration_builder'
+require 'mauve/configuration'
+require 'webmock'
+#
+# Ugh webmock is annoying.
+WebMock.allow_net_connect!
+
+class TcMauveCalendarInterface < Mauve::UnitTest
+
+ include WebMock::API
+ include Mauve
+
+ def setup
+ WebMock.disable_net_connect!
+ super
+ end
+
+ def teardown
+ WebMock.reset!
+ WebMock.allow_net_connect!
+ super
+ end
+
+ def test_get_attendees
+ attendees = %w(test1 test2)
+ stub_request(:get, "http://localhost/calendar/api/attendees/support_shift/2011-08-01T00:00:00").
+ to_return(:status => 200, :body => YAML.dump(attendees))
+
+ config =<<EOF
+bytemark_calendar_url "http://localhost/calendar"
+EOF
+
+ Configuration.current = ConfigurationBuilder.parse(config)
+
+ assert_equal(attendees, CalendarInterface.get_attendees("support_shift"))
+ end
+
+ def test_is_user_on_holiday?
+ attendees = %w(test1 test2)
+ stub_request(:get, "http://localhost/calendar/api/attendees/staff_holiday/2011-08-01T00:00:00").
+ to_return(:status => 200, :body => YAML.dump(attendees))
+
+
+ config =<<EOF
+bytemark_calendar_url "http://localhost/calendar"
+EOF
+
+ Configuration.current = ConfigurationBuilder.parse(config)
+
+ assert(CalendarInterface.is_user_on_holiday?("test1"))
+ assert(!CalendarInterface.is_user_on_holiday?("test3"))
+ end
+
+ def test_is_user_off_sick?
+ attendees = %w(test1 test2)
+ stub_request(:get, "http://localhost/calendar/api/attendees/sick_period/2011-08-01T00:00:00").
+ to_return(:status => 200, :body => YAML.dump(attendees))
+
+ config =<<EOF
+bytemark_calendar_url "http://localhost/calendar"
+EOF
+
+ Configuration.current = ConfigurationBuilder.parse(config)
+
+ assert(CalendarInterface.is_user_off_sick?("test1"))
+ assert(!CalendarInterface.is_user_off_sick?("test3"))
+ end
+
+ def test_do_get
+ url = "http://localhost/"
+
+ #
+ # This sets up two redirects, followed by the answer (below)
+ #
+ 2.times do |x|
+ next_url = url + "#{x}/"
+ stub_request(:get, url).
+ to_return(:status => 301, :body => nil, :headers => {:location => next_url})
+ url = next_url
+ end
+
+ #
+ # And finally the answer.
+ #
+ stub_request(:get, url).
+ to_return(:status => 200, :body => "OK!", :headers => {})
+
+ #
+ # Now do_get should return "OK!" when the maximum number of redirects is set to two.
+ #
+ result = nil
+ assert_nothing_raised{ result = CalendarInterface.__send__(:do_get, "http://localhost/", 2) }
+ assert_equal("OK!",result)
+
+ #
+ # do_get should return nil when the maximum number of redirects is set to two.
+ #
+ assert_nothing_raised{ result = CalendarInterface.__send__(:do_get, "http://localhost/", 1) }
+ assert_nil(result)
+
+ #
+ # Pop the warning about the redirect off the end of the log.
+ #
+ logger_pop
+ end
+
+ def test_do_get_with_cache
+ url = "http://localhost/"
+
+ #
+ # This stubs the request to give out the time
+ #
+ stub_request(:get, url).
+ to_return( lambda{ {:status => 200, :body => YAML.dump(Time.now), :headers => {}} } )
+
+ #
+ # This reponse should not be cached, the cache-until paramter is "now"
+ #
+ assert_equal(Time.now, CalendarInterface.__send__(:do_get_with_cache, url, Time.now))
+
+ #
+ # Since the last request wasn't cached, the next one should give back
+ # "now", and should be cached for the next 10 seconds.
+ #
+ Timecop.freeze(Time.now + 5)
+ assert_equal(Time.now, CalendarInterface.__send__(:do_get_with_cache, url, Time.now + 10))
+
+ #
+ # This should have been cached from the last query.
+ #
+ Timecop.freeze(Time.now + 5)
+ assert_equal(Time.now - 5, CalendarInterface.__send__(:do_get_with_cache, url, Time.now + 10))
+
+ #
+ # Finally, this should now have expired from the cache.
+ #
+ Timecop.freeze(Time.now + 5)
+ assert_equal(Time.now, CalendarInterface.__send__(:do_get_with_cache, url, Time.now + 10))
+
+ Timecop.freeze(Time.now + 50)
+ cache = CalendarInterface.__send__(:clean_cache)
+ assert(cache.empty?)
+ end
+
+
+end
+
+
+
+
+