Refactoring: Migrate maintenance message browser test to Capybara and make it more robust.
This commit is contained in:
parent
355b54654d
commit
f15226301a
4 changed files with 148 additions and 80 deletions
|
@ -66,7 +66,6 @@ if [ "$LEVEL" == '1' ]; then
|
||||||
rm test/browser/integration_test.rb
|
rm test/browser/integration_test.rb
|
||||||
rm test/browser/keyboard_shortcuts_test.rb
|
rm test/browser/keyboard_shortcuts_test.rb
|
||||||
# test/browser/maintenance_app_version_test.rb
|
# test/browser/maintenance_app_version_test.rb
|
||||||
# test/browser/maintenance_login_message_test.rb
|
|
||||||
# test/browser/maintenance_mode_test.rb
|
# test/browser/maintenance_mode_test.rb
|
||||||
# test/browser/maintenance_session_message_test.rb
|
# test/browser/maintenance_session_message_test.rb
|
||||||
# test/browser/manage_test.rb
|
# test/browser/manage_test.rb
|
||||||
|
@ -147,7 +146,6 @@ elif [ "$LEVEL" == '2' ]; then
|
||||||
rm test/browser/integration_test.rb
|
rm test/browser/integration_test.rb
|
||||||
rm test/browser/keyboard_shortcuts_test.rb
|
rm test/browser/keyboard_shortcuts_test.rb
|
||||||
rm test/browser/maintenance_app_version_test.rb
|
rm test/browser/maintenance_app_version_test.rb
|
||||||
rm test/browser/maintenance_login_message_test.rb
|
|
||||||
rm test/browser/maintenance_mode_test.rb
|
rm test/browser/maintenance_mode_test.rb
|
||||||
rm test/browser/maintenance_session_message_test.rb
|
rm test/browser/maintenance_session_message_test.rb
|
||||||
rm test/browser/manage_test.rb
|
rm test/browser/manage_test.rb
|
||||||
|
@ -228,7 +226,6 @@ elif [ "$LEVEL" == '3' ]; then
|
||||||
rm test/browser/integration_test.rb
|
rm test/browser/integration_test.rb
|
||||||
rm test/browser/keyboard_shortcuts_test.rb
|
rm test/browser/keyboard_shortcuts_test.rb
|
||||||
rm test/browser/maintenance_app_version_test.rb
|
rm test/browser/maintenance_app_version_test.rb
|
||||||
rm test/browser/maintenance_login_message_test.rb
|
|
||||||
rm test/browser/maintenance_mode_test.rb
|
rm test/browser/maintenance_mode_test.rb
|
||||||
rm test/browser/maintenance_session_message_test.rb
|
rm test/browser/maintenance_session_message_test.rb
|
||||||
rm test/browser/manage_test.rb
|
rm test/browser/manage_test.rb
|
||||||
|
@ -309,7 +306,6 @@ elif [ "$LEVEL" == '4' ]; then
|
||||||
rm test/browser/integration_test.rb
|
rm test/browser/integration_test.rb
|
||||||
rm test/browser/keyboard_shortcuts_test.rb
|
rm test/browser/keyboard_shortcuts_test.rb
|
||||||
rm test/browser/maintenance_app_version_test.rb
|
rm test/browser/maintenance_app_version_test.rb
|
||||||
rm test/browser/maintenance_login_message_test.rb
|
|
||||||
rm test/browser/maintenance_mode_test.rb
|
rm test/browser/maintenance_mode_test.rb
|
||||||
rm test/browser/maintenance_session_message_test.rb
|
rm test/browser/maintenance_session_message_test.rb
|
||||||
rm test/browser/manage_test.rb
|
rm test/browser/manage_test.rb
|
||||||
|
@ -389,7 +385,6 @@ elif [ "$LEVEL" == '5' ]; then
|
||||||
rm test/browser/integration_test.rb
|
rm test/browser/integration_test.rb
|
||||||
rm test/browser/keyboard_shortcuts_test.rb
|
rm test/browser/keyboard_shortcuts_test.rb
|
||||||
rm test/browser/maintenance_app_version_test.rb
|
rm test/browser/maintenance_app_version_test.rb
|
||||||
rm test/browser/maintenance_login_message_test.rb
|
|
||||||
rm test/browser/maintenance_mode_test.rb
|
rm test/browser/maintenance_mode_test.rb
|
||||||
rm test/browser/maintenance_session_message_test.rb
|
rm test/browser/maintenance_session_message_test.rb
|
||||||
rm test/browser/manage_test.rb
|
rm test/browser/manage_test.rb
|
||||||
|
@ -472,7 +467,6 @@ elif [ "$LEVEL" == '6' ]; then
|
||||||
# test/browser/integration_test.rb
|
# test/browser/integration_test.rb
|
||||||
# test/browser/keyboard_shortcuts_test.rb
|
# test/browser/keyboard_shortcuts_test.rb
|
||||||
rm test/browser/maintenance_app_version_test.rb
|
rm test/browser/maintenance_app_version_test.rb
|
||||||
rm test/browser/maintenance_login_message_test.rb
|
|
||||||
rm test/browser/maintenance_mode_test.rb
|
rm test/browser/maintenance_mode_test.rb
|
||||||
rm test/browser/maintenance_session_message_test.rb
|
rm test/browser/maintenance_session_message_test.rb
|
||||||
rm test/browser/manage_test.rb
|
rm test/browser/manage_test.rb
|
||||||
|
|
62
spec/system/admin/maintenance/login_message_spec.rb
Normal file
62
spec/system/admin/maintenance/login_message_spec.rb
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe 'Admin > Maintenance login message', type: :system do
|
||||||
|
it 'switch maintenance_login on' do
|
||||||
|
Setting.set 'maintenance_login', false
|
||||||
|
|
||||||
|
open_page
|
||||||
|
|
||||||
|
find('.js-loginSetting label').click
|
||||||
|
find('.js-loginSetting input', visible: :all).check # required for chrome
|
||||||
|
|
||||||
|
wait(10).until { expect(Setting.get('maintenance_login')).to be true }
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'switch maintenance_login off' do
|
||||||
|
Setting.set 'maintenance_login', true
|
||||||
|
|
||||||
|
open_page
|
||||||
|
|
||||||
|
find('.js-loginSetting label').click
|
||||||
|
find('.js-loginSetting input', visible: :all).uncheck # required for chrome
|
||||||
|
|
||||||
|
wait(10).until { expect(Setting.get('maintenance_login')).to be false }
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'shows current maintenance_login_message' do
|
||||||
|
message = "badum tssss #{rand(99_999)}"
|
||||||
|
|
||||||
|
Setting.set 'maintenance_login_message', message
|
||||||
|
|
||||||
|
open_page
|
||||||
|
|
||||||
|
expect(find('.js-loginPreview [data-name="message"]')).to have_text message
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'saves new maintenance_login_message' do
|
||||||
|
message_prefix = 'badum'
|
||||||
|
message_suffix = "tssss#{rand(99_999)}"
|
||||||
|
|
||||||
|
Setting.set 'maintenance_login_message', message_prefix
|
||||||
|
|
||||||
|
open_page
|
||||||
|
|
||||||
|
within(:active_content) do
|
||||||
|
elem = find('#maintenance-message.hero-unit')
|
||||||
|
elem.click
|
||||||
|
elem.send_keys message_suffix
|
||||||
|
elem.execute_script "$(this).trigger('blur')" # required for chrome
|
||||||
|
end
|
||||||
|
|
||||||
|
find('#global-search').click # unfocus
|
||||||
|
|
||||||
|
wait(10).until { expect(Setting.get('maintenance_login_message')).to eq "#{message_prefix}#{message_suffix}" }
|
||||||
|
end
|
||||||
|
|
||||||
|
def open_page
|
||||||
|
refresh # make sure initial Setting are applied
|
||||||
|
|
||||||
|
click(:manage)
|
||||||
|
click(:href, '#system/maintenance')
|
||||||
|
end
|
||||||
|
end
|
86
spec/system/login/message_spec.rb
Normal file
86
spec/system/login/message_spec.rb
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe 'Login Message', type: :system, authenticated: false do
|
||||||
|
context 'with maintenance_login_message' do
|
||||||
|
let(:message) { "badum tssss #{rand(99_999)}" }
|
||||||
|
let(:alt_message) { 'lorem ipsum' }
|
||||||
|
|
||||||
|
before { Setting.set 'maintenance_login_message', message }
|
||||||
|
|
||||||
|
context 'with maintenance_login' do
|
||||||
|
before { Setting.set 'maintenance_login', true }
|
||||||
|
|
||||||
|
it 'shows message' do
|
||||||
|
open_login_page
|
||||||
|
|
||||||
|
expect(page).to have_text(message)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'hides message on the go' do
|
||||||
|
open_login_page
|
||||||
|
|
||||||
|
Setting.set 'maintenance_login', false
|
||||||
|
|
||||||
|
wait(10).until_disappears { find '.js-maintenanceLogin', text: message }
|
||||||
|
|
||||||
|
expect(page).not_to have_css('.js-maintenanceLogin')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'changes message text on the go' do
|
||||||
|
open_login_page
|
||||||
|
|
||||||
|
Setting.set 'maintenance_login_message', alt_message
|
||||||
|
|
||||||
|
wait(10).until_exists { find '.js-maintenanceLogin', text: alt_message }
|
||||||
|
|
||||||
|
expect(page).to have_css('.js-maintenanceLogin', text: alt_message)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'without maintenance_login' do
|
||||||
|
before { Setting.set 'maintenance_login', false }
|
||||||
|
|
||||||
|
it 'does not show message' do
|
||||||
|
open_login_page
|
||||||
|
|
||||||
|
expect(page).not_to have_text(message)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'shows message on the go' do
|
||||||
|
open_login_page
|
||||||
|
|
||||||
|
Setting.set 'maintenance_login', true
|
||||||
|
|
||||||
|
wait(10).until_exists { find '.js-maintenanceLogin', text: message }
|
||||||
|
|
||||||
|
expect(page).to have_css('.js-maintenanceLogin', text: message)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def open_login_page
|
||||||
|
timestamp = Time.zone.now.to_i
|
||||||
|
|
||||||
|
visit '/'
|
||||||
|
|
||||||
|
wait(5).until do
|
||||||
|
pinged_since?(timestamp) && connection_open?
|
||||||
|
end
|
||||||
|
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
def pinged_since?(timestamp)
|
||||||
|
Sessions
|
||||||
|
.list
|
||||||
|
.values
|
||||||
|
.map { |elem| elem.dig(:meta, :last_ping) }
|
||||||
|
.any? { |elem| elem >= timestamp }
|
||||||
|
end
|
||||||
|
|
||||||
|
def connection_open?
|
||||||
|
page
|
||||||
|
.evaluate_script('App.WebSocket.channel()')
|
||||||
|
.present?
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,74 +0,0 @@
|
||||||
require 'browser_test_helper'
|
|
||||||
|
|
||||||
class MaintenanceLoginMessageTest < TestCase
|
|
||||||
|
|
||||||
def test_login_message
|
|
||||||
browser1 = browser_instance
|
|
||||||
login(
|
|
||||||
browser: browser1,
|
|
||||||
username: 'master@example.com',
|
|
||||||
password: 'test',
|
|
||||||
url: browser_url,
|
|
||||||
)
|
|
||||||
|
|
||||||
click(
|
|
||||||
browser: browser1,
|
|
||||||
css: 'a[href="#manage"]',
|
|
||||||
)
|
|
||||||
click(
|
|
||||||
browser: browser1,
|
|
||||||
css: 'a[href="#system/maintenance"]',
|
|
||||||
)
|
|
||||||
|
|
||||||
string = rand(99_999_999_999_999_999).to_s
|
|
||||||
message = "test <b>#{string}</b>"
|
|
||||||
set(
|
|
||||||
browser: browser1,
|
|
||||||
css: '.content.active .js-loginPreview [data-name="message"]',
|
|
||||||
value: message,
|
|
||||||
)
|
|
||||||
click(
|
|
||||||
browser: browser1,
|
|
||||||
css: '#global-search',
|
|
||||||
)
|
|
||||||
|
|
||||||
browser2 = browser_instance
|
|
||||||
location(
|
|
||||||
browser: browser2,
|
|
||||||
url: browser_url,
|
|
||||||
)
|
|
||||||
watch_for(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.login',
|
|
||||||
)
|
|
||||||
exists_not(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.js-maintenanceLogin',
|
|
||||||
)
|
|
||||||
|
|
||||||
switch(
|
|
||||||
browser: browser1,
|
|
||||||
css: '.content.active .js-loginSetting',
|
|
||||||
type: 'on',
|
|
||||||
)
|
|
||||||
|
|
||||||
watch_for(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.js-maintenanceLogin',
|
|
||||||
value: message
|
|
||||||
)
|
|
||||||
|
|
||||||
switch(
|
|
||||||
browser: browser1,
|
|
||||||
css: '.content.active .js-loginSetting',
|
|
||||||
type: 'off',
|
|
||||||
)
|
|
||||||
|
|
||||||
watch_for_disappear(
|
|
||||||
browser: browser2,
|
|
||||||
css: '.js-maintenanceLogin',
|
|
||||||
timeout: 30,
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
Loading…
Reference in a new issue