diff options
12 files changed, 147 insertions, 7 deletions
diff --git a/app/assets/javascripts/performance_bar/components/detailed_metric.vue b/app/assets/javascripts/performance_bar/components/detailed_metric.vue index c729198c1d3..19a81713964 100644 --- a/app/assets/javascripts/performance_bar/components/detailed_metric.vue +++ b/app/assets/javascripts/performance_bar/components/detailed_metric.vue @@ -38,7 +38,11 @@ export default { }; </script> <template> - <div v-if="currentRequest.details" :id="`peek-view-${metric}`" class="view"> + <div + v-if="currentRequest.details" + :id="`peek-view-${metric}`" + class="view qa-performance-bar-detailed-metric" + > <button :data-target="`#modal-peek-${metric}-details`" class="btn-blank btn-link bold" diff --git a/app/assets/javascripts/performance_bar/components/performance_bar_app.vue b/app/assets/javascripts/performance_bar/components/performance_bar_app.vue index 1ec2784cc5a..48515cf785c 100644 --- a/app/assets/javascripts/performance_bar/components/performance_bar_app.vue +++ b/app/assets/javascripts/performance_bar/components/performance_bar_app.vue @@ -92,7 +92,7 @@ export default { </script> <template> <div id="js-peek" :class="env"> - <div v-if="currentRequest" class="d-flex container-fluid container-limited"> + <div v-if="currentRequest" class="d-flex container-fluid container-limited qa-performance-bar"> <div id="peek-view-host" class="view"> <span v-if="hasHost" diff --git a/app/assets/javascripts/performance_bar/components/request_selector.vue b/app/assets/javascripts/performance_bar/components/request_selector.vue index fdb5c0d6939..297507b85af 100644 --- a/app/assets/javascripts/performance_bar/components/request_selector.vue +++ b/app/assets/javascripts/performance_bar/components/request_selector.vue @@ -37,7 +37,12 @@ export default { <template> <div id="peek-request-selector"> <select v-model="currentRequestId"> - <option v-for="request in requests" :key="request.id" :value="request.id"> + <option + v-for="request in requests" + :key="request.id" + :value="request.id" + class="qa-performance-bar-request" + > {{ truncatedUrl(request.url) }} </option> </select> diff --git a/app/views/admin/application_settings/_performance_bar.html.haml b/app/views/admin/application_settings/_performance_bar.html.haml index 44ac8d94764..f992d531ea5 100644 --- a/app/views/admin/application_settings/_performance_bar.html.haml +++ b/app/views/admin/application_settings/_performance_bar.html.haml @@ -5,10 +5,10 @@ .form-group .form-check = f.check_box :performance_bar_enabled, class: 'form-check-input' - = f.label :performance_bar_enabled, class: 'form-check-label' do + = f.label :performance_bar_enabled, class: 'form-check-label qa-enable-performance-bar-checkbox' do Enable the Performance Bar .form-group = f.label :performance_bar_allowed_group_path, 'Allowed group', class: 'label-bold' = f.text_field :performance_bar_allowed_group_path, class: 'form-control', placeholder: 'my-org/my-group', value: @application_setting.performance_bar_allowed_group&.full_path - = 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/metrics_and_profiling.html.haml b/app/views/admin/application_settings/metrics_and_profiling.html.haml index f50aca32bdf..d5ba6abe7af 100644 --- a/app/views/admin/application_settings/metrics_and_profiling.html.haml +++ b/app/views/admin/application_settings/metrics_and_profiling.html.haml @@ -24,7 +24,7 @@ .settings-content = render 'prometheus' -%section.settings.as-performance-bar.no-animate#js-performance-bar-settings{ class: ('expanded' if expanded_by_default?) } +%section.settings.qa-performance-bar-settings.as-performance-bar.no-animate#js-performance-bar-settings{ class: ('expanded' if expanded_by_default?) } .settings-header %h4 = _('Profiling - Performance bar') diff --git a/app/views/layouts/nav/sidebar/_admin.html.haml b/app/views/layouts/nav/sidebar/_admin.html.haml index bb2d206ba91..ece66d3180b 100644 --- a/app/views/layouts/nav/sidebar/_admin.html.haml +++ b/app/views/layouts/nav/sidebar/_admin.html.haml @@ -232,7 +232,7 @@ %span = _('Reporting') = nav_link(path: 'application_settings#metrics_and_profiling') do - = link_to metrics_and_profiling_admin_application_settings_path, title: _('Metrics and profiling') do + = link_to metrics_and_profiling_admin_application_settings_path, title: _('Metrics and profiling'), class: 'qa-admin-settings-metrics-and-profiling-item' do %span = _('Metrics and profiling') = nav_link(path: 'application_settings#network') do @@ -275,6 +275,7 @@ module QA module Layout autoload :Banner, 'qa/page/layout/banner' + autoload :PerformanceBar, 'qa/page/layout/performance_bar' end module Label @@ -293,10 +294,12 @@ module QA module Settings autoload :Repository, 'qa/page/admin/settings/repository' autoload :General, 'qa/page/admin/settings/general' + autoload :MetricsAndProfiling, 'qa/page/admin/settings/metrics_and_profiling' module Component autoload :RepositoryStorage, 'qa/page/admin/settings/component/repository_storage' autoload :AccountAndLimit, 'qa/page/admin/settings/component/account_and_limit' + autoload :PerformanceBar, 'qa/page/admin/settings/component/performance_bar' end end end diff --git a/qa/qa/page/admin/menu.rb b/qa/qa/page/admin/menu.rb index 25564f2dc6e..eea5717f5a7 100644 --- a/qa/qa/page/admin/menu.rb +++ b/qa/qa/page/admin/menu.rb @@ -10,6 +10,7 @@ module QA element :admin_settings_item element :admin_settings_repository_item element :admin_settings_general_item + element :admin_settings_metrics_and_profiling_item end def go_to_repository_settings @@ -28,6 +29,14 @@ module QA end end + def go_to_metrics_and_profiling_settings + hover_settings do + within_submenu do + click_element :admin_settings_metrics_and_profiling_item + end + end + end + private def hover_settings diff --git a/qa/qa/page/admin/settings/component/performance_bar.rb b/qa/qa/page/admin/settings/component/performance_bar.rb new file mode 100644 index 00000000000..bc29efb64c0 --- /dev/null +++ b/qa/qa/page/admin/settings/component/performance_bar.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +module QA + module Page + module Admin + module Settings + module Component + class PerformanceBar < Page::Base + view 'app/views/admin/application_settings/_performance_bar.html.haml' do + element :enable_performance_bar_checkbox + element :save_changes_button + end + + def enable_performance_bar + click_element :enable_performance_bar_checkbox + Capybara.current_session.driver.browser.manage.add_cookie(name: 'perf_bar_enabled', value: 'true') + end + + def save_settings + click_element :save_changes_button + end + end + end + end + end + end +end diff --git a/qa/qa/page/admin/settings/metrics_and_profiling.rb b/qa/qa/page/admin/settings/metrics_and_profiling.rb new file mode 100644 index 00000000000..e10a92d7a54 --- /dev/null +++ b/qa/qa/page/admin/settings/metrics_and_profiling.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +module QA + module Page + module Admin + module Settings + class MetricsAndProfiling < Page::Base + include QA::Page::Settings::Common + + view 'app/views/admin/application_settings/metrics_and_profiling.html.haml' do + element :performance_bar_settings + end + + def expand_performance_bar(&block) + expand_section(:performance_bar_settings) do + Component::PerformanceBar.perform(&block) + end + end + end + end + end + end +end diff --git a/qa/qa/page/layout/performance_bar.rb b/qa/qa/page/layout/performance_bar.rb new file mode 100644 index 00000000000..0cfef6a5705 --- /dev/null +++ b/qa/qa/page/layout/performance_bar.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +module QA + module Page + module Layout + class PerformanceBar < Page::Base + view 'app/assets/javascripts/performance_bar/components/performance_bar_app.vue' do + element :performance_bar + end + + view 'app/assets/javascripts/performance_bar/components/detailed_metric.vue' do + element :performance_bar_detailed_metric + end + + view 'app/assets/javascripts/performance_bar/components/request_selector.vue' do + element :performance_bar_request + end + + def has_performance_bar? + has_element?(:performance_bar) + end + + def has_detailed_metrics? + all_elements(:performance_bar_detailed_metric).all? do |metric| + metric.has_text?(%r{\d+ms / \d+}) + end + end + + def has_request_for?(path) + has_element?(:performance_bar_request, text: path) + end + end + end + end +end diff --git a/qa/qa/specs/features/browser_ui/non_devops/performance_bar_spec.rb b/qa/qa/specs/features/browser_ui/non_devops/performance_bar_spec.rb new file mode 100644 index 00000000000..fc4ff364fd4 --- /dev/null +++ b/qa/qa/specs/features/browser_ui/non_devops/performance_bar_spec.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +module QA + context 'Performance bar' do + context 'when logged in as an admin user' do + before do + Runtime::Browser.visit(:gitlab, Page::Main::Login) + Page::Main::Login.perform(&:sign_in_using_admin_credentials) + Page::Main::Menu.perform(&:click_admin_area) + Page::Admin::Menu.perform(&:go_to_metrics_and_profiling_settings) + + Page::Admin::Settings::MetricsAndProfiling.perform do |setting| + setting.expand_performance_bar do |page| + page.enable_performance_bar + page.save_settings + end + end + end + + it 'shows results for the original request and AJAX requests' do + # Issue pages always make AJAX requests + Resource::Issue.fabricate! do |issue| + issue.title = 'Performance bar test' + end + + Page::Layout::PerformanceBar.perform do |page| + expect(page).to have_performance_bar + expect(page).to have_detailed_metrics + expect(page).to have_request_for('realtime_changes') # Always requested on issue pages + end + end + end + end +end |