From ec3c3d2bd732e1eac9a75629e4a474bc55abb574 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mesut=20G=C3=BCne=C5=9F?= Date: Fri, 1 Feb 2019 14:38:07 +0000 Subject: [PATCH] adding a spec for issues/310 --- .../_account_and_limit.html.haml | 4 +- .../admin/application_settings/show.html.haml | 2 +- .../layouts/nav/sidebar/_admin.html.haml | 2 +- qa/qa.rb | 2 + qa/qa/page/admin/menu.rb | 9 +++ .../settings/component/account_and_limit.rb | 26 +++++++ qa/qa/page/admin/settings/general.rb | 23 ++++++ .../push_over_http_file_size_spec.rb | 70 +++++++++++++++++++ 8 files changed, 134 insertions(+), 4 deletions(-) create mode 100644 qa/qa/page/admin/settings/component/account_and_limit.rb create mode 100644 qa/qa/page/admin/settings/general.rb create mode 100644 qa/qa/specs/features/browser_ui/3_create/repository/push_over_http_file_size_spec.rb diff --git a/app/views/admin/application_settings/_account_and_limit.html.haml b/app/views/admin/application_settings/_account_and_limit.html.haml index 10bc3452d8b..65a24854583 100644 --- a/app/views/admin/application_settings/_account_and_limit.html.haml +++ b/app/views/admin/application_settings/_account_and_limit.html.haml @@ -15,7 +15,7 @@ = f.number_field :max_attachment_size, class: 'form-control' .form-group = f.label :receive_max_input_size, 'Maximum push size (MB)', class: 'label-light' - = f.number_field :receive_max_input_size, class: 'form-control' + = f.number_field :receive_max_input_size, class: 'form-control qa-receive-max-input-size-field' .form-group = f.label :session_expire_delay, 'Session duration (minutes)', class: 'label-light' = f.number_field :session_expire_delay, class: 'form-control' @@ -46,4 +46,4 @@ = f.label :user_show_add_ssh_key_message, class: 'form-check-label' do Inform users without uploaded SSH keys that they can't push over SSH until one is added - = f.submit 'Save changes', class: 'btn btn-success' + = f.submit 'Save changes', class: 'btn btn-success qa-save-changes-button' diff --git a/app/views/admin/application_settings/show.html.haml b/app/views/admin/application_settings/show.html.haml index 65e4723afe6..fc9dd29b8ca 100644 --- a/app/views/admin/application_settings/show.html.haml +++ b/app/views/admin/application_settings/show.html.haml @@ -13,7 +13,7 @@ .settings-content = render 'visibility_and_access' -%section.settings.as-account-limit.no-animate#js-account-settings{ class: ('expanded' if expanded_by_default?) } +%section.settings.qa-account-and-limit-settings.as-account-limit.no-animate#js-account-settings{ class: ('expanded' if expanded_by_default?) } .settings-header %h4 = _('Account and limit') diff --git a/app/views/layouts/nav/sidebar/_admin.html.haml b/app/views/layouts/nav/sidebar/_admin.html.haml index 5f15ba87729..2fdd65f639b 100644 --- a/app/views/layouts/nav/sidebar/_admin.html.haml +++ b/app/views/layouts/nav/sidebar/_admin.html.haml @@ -207,7 +207,7 @@ = _('Settings') %li.divider.fly-out-top-item = nav_link(path: 'application_settings#show') do - = link_to admin_application_settings_path, title: _('General') do + = link_to admin_application_settings_path, title: _('General'), class: 'qa-admin-settings-general-item' do %span = _('General') = nav_link(path: 'application_settings#integrations') do diff --git a/qa/qa.rb b/qa/qa.rb index c851524bb75..8c85513198b 100644 --- a/qa/qa.rb +++ b/qa/qa.rb @@ -274,9 +274,11 @@ module QA module Settings autoload :Repository, 'qa/page/admin/settings/repository' + autoload :General, 'qa/page/admin/settings/general' module Component autoload :RepositoryStorage, 'qa/page/admin/settings/component/repository_storage' + autoload :AccountAndLimit, 'qa/page/admin/settings/component/account_and_limit' end end end diff --git a/qa/qa/page/admin/menu.rb b/qa/qa/page/admin/menu.rb index e8c7d274966..25564f2dc6e 100644 --- a/qa/qa/page/admin/menu.rb +++ b/qa/qa/page/admin/menu.rb @@ -9,6 +9,7 @@ module QA element :admin_sidebar_submenu element :admin_settings_item element :admin_settings_repository_item + element :admin_settings_general_item end def go_to_repository_settings @@ -19,6 +20,14 @@ module QA end end + def go_to_general_settings + hover_settings do + within_submenu do + click_element :admin_settings_general_item + end + end + end + private def hover_settings diff --git a/qa/qa/page/admin/settings/component/account_and_limit.rb b/qa/qa/page/admin/settings/component/account_and_limit.rb new file mode 100644 index 00000000000..a61c8cc77cd --- /dev/null +++ b/qa/qa/page/admin/settings/component/account_and_limit.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +module QA + module Page + module Admin + module Settings + module Component + class AccountAndLimit < Page::Base + view 'app/views/admin/application_settings/_account_and_limit.html.haml' do + element :receive_max_input_size_field + element :save_changes_button + end + + def set_max_file_size(size) + fill_element :receive_max_input_size_field, size + end + + def save_settings + click_element :save_changes_button + end + end + end + end + end + end +end diff --git a/qa/qa/page/admin/settings/general.rb b/qa/qa/page/admin/settings/general.rb new file mode 100644 index 00000000000..93b290f7e03 --- /dev/null +++ b/qa/qa/page/admin/settings/general.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +module QA + module Page + module Admin + module Settings + class General < Page::Base + include QA::Page::Settings::Common + + view 'app/views/admin/application_settings/show.html.haml' do + element :account_and_limit_settings + end + + def expand_account_and_limit(&block) + expand_section(:account_and_limit_settings) do + Component::AccountAndLimit.perform(&block) + end + end + end + end + end + end +end diff --git a/qa/qa/specs/features/browser_ui/3_create/repository/push_over_http_file_size_spec.rb b/qa/qa/specs/features/browser_ui/3_create/repository/push_over_http_file_size_spec.rb new file mode 100644 index 00000000000..23ea55c2e61 --- /dev/null +++ b/qa/qa/specs/features/browser_ui/3_create/repository/push_over_http_file_size_spec.rb @@ -0,0 +1,70 @@ +# frozen_string_literal: true + +module QA + context 'Create' do + describe 'push after setting the file size limit via admin/application_settings' do + before(:all) do + push = Resource::Repository::ProjectPush.fabricate! do |p| + p.file_name = 'README.md' + p.file_content = '# This is a test project' + p.commit_message = 'Add README.md' + end + + @project = push.project + end + + before do + Runtime::Browser.visit(:gitlab, Page::Main::Login) + Page::Main::Login.perform(&:sign_in_using_credentials) + end + + after(:all) do + # need to set the default value after test + # default value for file size limit is empty + Runtime::Browser.visit(:gitlab, Page::Main::Login) + Page::Main::Login.perform(&:sign_in_using_credentials) + + set_file_size_limit('') + end + + it 'push successful when the file size is under the limit' do + set_file_size_limit(5) + expect(page).to have_content("Application settings saved successfully") + + push = push_new_file('oversize_file_1.bin') + expect(push.output).not_to have_content 'remote: fatal: pack exceeds maximum allowed size' + end + + it 'push fails when the file size is above the limit' do + set_file_size_limit(1) + expect(page).to have_content("Application settings saved successfully") + + push = push_new_file('oversize_file_2.bin') + expect(push.output).to have_content 'remote: fatal: pack exceeds maximum allowed size' + end + + def set_file_size_limit(limit) + Page::Main::Menu.perform(&:go_to_admin_area) + Page::Admin::Menu.perform(&:go_to_general_settings) + + Page::Admin::Settings::General.perform do |setting| + setting.expand_account_and_limit do |page| + page.set_max_file_size(limit) + page.save_settings + end + end + end + + def push_new_file(file_name) + @project.visit! + + Resource::Repository::ProjectPush.fabricate! do |p| + p.project = @project + p.file_name = file_name + p.file_content = SecureRandom.random_bytes(2000000) + p.commit_message = 'Adding a new file' + end + end + end + end +end