diff options
Diffstat (limited to 'test/tc_mauve_calendar_interface.rb')
-rw-r--r-- | test/tc_mauve_calendar_interface.rb | 155 |
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 + + + + + |