message_spec.rb 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. require 'rails_helper'
  2. RSpec.describe 'Login Message', type: :system, authenticated: false do
  3. context 'with maintenance_login_message' do
  4. let(:message) { "badum tssss #{rand(99_999)}" }
  5. let(:alt_message) { 'lorem ipsum' }
  6. before { Setting.set 'maintenance_login_message', message }
  7. context 'with maintenance_login' do
  8. before { Setting.set 'maintenance_login', true }
  9. it 'shows message' do
  10. open_login_page
  11. expect(page).to have_text(message)
  12. end
  13. it 'hides message on the go' do
  14. open_login_page
  15. Setting.set 'maintenance_login', false
  16. wait(10).until_disappears { find '.js-maintenanceLogin', text: message }
  17. expect(page).not_to have_css('.js-maintenanceLogin')
  18. end
  19. it 'changes message text on the go' do
  20. open_login_page
  21. Setting.set 'maintenance_login_message', alt_message
  22. wait(10).until_exists { find '.js-maintenanceLogin', text: alt_message }
  23. expect(page).to have_css('.js-maintenanceLogin', text: alt_message)
  24. end
  25. end
  26. context 'without maintenance_login' do
  27. before { Setting.set 'maintenance_login', false }
  28. it 'does not show message' do
  29. open_login_page
  30. expect(page).not_to have_text(message)
  31. end
  32. it 'shows message on the go' do
  33. open_login_page
  34. Setting.set 'maintenance_login', true
  35. wait(10).until_exists { find '.js-maintenanceLogin', text: message }
  36. expect(page).to have_css('.js-maintenanceLogin', text: message)
  37. end
  38. end
  39. end
  40. def open_login_page
  41. timestamp = Time.zone.now.to_i
  42. visit '/'
  43. wait(8).until do
  44. pinged_since?(timestamp) && connection_open?
  45. end
  46. true
  47. end
  48. def pinged_since?(timestamp)
  49. Sessions
  50. .list
  51. .values
  52. .map { |elem| elem.dig(:meta, :last_ping) }
  53. .any? { |elem| elem >= timestamp }
  54. end
  55. def connection_open?
  56. page
  57. .evaluate_script('App.WebSocket.channel()')
  58. .present?
  59. end
  60. end