diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-08-26 21:11:43 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-08-26 21:11:43 +0300 |
commit | bc75527dca77b2b72331ac6cbd5928d5b8c0c419 (patch) | |
tree | 000196faadb05f6e2ff60c08865b1a09506e5522 /spec | |
parent | c82ca12a1c5a359325cb45aaf01b483d1fa0efcb (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
17 files changed, 647 insertions, 353 deletions
diff --git a/spec/features/admin/admin_users_spec.rb b/spec/features/admin/admin_users_spec.rb index 6cd18f2755c..9bfd3319ff1 100644 --- a/spec/features/admin/admin_users_spec.rb +++ b/spec/features/admin/admin_users_spec.rb @@ -353,7 +353,7 @@ RSpec.describe "Admin::Users" do it 'sees impersonation log out icon' do subject - icon = first('.fa.fa-user-secret') + icon = first('[data-testid="incognito-icon"]') expect(icon).not_to be nil end diff --git a/spec/frontend/blob/pipeline_tour_success_mock_data.js b/spec/frontend/blob/pipeline_tour_success_mock_data.js index 7819fcce85d..9dea3969d63 100644 --- a/spec/frontend/blob/pipeline_tour_success_mock_data.js +++ b/spec/frontend/blob/pipeline_tour_success_mock_data.js @@ -1,5 +1,6 @@ const modalProps = { goToPipelinesPath: 'some_pipeline_path', + projectMergeRequestsPath: 'some_mr_path', commitCookie: 'some_cookie', humanAccess: 'maintainer', }; diff --git a/spec/frontend/blob/pipeline_tour_success_modal_spec.js b/spec/frontend/blob/pipeline_tour_success_modal_spec.js index 9998cd7f91c..50db1675e13 100644 --- a/spec/frontend/blob/pipeline_tour_success_modal_spec.js +++ b/spec/frontend/blob/pipeline_tour_success_modal_spec.js @@ -10,10 +10,7 @@ describe('PipelineTourSuccessModal', () => { let cookieSpy; let trackingSpy; - beforeEach(() => { - document.body.dataset.page = 'projects:blob:show'; - trackingSpy = mockTracking('_category_', undefined, jest.spyOn); - + const createComponent = () => { wrapper = shallowMount(pipelineTourSuccess, { propsData: modalProps, stubs: { @@ -21,13 +18,49 @@ describe('PipelineTourSuccessModal', () => { GlSprintf, }, }); + }; + beforeEach(() => { + document.body.dataset.page = 'projects:blob:show'; + trackingSpy = mockTracking('_category_', undefined, jest.spyOn); cookieSpy = jest.spyOn(Cookies, 'remove'); + createComponent(); }); afterEach(() => { wrapper.destroy(); unmockTracking(); + Cookies.remove(modalProps.commitCookie); + }); + + describe('when the commitCookie contains the mr path', () => { + const expectedMrPath = 'expected_mr_path'; + + beforeEach(() => { + Cookies.set(modalProps.commitCookie, expectedMrPath); + createComponent(); + }); + + it('renders the path from the commit cookie for back to the merge request button', () => { + const goToMrBtn = wrapper.find({ ref: 'goToMergeRequest' }); + + expect(goToMrBtn.attributes('href')).toBe(expectedMrPath); + }); + }); + + describe('when the commitCookie does not contain mr path', () => { + const expectedMrPath = modalProps.projectMergeRequestsPath; + + beforeEach(() => { + Cookies.set(modalProps.commitCookie, true); + createComponent(); + }); + + it('renders the path from projectMergeRequestsPath for back to the merge request button', () => { + const goToMrBtn = wrapper.find({ ref: 'goToMergeRequest' }); + + expect(goToMrBtn.attributes('href')).toBe(expectedMrPath); + }); }); it('has expected structure', () => { @@ -58,7 +91,7 @@ describe('PipelineTourSuccessModal', () => { it('send an event when go to pipelines is clicked', () => { trackingSpy = mockTracking('_category_', wrapper.element, jest.spyOn); - const goToBtn = wrapper.find({ ref: 'goto' }); + const goToBtn = wrapper.find({ ref: 'goToPipelines' }); triggerEvent(goToBtn.element); expect(trackingSpy).toHaveBeenCalledWith('_category_', 'click_button', { @@ -67,5 +100,17 @@ describe('PipelineTourSuccessModal', () => { value: '10', }); }); + + it('sends an event when back to the merge request is clicked', () => { + trackingSpy = mockTracking('_category_', wrapper.element, jest.spyOn); + const goToBtn = wrapper.find({ ref: 'goToMergeRequest' }); + triggerEvent(goToBtn.element); + + expect(trackingSpy).toHaveBeenCalledWith('_category_', 'click_button', { + label: 'congratulate_first_pipeline', + property: modalProps.humanAccess, + value: '20', + }); + }); }); }); diff --git a/spec/frontend/blob/suggest_gitlab_ci_yml/components/popover_spec.js b/spec/frontend/blob/suggest_gitlab_ci_yml/components/popover_spec.js index 4714d34dbec..6569fe11507 100644 --- a/spec/frontend/blob/suggest_gitlab_ci_yml/components/popover_spec.js +++ b/spec/frontend/blob/suggest_gitlab_ci_yml/components/popover_spec.js @@ -16,6 +16,7 @@ const commitTrackLabel = 'suggest_commit_first_project_gitlab_ci_yml'; const dismissCookie = 'suggest_gitlab_ci_yml_99'; const humanAccess = 'owner'; +const mergeRequestPath = '/some/path'; describe('Suggest gitlab-ci.yml Popover', () => { let wrapper; @@ -26,6 +27,7 @@ describe('Suggest gitlab-ci.yml Popover', () => { target, trackLabel, dismissKey, + mergeRequestPath, humanAccess, }, stubs: { diff --git a/spec/frontend/blob_edit/blob_bundle_spec.js b/spec/frontend/blob_edit/blob_bundle_spec.js index 98fa96de124..a105b62586b 100644 --- a/spec/frontend/blob_edit/blob_bundle_spec.js +++ b/spec/frontend/blob_edit/blob_bundle_spec.js @@ -43,7 +43,8 @@ describe('BlobBundle', () => { data-target="#target" data-track-label="suggest_gitlab_ci_yml" data-dismiss-key="1" - data-human-access="owner"> + data-human-access="owner" + data-merge-request-path="path/to/mr"> <button id='commit-changes' class="js-commit-button"></button> <a class="btn btn-cancel" href="#"></a> </div> diff --git a/spec/frontend/logs/mock_data.js b/spec/frontend/logs/mock_data.js index f4c567a2ea3..3fabab4bc59 100644 --- a/spec/frontend/logs/mock_data.js +++ b/spec/frontend/logs/mock_data.js @@ -35,6 +35,7 @@ export const mockManagedApps = [ status: 'connected', path: '/root/autodevops-deploy/-/clusters/15', gitlab_managed_apps_logs_path: '/root/autodevops-deploy/-/logs?cluster_id=15', + enable_advanced_logs_querying: true, }, { cluster_type: 'project_type', @@ -45,6 +46,7 @@ export const mockManagedApps = [ status: 'connected', path: '/root/autodevops-deploy/-/clusters/16', gitlab_managed_apps_logs_path: null, + enable_advanced_logs_querying: false, }, ]; diff --git a/spec/frontend/logs/stores/getters_spec.js b/spec/frontend/logs/stores/getters_spec.js index 9d213d8c01f..bca1ce4ca92 100644 --- a/spec/frontend/logs/stores/getters_spec.js +++ b/spec/frontend/logs/stores/getters_spec.js @@ -1,7 +1,14 @@ import { trace, showAdvancedFilters } from '~/logs/stores/getters'; import logsPageState from '~/logs/stores/state'; -import { mockLogsResult, mockTrace, mockEnvName, mockEnvironments } from '../mock_data'; +import { + mockLogsResult, + mockTrace, + mockEnvName, + mockEnvironments, + mockManagedApps, + mockManagedAppName, +} from '../mock_data'; describe('Logs Store getters', () => { let state; @@ -72,4 +79,43 @@ describe('Logs Store getters', () => { }); }); }); + + describe('when no managedApps are set', () => { + beforeEach(() => { + state.environments.current = null; + state.environments.options = []; + state.managedApps.current = mockManagedAppName; + state.managedApps.options = []; + }); + + it('returns false', () => { + expect(showAdvancedFilters(state)).toBe(false); + }); + }); + + describe('when the managedApp supports filters', () => { + beforeEach(() => { + state.environments.current = null; + state.environments.options = mockEnvironments; + state.managedApps.current = mockManagedAppName; + state.managedApps.options = mockManagedApps; + }); + + it('returns true', () => { + expect(showAdvancedFilters(state)).toBe(true); + }); + }); + + describe('when the managedApp does not support filters', () => { + beforeEach(() => { + state.environments.current = null; + state.environments.options = mockEnvironments; + state.managedApps.options = mockManagedApps; + state.managedApps.current = mockManagedApps[1].name; + }); + + it('returns false', () => { + expect(showAdvancedFilters(state)).toBe(false); + }); + }); }); diff --git a/spec/frontend/vue_shared/components/resizable_chart/__snapshots__/skeleton_loader_spec.js.snap b/spec/frontend/vue_shared/components/resizable_chart/__snapshots__/skeleton_loader_spec.js.snap index 103b53cb280..70a60a2f746 100644 --- a/spec/frontend/vue_shared/components/resizable_chart/__snapshots__/skeleton_loader_spec.js.snap +++ b/spec/frontend/vue_shared/components/resizable_chart/__snapshots__/skeleton_loader_spec.js.snap @@ -1,324 +1,425 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`Resizable Skeleton Loader default setup renders the bars, labels, and grid with correct position, size, and rx percentages 1`] = ` -<gl-skeleton-loader-stub - baseurl="" - height="130" - preserveaspectratio="xMidYMid meet" - width="400" +<svg + class="gl-skeleton-loader" + preserveAspectRatio="xMidYMid meet" + version="1.1" + viewBox="0 0 400 130" > <rect - data-testid="skeleton-chart-grid" - height="1px" - width="100%" + clip-path="url(#null-idClip)" + height="130" + style="fill: url(#null-idGradient);" + width="400" x="0" - y="30%" - /> - <rect - data-testid="skeleton-chart-grid" - height="1px" - width="100%" - x="0" - y="60%" - /> - <rect - data-testid="skeleton-chart-grid" - height="1px" - width="100%" - x="0" - y="90%" - /> - - <rect - data-testid="skeleton-chart-bar" - height="5%" - rx="0.4%" - width="6%" - x="5.875%" - y="85%" - /> - <rect - data-testid="skeleton-chart-bar" - height="7%" - rx="0.4%" - width="6%" - x="17.625%" - y="83%" - /> - <rect - data-testid="skeleton-chart-bar" - height="9%" - rx="0.4%" - width="6%" - x="29.375%" - y="81%" - /> - <rect - data-testid="skeleton-chart-bar" - height="14%" - rx="0.4%" - width="6%" - x="41.125%" - y="76%" - /> - <rect - data-testid="skeleton-chart-bar" - height="21%" - rx="0.4%" - width="6%" - x="52.875%" - y="69%" - /> - <rect - data-testid="skeleton-chart-bar" - height="35%" - rx="0.4%" - width="6%" - x="64.625%" - y="55%" - /> - <rect - data-testid="skeleton-chart-bar" - height="50%" - rx="0.4%" - width="6%" - x="76.375%" - y="40%" - /> - <rect - data-testid="skeleton-chart-bar" - height="80%" - rx="0.4%" - width="6%" - x="88.125%" - y="10%" - /> - - <rect - data-testid="skeleton-chart-label" - height="5%" - rx="0.4%" - width="4%" - x="6.875%" - y="95%" - /> - <rect - data-testid="skeleton-chart-label" - height="5%" - rx="0.4%" - width="4%" - x="18.625%" - y="95%" - /> - <rect - data-testid="skeleton-chart-label" - height="5%" - rx="0.4%" - width="4%" - x="30.375%" - y="95%" - /> - <rect - data-testid="skeleton-chart-label" - height="5%" - rx="0.4%" - width="4%" - x="42.125%" - y="95%" - /> - <rect - data-testid="skeleton-chart-label" - height="5%" - rx="0.4%" - width="4%" - x="53.875%" - y="95%" - /> - <rect - data-testid="skeleton-chart-label" - height="5%" - rx="0.4%" - width="4%" - x="65.625%" - y="95%" - /> - <rect - data-testid="skeleton-chart-label" - height="5%" - rx="0.4%" - width="4%" - x="77.375%" - y="95%" - /> - <rect - data-testid="skeleton-chart-label" - height="5%" - rx="0.4%" - width="4%" - x="89.125%" - y="95%" - /> -</gl-skeleton-loader-stub> + y="0" + /> + <defs> + <clippath + id="null-idClip" + > + <rect + data-testid="skeleton-chart-grid" + height="1px" + width="100%" + x="0" + y="30%" + /> + <rect + data-testid="skeleton-chart-grid" + height="1px" + width="100%" + x="0" + y="60%" + /> + <rect + data-testid="skeleton-chart-grid" + height="1px" + width="100%" + x="0" + y="90%" + /> + + <rect + data-testid="skeleton-chart-bar" + height="5%" + rx="0.4%" + width="6%" + x="5.875%" + y="85%" + /> + <rect + data-testid="skeleton-chart-bar" + height="7%" + rx="0.4%" + width="6%" + x="17.625%" + y="83%" + /> + <rect + data-testid="skeleton-chart-bar" + height="9%" + rx="0.4%" + width="6%" + x="29.375%" + y="81%" + /> + <rect + data-testid="skeleton-chart-bar" + height="14%" + rx="0.4%" + width="6%" + x="41.125%" + y="76%" + /> + <rect + data-testid="skeleton-chart-bar" + height="21%" + rx="0.4%" + width="6%" + x="52.875%" + y="69%" + /> + <rect + data-testid="skeleton-chart-bar" + height="35%" + rx="0.4%" + width="6%" + x="64.625%" + y="55%" + /> + <rect + data-testid="skeleton-chart-bar" + height="50%" + rx="0.4%" + width="6%" + x="76.375%" + y="40%" + /> + <rect + data-testid="skeleton-chart-bar" + height="80%" + rx="0.4%" + width="6%" + x="88.125%" + y="10%" + /> + + <rect + data-testid="skeleton-chart-label" + height="5%" + rx="0.4%" + width="4%" + x="6.875%" + y="95%" + /> + <rect + data-testid="skeleton-chart-label" + height="5%" + rx="0.4%" + width="4%" + x="18.625%" + y="95%" + /> + <rect + data-testid="skeleton-chart-label" + height="5%" + rx="0.4%" + width="4%" + x="30.375%" + y="95%" + /> + <rect + data-testid="skeleton-chart-label" + height="5%" + rx="0.4%" + width="4%" + x="42.125%" + y="95%" + /> + <rect + data-testid="skeleton-chart-label" + height="5%" + rx="0.4%" + width="4%" + x="53.875%" + y="95%" + /> + <rect + data-testid="skeleton-chart-label" + height="5%" + rx="0.4%" + width="4%" + x="65.625%" + y="95%" + /> + <rect + data-testid="skeleton-chart-label" + height="5%" + rx="0.4%" + width="4%" + x="77.375%" + y="95%" + /> + <rect + data-testid="skeleton-chart-label" + height="5%" + rx="0.4%" + width="4%" + x="89.125%" + y="95%" + /> + </clippath> + <lineargradient + id="null-idGradient" + > + <stop + class="primary-stop" + offset="0%" + > + <animate + attributeName="offset" + dur="1s" + repeatCount="indefinite" + values="-2; 1" + /> + </stop> + <stop + class="secondary-stop" + offset="50%" + > + <animate + attributeName="offset" + dur="1s" + repeatCount="indefinite" + values="-1.5; 1.5" + /> + </stop> + <stop + class="primary-stop" + offset="100%" + > + <animate + attributeName="offset" + dur="1s" + repeatCount="indefinite" + values="-1; 2" + /> + </stop> + </lineargradient> + </defs> +</svg> `; exports[`Resizable Skeleton Loader with custom settings renders the correct position, and size percentages for bars and labels with different settings 1`] = ` -<gl-skeleton-loader-stub - baseurl="" - height="130" - preserveaspectratio="xMidYMid meet" - uniquekey="" - width="400" +<svg + class="gl-skeleton-loader" + preserveAspectRatio="xMidYMid meet" + version="1.1" + viewBox="0 0 400 130" > <rect - data-testid="skeleton-chart-grid" - height="1px" - width="100%" + clip-path="url(#-idClip)" + height="130" + style="fill: url(#-idGradient);" + width="400" x="0" - y="30%" - /> - <rect - data-testid="skeleton-chart-grid" - height="1px" - width="100%" - x="0" - y="60%" - /> - <rect - data-testid="skeleton-chart-grid" - height="1px" - width="100%" - x="0" - y="90%" - /> - - <rect - data-testid="skeleton-chart-bar" - height="5%" - rx="0.6%" - width="3%" - x="6.0625%" - y="85%" - /> - <rect - data-testid="skeleton-chart-bar" - height="7%" - rx="0.6%" - width="3%" - x="18.1875%" - y="83%" - /> - <rect - data-testid="skeleton-chart-bar" - height="9%" - rx="0.6%" - width="3%" - x="30.3125%" - y="81%" - /> - <rect - data-testid="skeleton-chart-bar" - height="14%" - rx="0.6%" - width="3%" - x="42.4375%" - y="76%" - /> - <rect - data-testid="skeleton-chart-bar" - height="21%" - rx="0.6%" - width="3%" - x="54.5625%" - y="69%" - /> - <rect - data-testid="skeleton-chart-bar" - height="35%" - rx="0.6%" - width="3%" - x="66.6875%" - y="55%" - /> - <rect - data-testid="skeleton-chart-bar" - height="50%" - rx="0.6%" - width="3%" - x="78.8125%" - y="40%" - /> - <rect - data-testid="skeleton-chart-bar" - height="80%" - rx="0.6%" - width="3%" - x="90.9375%" - y="10%" - /> - - <rect - data-testid="skeleton-chart-label" - height="2%" - rx="0.6%" - width="7%" - x="4.0625%" - y="98%" - /> - <rect - data-testid="skeleton-chart-label" - height="2%" - rx="0.6%" - width="7%" - x="16.1875%" - y="98%" - /> - <rect - data-testid="skeleton-chart-label" - height="2%" - rx="0.6%" - width="7%" - x="28.3125%" - y="98%" - /> - <rect - data-testid="skeleton-chart-label" - height="2%" - rx="0.6%" - width="7%" - x="40.4375%" - y="98%" - /> - <rect - data-testid="skeleton-chart-label" - height="2%" - rx="0.6%" - width="7%" - x="52.5625%" - y="98%" - /> - <rect - data-testid="skeleton-chart-label" - height="2%" - rx="0.6%" - width="7%" - x="64.6875%" - y="98%" - /> - <rect - data-testid="skeleton-chart-label" - height="2%" - rx="0.6%" - width="7%" - x="76.8125%" - y="98%" - /> - <rect - data-testid="skeleton-chart-label" - height="2%" - rx="0.6%" - width="7%" - x="88.9375%" - y="98%" - /> -</gl-skeleton-loader-stub> + y="0" + /> + <defs> + <clippath + id="-idClip" + > + <rect + data-testid="skeleton-chart-grid" + height="1px" + width="100%" + x="0" + y="30%" + /> + <rect + data-testid="skeleton-chart-grid" + height="1px" + width="100%" + x="0" + y="60%" + /> + <rect + data-testid="skeleton-chart-grid" + height="1px" + width="100%" + x="0" + y="90%" + /> + + <rect + data-testid="skeleton-chart-bar" + height="5%" + rx="0.6%" + width="3%" + x="6.0625%" + y="85%" + /> + <rect + data-testid="skeleton-chart-bar" + height="7%" + rx="0.6%" + width="3%" + x="18.1875%" + y="83%" + /> + <rect + data-testid="skeleton-chart-bar" + height="9%" + rx="0.6%" + width="3%" + x="30.3125%" + y="81%" + /> + <rect + data-testid="skeleton-chart-bar" + height="14%" + rx="0.6%" + width="3%" + x="42.4375%" + y="76%" + /> + <rect + data-testid="skeleton-chart-bar" + height="21%" + rx="0.6%" + width="3%" + x="54.5625%" + y="69%" + /> + <rect + data-testid="skeleton-chart-bar" + height="35%" + rx="0.6%" + width="3%" + x="66.6875%" + y="55%" + /> + <rect + data-testid="skeleton-chart-bar" + height="50%" + rx="0.6%" + width="3%" + x="78.8125%" + y="40%" + /> + <rect + data-testid="skeleton-chart-bar" + height="80%" + rx="0.6%" + width="3%" + x="90.9375%" + y="10%" + /> + + <rect + data-testid="skeleton-chart-label" + height="2%" + rx="0.6%" + width="7%" + x="4.0625%" + y="98%" + /> + <rect + data-testid="skeleton-chart-label" + height="2%" + rx="0.6%" + width="7%" + x="16.1875%" + y="98%" + /> + <rect + data-testid="skeleton-chart-label" + height="2%" + rx="0.6%" + width="7%" + x="28.3125%" + y="98%" + /> + <rect + data-testid="skeleton-chart-label" + height="2%" + rx="0.6%" + width="7%" + x="40.4375%" + y="98%" + /> + <rect + data-testid="skeleton-chart-label" + height="2%" + rx="0.6%" + width="7%" + x="52.5625%" + y="98%" + /> + <rect + data-testid="skeleton-chart-label" + height="2%" + rx="0.6%" + width="7%" + x="64.6875%" + y="98%" + /> + <rect + data-testid="skeleton-chart-label" + height="2%" + rx="0.6%" + width="7%" + x="76.8125%" + y="98%" + /> + <rect + data-testid="skeleton-chart-label" + height="2%" + rx="0.6%" + width="7%" + x="88.9375%" + y="98%" + /> + </clippath> + <lineargradient + id="-idGradient" + > + <stop + class="primary-stop" + offset="0%" + > + <animate + attributeName="offset" + dur="1s" + repeatCount="indefinite" + values="-2; 1" + /> + </stop> + <stop + class="secondary-stop" + offset="50%" + > + <animate + attributeName="offset" + dur="1s" + repeatCount="indefinite" + values="-1.5; 1.5" + /> + </stop> + <stop + class="primary-stop" + offset="100%" + > + <animate + attributeName="offset" + dur="1s" + repeatCount="indefinite" + values="-1; 2" + /> + </stop> + </lineargradient> + </defs> +</svg> `; diff --git a/spec/frontend/vue_shared/components/resizable_chart/skeleton_loader_spec.js b/spec/frontend/vue_shared/components/resizable_chart/skeleton_loader_spec.js index 7facd02e596..bfc3aeb0303 100644 --- a/spec/frontend/vue_shared/components/resizable_chart/skeleton_loader_spec.js +++ b/spec/frontend/vue_shared/components/resizable_chart/skeleton_loader_spec.js @@ -1,11 +1,11 @@ -import { shallowMount } from '@vue/test-utils'; +import { mount } from '@vue/test-utils'; import ChartSkeletonLoader from '~/vue_shared/components/resizable_chart/skeleton_loader.vue'; describe('Resizable Skeleton Loader', () => { let wrapper; const createComponent = (propsData = {}) => { - wrapper = shallowMount(ChartSkeletonLoader, { + wrapper = mount(ChartSkeletonLoader, { propsData, }); }; diff --git a/spec/models/clusters/cluster_spec.rb b/spec/models/clusters/cluster_spec.rb index 2d0b5af0e77..024539e34ec 100644 --- a/spec/models/clusters/cluster_spec.rb +++ b/spec/models/clusters/cluster_spec.rb @@ -42,6 +42,7 @@ RSpec.describe Clusters::Cluster, :use_clean_rails_memory_store_caching do it { is_expected.to delegate_method(:available?).to(:application_ingress).with_prefix } it { is_expected.to delegate_method(:available?).to(:application_prometheus).with_prefix } it { is_expected.to delegate_method(:available?).to(:application_knative).with_prefix } + it { is_expected.to delegate_method(:available?).to(:application_elastic_stack).with_prefix } it { is_expected.to delegate_method(:external_ip).to(:application_ingress).with_prefix } it { is_expected.to delegate_method(:external_hostname).to(:application_ingress).with_prefix } diff --git a/spec/models/namespace_spec.rb b/spec/models/namespace_spec.rb index 751770d1046..f685fe12e13 100644 --- a/spec/models/namespace_spec.rb +++ b/spec/models/namespace_spec.rb @@ -407,8 +407,26 @@ RSpec.describe Namespace do FileUtils.mkdir_p(File.join(pages_dir, project.full_path)) end + after do + FileUtils.remove_entry(File.join(TestEnv.repos_path, parent.full_path), true) + FileUtils.remove_entry(File.join(TestEnv.repos_path, new_parent.full_path), true) + FileUtils.remove_entry(File.join(TestEnv.repos_path, child.full_path), true) + FileUtils.remove_entry(File.join(uploads_dir, project.full_path), true) + FileUtils.remove_entry(File.join(pages_dir, project.full_path), true) + end + context 'renaming child' do - it 'correctly moves the repository, uploads and pages' do + context 'when async_pages_move_namespace_rename is disabled' do + it 'correctly moves the repository, uploads and pages' do + stub_feature_flags(async_pages_move_namespace_rename: false) + + child.update!(path: 'renamed') + + expect_project_directories_at('parent/renamed') + end + end + + it 'correctly moves the repository, uploads and pages', :sidekiq_inline do child.update!(path: 'renamed') expect_project_directories_at('parent/renamed') @@ -416,7 +434,17 @@ RSpec.describe Namespace do end context 'renaming parent' do - it 'correctly moves the repository, uploads and pages' do + context 'when async_pages_move_namespace_rename is disabled' do + it 'correctly moves the repository, uploads and pages' do + stub_feature_flags(async_pages_move_namespace_rename: false) + + parent.update!(path: 'renamed') + + expect_project_directories_at('renamed/child') + end + end + + it 'correctly moves the repository, uploads and pages', :sidekiq_inline do parent.update!(path: 'renamed') expect_project_directories_at('renamed/child') @@ -424,7 +452,17 @@ RSpec.describe Namespace do end context 'moving from one parent to another' do - it 'correctly moves the repository, uploads and pages' do + context 'when async_pages_move_namespace_transfer is disabled' do + it 'correctly moves the repository, uploads and pages' do + stub_feature_flags(async_pages_move_namespace_transfer: false) + + child.update!(parent: new_parent) + + expect_project_directories_at('new_parent/child') + end + end + + it 'correctly moves the repository, uploads and pages', :sidekiq_inline do child.update!(parent: new_parent) expect_project_directories_at('new_parent/child') @@ -432,7 +470,17 @@ RSpec.describe Namespace do end context 'moving from having a parent to root' do - it 'correctly moves the repository, uploads and pages' do + context 'when async_pages_move_namespace_transfer is disabled' do + it 'correctly moves the repository, uploads and pages' do + stub_feature_flags(async_pages_move_namespace_transfer: false) + + child.update!(parent: nil) + + expect_project_directories_at('child') + end + end + + it 'correctly moves the repository, uploads and pages', :sidekiq_inline do child.update!(parent: nil) expect_project_directories_at('child') @@ -440,7 +488,17 @@ RSpec.describe Namespace do end context 'moving from root to having a parent' do - it 'correctly moves the repository, uploads and pages' do + context 'when async_pages_move_namespace_transfer is disabled' do + it 'correctly moves the repository, uploads and pages' do + stub_feature_flags(async_pages_move_namespace_transfer: false) + + parent.update!(parent: new_parent) + + expect_project_directories_at('new_parent/parent/child') + end + end + + it 'correctly moves the repository, uploads and pages', :sidekiq_inline do parent.update!(parent: new_parent) expect_project_directories_at('new_parent/parent/child') diff --git a/spec/models/snippet_input_action_spec.rb b/spec/models/snippet_input_action_spec.rb index ca61b80df4c..43dc70bea98 100644 --- a/spec/models/snippet_input_action_spec.rb +++ b/spec/models/snippet_input_action_spec.rb @@ -22,9 +22,9 @@ RSpec.describe SnippetInputAction do :move | 'foobar' | 'foobar' | nil | nil | false | :previous_path :move | 'foobar' | 'foobar' | '' | nil | false | :previous_path :move | 'foobar' | 'foobar' | 'foobar' | nil | false | :file_path - :move | nil | 'foobar' | 'foobar' | nil | false | :file_path - :move | '' | 'foobar' | 'foobar' | nil | false | :file_path - :move | nil | 'foobar' | 'foo1' | nil | false | :file_path + :move | nil | 'foobar' | 'foobar' | nil | true | nil + :move | '' | 'foobar' | 'foobar' | nil | true | nil + :move | nil | 'foobar' | 'foo1' | nil | true | nil :move | 'foobar' | nil | 'foo1' | nil | true | nil :move | 'foobar' | '' | 'foo1' | nil | true | nil :create | 'foobar' | nil | 'foobar' | nil | false | :content diff --git a/spec/serializers/cluster_entity_spec.rb b/spec/serializers/cluster_entity_spec.rb index 223d37b6acd..10c6bc0e42a 100644 --- a/spec/serializers/cluster_entity_spec.rb +++ b/spec/serializers/cluster_entity_spec.rb @@ -78,5 +78,26 @@ RSpec.describe ClusterEntity do expect(subject[:gitlab_managed_apps_logs_path]).to eq(log_explorer_path) end end + + context 'enable_advanced_logs_querying' do + let(:cluster) { create(:cluster, :project) } + let(:user) { create(:user) } + + subject { described_class.new(cluster, request: request).as_json } + + context 'elastic stack is not installed on cluster' do + it 'returns false' do + expect(subject[:enable_advanced_logs_querying]).to be false + end + end + + context 'elastic stack is installed on cluster' do + it 'returns true' do + create(:clusters_applications_elastic_stack, :installed, cluster: cluster) + + expect(subject[:enable_advanced_logs_querying]).to be true + end + end + end end end diff --git a/spec/serializers/cluster_serializer_spec.rb b/spec/serializers/cluster_serializer_spec.rb index f34409c3cfb..04999975276 100644 --- a/spec/serializers/cluster_serializer_spec.rb +++ b/spec/serializers/cluster_serializer_spec.rb @@ -14,6 +14,7 @@ RSpec.describe ClusterSerializer do :enabled, :environment_scope, :gitlab_managed_apps_logs_path, + :enable_advanced_logs_querying, :kubernetes_errors, :name, :nodes, diff --git a/spec/serializers/merge_request_widget_entity_spec.rb b/spec/serializers/merge_request_widget_entity_spec.rb index 1704208d8b9..47ec014d4c9 100644 --- a/spec/serializers/merge_request_widget_entity_spec.rb +++ b/spec/serializers/merge_request_widget_entity_spec.rb @@ -136,9 +136,22 @@ RSpec.describe MergeRequestWidgetEntity do let(:role) { :developer } it 'has add ci config path' do - expected_path = "/#{resource.project.full_path}/-/new/#{resource.source_branch}?commit_message=Add+.gitlab-ci.yml&file_name=.gitlab-ci.yml&suggest_gitlab_ci_yml=true" + expected_path = "/#{resource.project.full_path}/-/new/#{resource.source_branch}" - expect(subject[:merge_request_add_ci_config_path]).to eq(expected_path) + expect(subject[:merge_request_add_ci_config_path]).to include(expected_path) + end + + it 'has expected params' do + expected_params = { + commit_message: 'Add .gitlab-ci.yml', + file_name: '.gitlab-ci.yml', + suggest_gitlab_ci_yml: 'true', + mr_path: "/#{resource.project.full_path}/-/merge_requests/#{resource.iid}" + }.with_indifferent_access + + uri = Addressable::URI.parse(subject[:merge_request_add_ci_config_path]) + + expect(uri.query_values).to match(expected_params) end context 'when auto devops is enabled' do diff --git a/spec/services/notification_service_spec.rb b/spec/services/notification_service_spec.rb index 247ef2be1b4..d3a0b8f8483 100644 --- a/spec/services/notification_service_spec.rb +++ b/spec/services/notification_service_spec.rb @@ -7,6 +7,8 @@ RSpec.describe NotificationService, :mailer do include ExternalAuthorizationServiceHelpers include NotificationHelpers + let_it_be(:project, reload: true) { create(:project, :public) } + let(:notification) { described_class.new } let(:assignee) { create(:user) } @@ -513,9 +515,7 @@ RSpec.describe NotificationService, :mailer do end context 'confidential issue note' do - let(:project) { create(:project, :public) } let(:author) { create(:user) } - let(:assignee) { create(:user) } let(:non_member) { create(:user) } let(:member) { create(:user) } let(:guest) { create(:user) } @@ -569,7 +569,6 @@ RSpec.describe NotificationService, :mailer do end context 'issue note mention', :deliver_mails_inline do - let(:project) { create(:project, :public) } let(:issue) { create(:issue, project: project, assignees: [assignee]) } let(:mentioned_issue) { create(:issue, assignees: issue.assignees) } let(:author) { create(:user) } @@ -635,7 +634,6 @@ RSpec.describe NotificationService, :mailer do end context 'project snippet note', :deliver_mails_inline do - let!(:project) { create(:project, :public) } let(:snippet) { create(:project_snippet, project: project, author: create(:user)) } let(:author) { create(:user) } let(:note) { create(:note_on_project_snippet, author: author, noteable: snippet, project_id: project.id, note: '@all mentioned') } @@ -891,11 +889,11 @@ RSpec.describe NotificationService, :mailer do end describe 'Participating project notification settings have priority over group and global settings if available', :deliver_mails_inline do - let!(:group) { create(:group) } - let!(:maintainer) { group.add_owner(create(:user, username: 'maintainer')).user } - let!(:user1) { group.add_developer(create(:user, username: 'user_with_project_and_custom_setting')).user } + let_it_be(:group) { create(:group) } + let_it_be(:maintainer) { group.add_owner(create(:user, username: 'maintainer')).user } + let_it_be(:user1) { group.add_developer(create(:user, username: 'user_with_project_and_custom_setting')).user } + let_it_be(:project) { create(:project, :public, namespace: group) } - let(:project) { create(:project, :public, namespace: group) } let(:issue) { create :issue, project: project, assignees: [assignee], description: '' } before do @@ -1079,7 +1077,6 @@ RSpec.describe NotificationService, :mailer do context 'confidential issues' do let(:author) { create(:user) } - let(:assignee) { create(:user) } let(:non_member) { create(:user) } let(:member) { create(:user) } let(:guest) { create(:user) } @@ -1285,7 +1282,6 @@ RSpec.describe NotificationService, :mailer do context 'confidential issues' do let(:author) { create(:user) } - let(:assignee) { create(:user) } let(:non_member) { create(:user) } let(:member) { create(:user) } let(:guest) { create(:user) } @@ -1338,7 +1334,6 @@ RSpec.describe NotificationService, :mailer do context 'confidential issues' do let(:author) { create(:user) } - let(:assignee) { create(:user) } let(:non_member) { create(:user) } let(:member) { create(:user) } let(:guest) { create(:user) } @@ -1390,7 +1385,6 @@ RSpec.describe NotificationService, :mailer do context 'confidential issues' do let(:author) { create(:user) } - let(:assignee) { create(:user) } let(:non_member) { create(:user) } let(:member) { create(:user) } let(:guest) { create(:user) } @@ -1587,7 +1581,6 @@ RSpec.describe NotificationService, :mailer do let(:group) { create(:group) } let(:project) { create(:project, :public, :repository, namespace: group) } let(:another_project) { create(:project, :public, namespace: group) } - let(:assignee) { create(:user) } let(:assignees) { Array.wrap(assignee) } let(:author) { create(:user) } let(:merge_request) { create :merge_request, author: author, source_project: project, assignees: assignees, description: 'cc @participant' } @@ -2079,8 +2072,6 @@ RSpec.describe NotificationService, :mailer do end describe 'Projects', :deliver_mails_inline do - let(:project) { create(:project) } - before do build_team(project) reset_delivered_emails! @@ -2306,7 +2297,6 @@ RSpec.describe NotificationService, :mailer do end describe 'ProjectMember', :deliver_mails_inline do - let(:project) { create(:project) } let(:added_user) { create(:user) } describe '#new_access_request' do @@ -2340,7 +2330,6 @@ RSpec.describe NotificationService, :mailer do end it_behaves_like 'sends notification only to a maximum of ten, most recently active project maintainers' do - let(:project) { create(:project, :public) } let(:notification_trigger) { project.request_access(added_user) } end end @@ -2470,7 +2459,6 @@ RSpec.describe NotificationService, :mailer do let(:private_project) { create(:project, :private) } let(:guest) { create(:user) } let(:developer) { create(:user) } - let(:assignee) { create(:user) } let(:merge_request) { create(:merge_request, source_project: private_project, assignees: [assignee]) } let(:merge_request1) { create(:merge_request, source_project: private_project, assignees: [assignee], description: "cc @#{guest.username}") } let(:note) { create(:note, noteable: merge_request, project: private_project) } @@ -2902,7 +2890,6 @@ RSpec.describe NotificationService, :mailer do describe 'Repository cleanup', :deliver_mails_inline do let(:user) { create(:user) } - let(:project) { create(:project) } describe '#repository_cleanup_success' do it 'emails the specified user only' do @@ -2933,7 +2920,6 @@ RSpec.describe NotificationService, :mailer do context 'Remote mirror notifications', :deliver_mails_inline do describe '#remote_mirror_update_failed' do - let(:project) { create(:project) } let(:remote_mirror) { create(:remote_mirror, project: project) } let(:u_blocked) { create(:user, :blocked) } let(:u_silence) { create_user_with_notification(:disabled, 'silent-maintainer', project) } @@ -3172,11 +3158,11 @@ RSpec.describe NotificationService, :mailer do end def should_email_nested_group_user(user, times: 1, recipients: email_recipients) - should_email(user, times: 1, recipients: email_recipients) + should_email(user, times: times, recipients: recipients) end def should_not_email_nested_group_user(user, recipients: email_recipients) - should_not_email(user, recipients: email_recipients) + should_not_email(user, recipients: recipients) end def add_users(project) diff --git a/spec/services/snippets/update_service_spec.rb b/spec/services/snippets/update_service_spec.rb index 638fe1948fd..9d1fe8fe83f 100644 --- a/spec/services/snippets/update_service_spec.rb +++ b/spec/services/snippets/update_service_spec.rb @@ -479,6 +479,22 @@ RSpec.describe Snippets::UpdateService do expect(blob.data).to eq content end end + + context 'when the file_path is not present' do + let(:snippet_actions) { [{ action: :move, previous_path: file_path }] } + + it 'generates the name for the renamed file' do + old_blob = blob(file_path) + + expect(blob('snippetfile1.txt')).to be_nil + expect(subject).to be_success + + new_blob = blob('snippetfile1.txt') + + expect(new_blob).to be_present + expect(new_blob.data).to eq old_blob.data + end + end end context 'delete action' do |