From 80e76fc43daaf56a39cdf987f6400adf9547bc02 Mon Sep 17 00:00:00 2001 From: Bola Ahmed Buari Date: Thu, 11 Nov 2021 07:47:39 +0300 Subject: [PATCH] Maintenance: Port old integration tests to capybara. --- script/build/test_slice_tests.sh | 6 - .../system/integration/clearbit_spec.rb | 88 +++++ spec/system/system/integration/icinga_spec.rb | 70 ++++ .../system/system/integration/sipgate_spec.rb | 95 +++++ spec/system/system/integration/slack_spec.rb | 66 ++++ test/browser/integration_test.rb | 340 ------------------ 6 files changed, 319 insertions(+), 346 deletions(-) create mode 100644 spec/system/system/integration/clearbit_spec.rb create mode 100644 spec/system/system/integration/icinga_spec.rb create mode 100644 spec/system/system/integration/sipgate_spec.rb create mode 100644 spec/system/system/integration/slack_spec.rb delete mode 100644 test/browser/integration_test.rb diff --git a/script/build/test_slice_tests.sh b/script/build/test_slice_tests.sh index b40e9d2ed..b72e3cca8 100755 --- a/script/build/test_slice_tests.sh +++ b/script/build/test_slice_tests.sh @@ -45,7 +45,6 @@ if [ "$LEVEL" == '1' ]; then rm test/browser/agent_user_profile_test.rb rm test/browser/customer_ticket_create_test.rb rm test/browser/first_steps_test.rb - rm test/browser/integration_test.rb rm test/browser/keyboard_shortcuts_test.rb # test/browser/manage_test.rb # test/browser/swich_to_user_test.rb @@ -94,7 +93,6 @@ elif [ "$LEVEL" == '2' ]; then rm test/browser/agent_user_profile_test.rb rm test/browser/customer_ticket_create_test.rb rm test/browser/first_steps_test.rb - rm test/browser/integration_test.rb rm test/browser/keyboard_shortcuts_test.rb rm test/browser/manage_test.rb rm test/browser/taskbar_session_test.rb @@ -142,7 +140,6 @@ elif [ "$LEVEL" == '3' ]; then rm test/browser/agent_user_profile_test.rb rm test/browser/customer_ticket_create_test.rb rm test/browser/first_steps_test.rb - rm test/browser/integration_test.rb rm test/browser/keyboard_shortcuts_test.rb rm test/browser/manage_test.rb rm test/browser/taskbar_session_test.rb @@ -190,7 +187,6 @@ elif [ "$LEVEL" == '4' ]; then rm test/browser/agent_user_profile_test.rb # test/browser/customer_ticket_create_test.rb rm test/browser/first_steps_test.rb - rm test/browser/integration_test.rb rm test/browser/keyboard_shortcuts_test.rb rm test/browser/manage_test.rb rm test/browser/taskbar_session_test.rb @@ -237,7 +233,6 @@ elif [ "$LEVEL" == '5' ]; then # test/browser/agent_user_profile_test.rb rm test/browser/customer_ticket_create_test.rb rm test/browser/first_steps_test.rb - rm test/browser/integration_test.rb rm test/browser/keyboard_shortcuts_test.rb rm test/browser/manage_test.rb rm test/browser/taskbar_session_test.rb @@ -287,7 +282,6 @@ elif [ "$LEVEL" == '6' ]; then rm test/browser/agent_user_profile_test.rb rm test/browser/customer_ticket_create_test.rb # test/browser/first_steps_test.rb - # test/browser/integration_test.rb # test/browser/keyboard_shortcuts_test.rb rm test/browser/manage_test.rb rm test/browser/taskbar_session_test.rb diff --git a/spec/system/system/integration/clearbit_spec.rb b/spec/system/system/integration/clearbit_spec.rb new file mode 100644 index 000000000..c12b2acf1 --- /dev/null +++ b/spec/system/system/integration/clearbit_spec.rb @@ -0,0 +1,88 @@ +# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/ + +require 'rails_helper' + +RSpec.describe 'Manage > Integration > Clearbit', type: :system do + let(:api_key) { 'some_api_key' } + let(:source) { 'source1' } + let(:destination) { 'destination1' } + + before do + visit 'system/integration/clearbit' + + # enable clearbit + check 'setting-switch', { allow_label_click: true } + end + + context 'for clearbit config' do + before do + within :active_content, '.main' do + fill_in 'api_key', with: api_key + + within '.js-userSync .js-new' do + fill_in 'source', with: source + fill_in 'destination', with: destination + click '.js-add' + end + + click_button + end + end + + shared_examples 'showing set config' do + it 'shows the set api_key' do + within :active_content, '.main' do + expect(page).to have_field('api_key', with: api_key) + end + end + + it 'shows the set source' do + within :active_content, '.main .js-userSync' do + expect(page).to have_field('source', with: source) + end + end + + it 'shows the set destination' do + within :active_content, '.main .js-userSync' do + expect(page).to have_field('destination', with: destination) + end + end + end + + context 'when added' do + it_behaves_like 'showing set config' + end + + context 'when page is re-navigated back to integration page' do + before do + visit 'dashboard' + visit 'system/integration/clearbit' + end + + it_behaves_like 'showing set config' + end + + context 'when page is reloaded' do + before { refresh } + + it_behaves_like 'showing set config' + end + + context 'when disabled with changed config' do + before do + # disable clearbit + uncheck 'setting-switch', { allow_label_click: true } + end + + let(:api_key) { '-empty-' } + + it_behaves_like 'showing set config' + + it 'does not have the old api key' do + within :active_content, '.main' do + expect(page).to have_no_field('api_key', with: 'some_api_key') + end + end + end + end +end diff --git a/spec/system/system/integration/icinga_spec.rb b/spec/system/system/integration/icinga_spec.rb new file mode 100644 index 000000000..dc438bf59 --- /dev/null +++ b/spec/system/system/integration/icinga_spec.rb @@ -0,0 +1,70 @@ +# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/ + +require 'rails_helper' + +RSpec.describe 'Manage > Integration > Icinga', type: :system do + let(:icinga_sender) { 'some@othersender.com' } + let(:icinga_auto_close) { 'no' } + + before do + visit 'system/integration/icinga' + + # enable icinga + check 'setting-switch', { allow_label_click: true } + end + + context 'for icinga config' do + before do + within :active_content, '.main' do + fill_in 'icinga_sender', with: icinga_sender + select icinga_auto_close, from: 'icinga_auto_close' + click_button + end + end + + shared_examples 'showing set config' do + it 'shows the set icinga_sender' do + within :active_content, '.main' do + expect(page).to have_field('icinga_sender', with: icinga_sender) + end + end + + it 'shows the set icinga_auto_close' do + within :active_content, '.main' do + expect(page).to have_field('icinga_auto_close', type: 'select', text: icinga_auto_close) + end + end + end + + context 'when added' do + it_behaves_like 'showing set config' + end + + context 'when page is re-navigated back to integration page' do + before do + visit 'dashboard' + visit 'system/integration/icinga' + end + + it_behaves_like 'showing set config' + end + + context 'when page is reloaded' do + before { refresh } + + it_behaves_like 'showing set config' + end + + context 'when disabled with changed config' do + before do + # disable icinga + uncheck 'setting-switch', { allow_label_click: true } + end + + let(:icinga_sender) { 'icinga@monitoring.example.com' } + let(:icinga_auto_close) { 'yes' } + + it_behaves_like 'showing set config' + end + end +end diff --git a/spec/system/system/integration/sipgate_spec.rb b/spec/system/system/integration/sipgate_spec.rb new file mode 100644 index 000000000..3cd0a524b --- /dev/null +++ b/spec/system/system/integration/sipgate_spec.rb @@ -0,0 +1,95 @@ +# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/ + +require 'rails_helper' + +RSpec.describe 'Manage > Integration > sipgate.io', type: :system do + let(:caller_id) { '0411234567' } + let(:note) { 'block spam caller id' } + + before do + visit 'system/integration/sipgate' + + # enable sipgate + check 'setting-switch', { allow_label_click: true } + end + + context 'for Blocked caller ids based on sender caller id' do + before do + within :active_content, '.main .js-inboundBlockCallerId' do + fill_in 'caller_id', with: caller_id + fill_in 'note', with: note + click '.js-add' + end + + click_button + end + + shared_examples 'showing added caller id details' do + it 'shows the blocked caller id' do + within :active_content, '.main .js-inboundBlockCallerId' do + expect(page).to have_field('caller_id', with: caller_id) + end + end + + it 'shows the blocked caller id note' do + within :active_content, '.main .js-inboundBlockCallerId' do + expect(page).to have_field('note', with: note) + end + end + end + + context 'when added' do + it_behaves_like 'showing added caller id details' + end + + context 'when page is re-navigated back to integration page' do + before do + visit 'dashboard' + visit 'system/integration/sipgate' + end + + it_behaves_like 'showing added caller id details' + end + + context 'when page is reloaded' do + before { refresh } + + it_behaves_like 'showing added caller id details' + end + + context 'when removed' do + before do + within :active_content, '.main .js-inboundBlockCallerId' do + click '.js-remove' + end + + click_button + end + + shared_examples 'not showing removed caller id details' do + it 'does not show the blocked caller id' do + within :active_content, '.main .js-inboundBlockCallerId' do + expect(page).to have_no_field('caller_id', with: caller_id) + end + end + + it 'does not show the blocked caller id note' do + within :active_content, '.main .js-inboundBlockCallerId' do + expect(page).to have_no_field('note', with: note) + end + end + end + + it_behaves_like 'not showing removed caller id details' + + context 'when page is re-navigated back to integration page' do + before do + visit 'dashboard' + visit 'system/integration/sipgate' + end + + it_behaves_like 'not showing removed caller id details' + end + end + end +end diff --git a/spec/system/system/integration/slack_spec.rb b/spec/system/system/integration/slack_spec.rb new file mode 100644 index 000000000..bb02c58c5 --- /dev/null +++ b/spec/system/system/integration/slack_spec.rb @@ -0,0 +1,66 @@ +# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/ + +require 'rails_helper' + +RSpec.describe 'Manage > Integration > Slack', type: :system do + let(:group_ids) { 'Users' } + let(:webhook) { 'http://some_url/webhook/123' } + let(:username) { 'someuser' } + + before do + visit 'system/integration/slack' + + # enable slack + check 'setting-switch', { allow_label_click: true } + end + + context 'for slack config' do + before do + within :active_content, '.main' do + select group_ids, from: 'group_ids' + fill_in 'webhook', with: webhook + fill_in 'username', with: username + click_button + end + end + + shared_examples 'showing set config' do + it 'shows the set group_ids' do + within :active_content, '.main' do + expect(page).to have_field('group_ids', type: 'select', text: group_ids) + end + end + + it 'shows the set webhook' do + within :active_content, '.main' do + expect(page).to have_field('webhook', with: webhook) + end + end + + it 'shows the set username' do + within :active_content, '.main' do + expect(page).to have_field('username', with: username) + end + end + end + + context 'when added' do + it_behaves_like 'showing set config' + end + + context 'when page is re-navigated back to integration page' do + before do + visit 'dashboard' + visit 'system/integration/slack' + end + + it_behaves_like 'showing set config' + end + + context 'when page is reloaded' do + before { refresh } + + it_behaves_like 'showing set config' + end + end +end diff --git a/test/browser/integration_test.rb b/test/browser/integration_test.rb deleted file mode 100644 index 5b5da02b7..000000000 --- a/test/browser/integration_test.rb +++ /dev/null @@ -1,340 +0,0 @@ -# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/ - -require 'browser_test_helper' - -class IntegrationTest < TestCase - - def test_sipgate - @browser = browser_instance - login( - username: 'admin@example.com', - password: 'test', - url: browser_url, - ) - tasks_close_all - - # change settings - click(css: 'a[href="#manage"]') - click(css: 'a[href="#system/integration"]') - click(css: 'a[href="#system/integration/sipgate"]') - sleep 2 - switch( - css: '.content.active .main .js-switch', - type: 'on', - ) - set( - css: '.content.active .main .js-inboundBlockCallerId input[name=caller_id]', - value: '041 1234567', - ) - set( - css: '.content.active .main .js-inboundBlockCallerId input[name=note]', - value: 'block spam caller id', - ) - click(css: '.content.active .main .js-inboundBlockCallerId .js-add') - click(css: '.content.active .main .js-submit') - - exists( - css: '.content.active .main .js-inboundBlockCallerId [value="0411234567"]', - ) - exists( - css: '.content.active .main .js-inboundBlockCallerId [value="block spam caller id"]', - ) - - click(css: 'a[href="#dashboard"]') - click(css: 'a[href="#manage"]') - click(css: 'a[href="#system/integration"]') - click(css: 'a[href="#system/integration/sipgate"]') - - exists( - css: '.content.active .main .js-inboundBlockCallerId [value="0411234567"]', - ) - exists( - css: '.content.active .main .js-inboundBlockCallerId [value="block spam caller id"]', - ) - - reload - exists( - css: '.content.active .main .js-inboundBlockCallerId [value="0411234567"]', - ) - exists( - css: '.content.active .main .js-inboundBlockCallerId [value="block spam caller id"]', - ) - click(css: '.content.active .main .js-inboundBlockCallerId .js-remove') - click(css: '.content.active .main .js-submit') - sleep 6 - switch( - css: '.content.active .main .js-switch', - type: 'off', - ) - - reload - exists_not( - css: '.content.active .main .js-inboundBlockCallerId [value="0411234567"]', - ) - exists_not( - css: '.content.active .main .js-inboundBlockCallerId [value="block spam caller id"]', - ) - end - - def test_slack - @browser = browser_instance - login( - username: 'admin@example.com', - password: 'test', - url: browser_url, - ) - tasks_close_all - - # change settings - click(css: 'a[href="#manage"]') - click(css: 'a[href="#system/integration"]') - click(css: 'a[href="#system/integration/slack"]') - sleep 2 - switch( - css: '.content.active .main .js-switch', - type: 'on', - ) - click(css: '.content.active .main .checkbox-replacement') - select( - css: '.content.active .main select[name="group_ids"]', - value: 'Users', - ) - set( - css: '.content.active .main input[name="webhook"]', - value: 'http://some_url/webhook/123', - ) - set( - css: '.content.active .main input[name="username"]', - value: 'someuser', - ) - - click(css: '.content.active .main .js-submit') - - match( - css: '.content.active .main select[name="group_ids"]', - value: 'Users', - ) - match( - css: '.content.active .main input[name="webhook"]', - value: 'http://some_url/webhook/123', - ) - match( - css: '.content.active .main input[name="username"]', - value: 'someuser', - ) - - click(css: 'a[href="#dashboard"]') - click(css: 'a[href="#manage"]') - click(css: 'a[href="#system/integration"]') - click(css: 'a[href="#system/integration/slack"]') - - match( - css: '.content.active .main select[name="group_ids"]', - value: 'Users', - ) - match( - css: '.content.active .main input[name="webhook"]', - value: 'http://some_url/webhook/123', - ) - match( - css: '.content.active .main input[name="username"]', - value: 'someuser', - ) - - reload - - match( - css: '.content.active .main select[name="group_ids"]', - value: 'Users', - ) - match( - css: '.content.active .main input[name="webhook"]', - value: 'http://some_url/webhook/123', - ) - match( - css: '.content.active .main input[name="username"]', - value: 'someuser', - ) - - switch( - css: '.content.active .main .js-switch', - type: 'off', - ) - end - - def test_clearbit - @browser = browser_instance - login( - username: 'admin@example.com', - password: 'test', - url: browser_url, - ) - tasks_close_all - - # change settings - click(css: 'a[href="#manage"]') - click(css: 'a[href="#system/integration"]') - click(css: 'a[href="#system/integration/clearbit"]') - sleep 2 - switch( - css: '.content.active .main .js-switch', - type: 'on', - ) - set( - css: '.content.active .main input[name="api_key"]', - value: 'some_api_key', - ) - set( - css: '.content.active .main .js-userSync .js-new [name="source"]', - value: 'source1', - ) - set( - css: '.content.active .main .js-userSync .js-new [name="destination"]', - value: 'destination1', - ) - click(css: '.content.active .main .js-userSync .js-add') - click(css: '.content.active .main .js-submit') - - click(css: 'a[href="#dashboard"]') - click(css: 'a[href="#manage"]') - click(css: 'a[href="#system/integration"]') - click(css: 'a[href="#system/integration/clearbit"]') - - match( - css: '.content.active .main input[name="api_key"]', - value: 'some_api_key', - ) - exists( - css: '.content.active .main .js-userSync [value="source1"]', - ) - exists( - css: '.content.active .main .js-userSync [value="destination1"]', - ) - - reload - - match( - css: '.content.active .main input[name="api_key"]', - value: 'some_api_key', - ) - exists( - css: '.content.active .main .js-userSync [value="source1"]', - ) - exists( - css: '.content.active .main .js-userSync [value="destination1"]', - ) - - switch( - css: '.content.active .main .js-switch', - type: 'off', - ) - - set( - css: '.content.active .main input[name="api_key"]', - value: '-empty-', - ) - click(css: '.content.active .main .js-submit') - - reload - match_not( - css: '.content.active .main input[name="api_key"]', - value: 'some_api_key', - ) - match( - css: '.content.active .main input[name="api_key"]', - value: '-empty-', - ) - exists( - css: '.content.active .main .js-userSync [value="source1"]', - ) - exists( - css: '.content.active .main .js-userSync [value="destination1"]', - ) - end - - def test_icinga - @browser = browser_instance - login( - username: 'admin@example.com', - password: 'test', - url: browser_url, - ) - tasks_close_all - - # change settings - click(css: 'a[href="#manage"]') - click(css: 'a[href="#system/integration"]') - click(css: 'a[href="#system/integration/icinga"]') - sleep 2 - switch( - css: '.content.active .main .js-switch', - type: 'on', - ) - set( - css: '.content.active .main input[name="icinga_sender"]', - value: 'some@othersender.com', - ) - select( - css: '.content.active .main select[name="icinga_auto_close"]', - value: 'no', - ) - click(css: '.content.active .main .js-submit') - - match( - css: '.content.active .main input[name="icinga_sender"]', - value: 'some@othersender.com', - ) - match( - css: '.content.active .main select[name="icinga_auto_close"]', - value: 'no', - ) - - click(css: 'a[href="#dashboard"]') - click(css: 'a[href="#manage"]') - click(css: 'a[href="#system/integration"]') - click(css: 'a[href="#system/integration/icinga"]') - - match( - css: '.content.active .main input[name="icinga_sender"]', - value: 'some@othersender.com', - ) - match( - css: '.content.active .main select[name="icinga_auto_close"]', - value: 'no', - ) - - reload - - match( - css: '.content.active .main input[name="icinga_sender"]', - value: 'some@othersender.com', - ) - match( - css: '.content.active .main select[name="icinga_auto_close"]', - value: 'no', - ) - - switch( - css: '.content.active .main .js-switch', - type: 'off', - ) - set( - css: '.content.active .main input[name="icinga_sender"]', - value: 'icinga@monitoring.example.com', - ) - select( - css: '.content.active .main select[name="icinga_auto_close"]', - value: 'yes', - ) - click(css: '.content.active .main .js-submit') - - match( - css: '.content.active .main input[name="icinga_sender"]', - value: 'icinga@monitoring.example.com', - ) - match( - css: '.content.active .main select[name="icinga_auto_close"]', - value: 'yes', - ) - end -end