time_helper.rb 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. # Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
  2. module TimeHelperCache
  3. def travel(...)
  4. super.tap do
  5. Rails.cache.clear
  6. end
  7. end
  8. def travel_to(...)
  9. super.tap do
  10. Rails.cache.clear
  11. end
  12. end
  13. def freeze_time(...)
  14. super.tap do
  15. Rails.cache.clear
  16. end
  17. end
  18. def travel_back(...)
  19. super.tap do
  20. Rails.cache.clear
  21. end
  22. end
  23. # Similar to #travel_to, but fakes browser (frontend) time.
  24. # Useful when testing time that is generated in frontend
  25. def browser_travel_to(time)
  26. execute_script <<~JAVASCRIPT
  27. // load sinon if it's not already loaded
  28. if(typeof sinon == 'undefined') {
  29. var script = document.createElement( 'script' );
  30. script.type = 'text/javascript';
  31. script.src = '/assets/tests/sinon-9.2.4.js';
  32. $('head').append( script );
  33. }
  34. window.clock = sinon.useFakeTimers({now: new Date(#{time.to_i * 1_000}), toFake: ['Date']})
  35. JAVASCRIPT
  36. end
  37. end
  38. RSpec.configure do |config|
  39. # make usage of time travel helpers possible
  40. config.include ActiveSupport::Testing::TimeHelpers
  41. config.include TimeHelperCache
  42. end