Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-05-24 12:09:17 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2022-05-24 12:09:17 +0300
commit43c14d2d9245aea5964d52d3e4915be1126977cb (patch)
tree769e314e13e40059f6b5ff228e670e278d201e06 /spec
parentecf2b5b6048d8f289d085b5d7951381c1ef4dca0 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/controllers/projects/merge_requests_controller_spec.rb6
-rw-r--r--spec/frontend/design_management/components/toolbar/__snapshots__/index_spec.js.snap2
-rw-r--r--spec/frontend/issuable/popover/__snapshots__/mr_popover_spec.js.snap (renamed from spec/frontend/mr_popover/__snapshots__/mr_popover_spec.js.snap)0
-rw-r--r--spec/frontend/issuable/popover/index_spec.js (renamed from spec/frontend/mr_popover/index_spec.js)10
-rw-r--r--spec/frontend/issuable/popover/mr_popover_spec.js (renamed from spec/frontend/mr_popover/mr_popover_spec.js)2
-rw-r--r--spec/frontend/vue_shared/components/notes/system_note_spec.js10
-rw-r--r--spec/frontend/work_items/components/work_item_links/work_item_links_spec.js65
-rw-r--r--spec/graphql/resolvers/merge_requests_resolver_spec.rb2
-rw-r--r--spec/mailers/emails/admin_notification_spec.rb53
-rw-r--r--spec/models/merge_request_spec.rb36
-rw-r--r--spec/services/packages/rubygems/create_gemspec_service_spec.rb13
-rw-r--r--spec/services/quick_actions/interpret_service_spec.rb4
-rw-r--r--spec/tasks/gitlab/pages_rake_spec.rb80
13 files changed, 167 insertions, 116 deletions
diff --git a/spec/controllers/projects/merge_requests_controller_spec.rb b/spec/controllers/projects/merge_requests_controller_spec.rb
index f6db809c2e3..f00dc6c7e39 100644
--- a/spec/controllers/projects/merge_requests_controller_spec.rb
+++ b/spec/controllers/projects/merge_requests_controller_spec.rb
@@ -1730,7 +1730,7 @@ RSpec.describe Projects::MergeRequestsController do
describe 'POST remove_wip' do
before do
- merge_request.title = merge_request.wip_title
+ merge_request.title = merge_request.draft_title
merge_request.save!
post :remove_wip,
@@ -1743,8 +1743,8 @@ RSpec.describe Projects::MergeRequestsController do
xhr: true
end
- it 'removes the wip status' do
- expect(merge_request.reload.title).to eq(merge_request.wipless_title)
+ it 'removes the draft status' do
+ expect(merge_request.reload.title).to eq(merge_request.draftless_title)
end
it 'renders MergeRequest as JSON' do
diff --git a/spec/frontend/design_management/components/toolbar/__snapshots__/index_spec.js.snap b/spec/frontend/design_management/components/toolbar/__snapshots__/index_spec.js.snap
index 6dfd57906d8..3c4aa0f4d3c 100644
--- a/spec/frontend/design_management/components/toolbar/__snapshots__/index_spec.js.snap
+++ b/spec/frontend/design_management/components/toolbar/__snapshots__/index_spec.js.snap
@@ -56,7 +56,7 @@ exports[`Design management toolbar component renders design and updated data 1`]
buttonclass=""
buttonicon="archive"
buttonsize="medium"
- buttonvariant="warning"
+ buttonvariant="default"
class="gl-ml-3"
hasselecteddesigns="true"
title="Archive design"
diff --git a/spec/frontend/mr_popover/__snapshots__/mr_popover_spec.js.snap b/spec/frontend/issuable/popover/__snapshots__/mr_popover_spec.js.snap
index a03d8bf5bf4..a03d8bf5bf4 100644
--- a/spec/frontend/mr_popover/__snapshots__/mr_popover_spec.js.snap
+++ b/spec/frontend/issuable/popover/__snapshots__/mr_popover_spec.js.snap
diff --git a/spec/frontend/mr_popover/index_spec.js b/spec/frontend/issuable/popover/index_spec.js
index fd8ced17aea..d782b2558cf 100644
--- a/spec/frontend/mr_popover/index_spec.js
+++ b/spec/frontend/issuable/popover/index_spec.js
@@ -1,10 +1,10 @@
import { setHTMLFixture } from 'helpers/fixtures';
import * as createDefaultClient from '~/lib/graphql';
-import initMRPopovers from '~/mr_popover/index';
+import initIssuablePopovers from '~/issuable/popover/index';
createDefaultClient.default = jest.fn();
-describe('initMRPopovers', () => {
+describe('initIssuablePopovers', () => {
let mr1;
let mr2;
let mr3;
@@ -14,7 +14,7 @@ describe('initMRPopovers', () => {
<div id="one" class="gfm-merge_request" data-mr-title="title" data-iid="1" data-project-path="group/project">
MR1
</div>
- <div id="two" class="gfm-merge_request" data-mr-title="title" data-iid="1" data-project-path="group/project">
+ <div id="two" class="gfm-merge_request" title="title" data-iid="1" data-project-path="group/project">
MR2
</div>
<div id="three" class="gfm-merge_request">
@@ -32,14 +32,14 @@ describe('initMRPopovers', () => {
});
it('does not add the same event listener twice', () => {
- initMRPopovers([mr1, mr1, mr2]);
+ initIssuablePopovers([mr1, mr1, mr2]);
expect(mr1.addEventListener).toHaveBeenCalledTimes(1);
expect(mr2.addEventListener).toHaveBeenCalledTimes(1);
});
it('does not add listener if it does not have the necessary data attributes', () => {
- initMRPopovers([mr1, mr2, mr3]);
+ initIssuablePopovers([mr1, mr2, mr3]);
expect(mr3.addEventListener).not.toHaveBeenCalled();
});
diff --git a/spec/frontend/mr_popover/mr_popover_spec.js b/spec/frontend/issuable/popover/mr_popover_spec.js
index 23f97073e9e..653666b0395 100644
--- a/spec/frontend/mr_popover/mr_popover_spec.js
+++ b/spec/frontend/issuable/popover/mr_popover_spec.js
@@ -1,6 +1,6 @@
import { shallowMount } from '@vue/test-utils';
import { nextTick } from 'vue';
-import MRPopover from '~/mr_popover/components/mr_popover.vue';
+import MRPopover from '~/issuable/popover/components/mr_popover.vue';
import CiIcon from '~/vue_shared/components/ci_icon.vue';
describe('MR Popover', () => {
diff --git a/spec/frontend/vue_shared/components/notes/system_note_spec.js b/spec/frontend/vue_shared/components/notes/system_note_spec.js
index 65f79bab005..98b04ede943 100644
--- a/spec/frontend/vue_shared/components/notes/system_note_spec.js
+++ b/spec/frontend/vue_shared/components/notes/system_note_spec.js
@@ -1,13 +1,11 @@
import MockAdapter from 'axios-mock-adapter';
import { mount } from '@vue/test-utils';
+import $ from 'jquery';
import waitForPromises from 'helpers/wait_for_promises';
-import initMRPopovers from '~/mr_popover/index';
import createStore from '~/notes/stores';
import IssueSystemNote from '~/vue_shared/components/notes/system_note.vue';
import axios from '~/lib/utils/axios_utils';
-jest.mock('~/mr_popover/index', () => jest.fn());
-
describe('system note component', () => {
let vm;
let props;
@@ -76,10 +74,12 @@ describe('system note component', () => {
expect(vm.find('.system-note-message').html()).toContain('<span>closed</span>');
});
- it('should initMRPopovers onMount', () => {
+ it('should renderGFM onMount', () => {
+ const renderGFMSpy = jest.spyOn($.fn, 'renderGFM');
+
createComponent(props);
- expect(initMRPopovers).toHaveBeenCalled();
+ expect(renderGFMSpy).toHaveBeenCalled();
});
it('renders outdated code lines', async () => {
diff --git a/spec/frontend/work_items/components/work_item_links/work_item_links_spec.js b/spec/frontend/work_items/components/work_item_links/work_item_links_spec.js
new file mode 100644
index 00000000000..ee5937ab7e7
--- /dev/null
+++ b/spec/frontend/work_items/components/work_item_links/work_item_links_spec.js
@@ -0,0 +1,65 @@
+import { nextTick } from 'vue';
+import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
+import WorkItemLinks from '~/work_items/components/work_item_links/work_item_links.vue';
+
+describe('WorkItemLinks', () => {
+ let wrapper;
+
+ const createComponent = () => {
+ wrapper = shallowMountExtended(WorkItemLinks, { propsData: { workItemId: '123' } });
+ };
+
+ const findToggleButton = () => wrapper.findByTestId('toggle-links');
+ const findLinksBody = () => wrapper.findByTestId('links-body');
+ const findEmptyState = () => wrapper.findByTestId('links-empty');
+ const findToggleAddFormButton = () => wrapper.findByTestId('toggle-add-form');
+ const findAddLinksForm = () => wrapper.findByTestId('add-links-form');
+
+ beforeEach(() => {
+ createComponent();
+ });
+
+ afterEach(() => {
+ wrapper.destroy();
+ });
+
+ it('is collapsed by default', () => {
+ expect(findToggleButton().props('icon')).toBe('angle-down');
+ expect(findLinksBody().exists()).toBe(false);
+ });
+
+ it('expands on click toggle button', async () => {
+ findToggleButton().vm.$emit('click');
+ await nextTick();
+
+ expect(findToggleButton().props('icon')).toBe('angle-up');
+ expect(findLinksBody().exists()).toBe(true);
+ });
+
+ it('displays empty state if there are no links', async () => {
+ findToggleButton().vm.$emit('click');
+ await nextTick();
+
+ expect(findEmptyState().exists()).toBe(true);
+ expect(findToggleAddFormButton().exists()).toBe(true);
+ });
+
+ describe('add link form', () => {
+ it('displays form on click add button and hides form on cancel', async () => {
+ findToggleButton().vm.$emit('click');
+ await nextTick();
+
+ expect(findEmptyState().exists()).toBe(true);
+
+ findToggleAddFormButton().vm.$emit('click');
+ await nextTick();
+
+ expect(findAddLinksForm().exists()).toBe(true);
+
+ findAddLinksForm().vm.$emit('cancel');
+ await nextTick();
+
+ expect(findAddLinksForm().exists()).toBe(false);
+ });
+ });
+});
diff --git a/spec/graphql/resolvers/merge_requests_resolver_spec.rb b/spec/graphql/resolvers/merge_requests_resolver_spec.rb
index e4eaeb9bc3c..e8247b7b488 100644
--- a/spec/graphql/resolvers/merge_requests_resolver_spec.rb
+++ b/spec/graphql/resolvers/merge_requests_resolver_spec.rb
@@ -174,7 +174,7 @@ RSpec.describe Resolvers::MergeRequestsResolver do
context 'with draft argument' do
before do
- merge_request_4.update!(title: MergeRequest.wip_title(merge_request_4.title))
+ merge_request_4.update!(title: MergeRequest.draft_title(merge_request_4.title))
end
context 'with draft: true argument' do
diff --git a/spec/mailers/emails/admin_notification_spec.rb b/spec/mailers/emails/admin_notification_spec.rb
index 90381eb8ffd..a233be86a83 100644
--- a/spec/mailers/emails/admin_notification_spec.rb
+++ b/spec/mailers/emails/admin_notification_spec.rb
@@ -3,9 +3,62 @@
require 'spec_helper'
RSpec.describe Emails::AdminNotification do
+ include EmailSpec::Matchers
+ include_context 'gitlab email notification'
+
it 'adds email methods to Notify' do
subject.instance_methods.each do |email_method|
expect(Notify).to be_respond_to(email_method)
end
end
+
+ describe 'user_auto_banned_email' do
+ let_it_be(:admin) { create(:user) }
+ let_it_be(:user) { create(:user) }
+
+ let(:max_project_downloads) { 5 }
+ let(:time_period) { 600 }
+
+ subject do
+ Notify.user_auto_banned_email(
+ admin.id, user.id,
+ max_project_downloads: max_project_downloads,
+ within_seconds: time_period
+ )
+ end
+
+ it_behaves_like 'an email sent from GitLab'
+ it_behaves_like 'it should not have Gmail Actions links'
+ it_behaves_like 'a user cannot unsubscribe through footer link'
+ it_behaves_like 'appearance header and footer enabled'
+ it_behaves_like 'appearance header and footer not enabled'
+
+ it 'is sent to the administrator' do
+ is_expected.to deliver_to admin.email
+ end
+
+ it 'has the correct subject' do
+ is_expected.to have_subject "We've detected unusual activity"
+ end
+
+ it 'includes the name of the user' do
+ is_expected.to have_body_text user.name
+ end
+
+ it 'includes the reason' do
+ is_expected.to have_body_text "due to them downloading more than 5 project repositories within 10 minutes"
+ end
+
+ it 'includes a link to unban the user' do
+ is_expected.to have_body_text admin_users_url(filter: 'banned')
+ end
+
+ it 'includes a link to change the settings' do
+ is_expected.to have_body_text network_admin_application_settings_url(anchor: 'js-ip-limits-settings')
+ end
+
+ it 'includes the email reason' do
+ is_expected.to have_body_text "You're receiving this email because of your account on localhost"
+ end
+ end
end
diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb
index 32639b3e7d2..e11f92ddca8 100644
--- a/spec/models/merge_request_spec.rb
+++ b/spec/models/merge_request_spec.rb
@@ -1472,20 +1472,20 @@ RSpec.describe MergeRequest, factory_default: :keep do
end
end
- describe "#wipless_title" do
+ describe "#draftless_title" do
subject { build_stubbed(:merge_request) }
['draft:', 'Draft: ', '[Draft]', '[DRAFT] '].each do |draft_prefix|
it "removes a '#{draft_prefix}' prefix" do
- wipless_title = subject.title
+ draftless_title = subject.title
subject.title = "#{draft_prefix}#{subject.title}"
- expect(subject.wipless_title).to eq wipless_title
+ expect(subject.draftless_title).to eq draftless_title
end
it "is satisfies the #work_in_progress? method" do
subject.title = "#{draft_prefix}#{subject.title}"
- subject.title = subject.wipless_title
+ subject.title = subject.draftless_title
expect(subject.work_in_progress?).to eq false
end
@@ -1497,58 +1497,58 @@ RSpec.describe MergeRequest, factory_default: :keep do
it "doesn't remove a '#{wip_prefix}' prefix" do
subject.title = "#{wip_prefix}#{subject.title}"
- expect(subject.wipless_title).to eq subject.title
+ expect(subject.draftless_title).to eq subject.title
end
end
it 'removes only draft prefix from the MR title' do
subject.title = 'Draft: Implement feature called draft'
- expect(subject.wipless_title).to eq 'Implement feature called draft'
+ expect(subject.draftless_title).to eq 'Implement feature called draft'
end
it 'does not remove WIP in the middle of the title' do
subject.title = 'Something with WIP in the middle'
- expect(subject.wipless_title).to eq subject.title
+ expect(subject.draftless_title).to eq subject.title
end
it 'does not remove Draft in the middle of the title' do
subject.title = 'Something with Draft in the middle'
- expect(subject.wipless_title).to eq subject.title
+ expect(subject.draftless_title).to eq subject.title
end
it 'does not remove WIP at the end of the title' do
subject.title = 'Something ends with WIP'
- expect(subject.wipless_title).to eq subject.title
+ expect(subject.draftless_title).to eq subject.title
end
it 'does not remove Draft at the end of the title' do
subject.title = 'Something ends with Draft'
- expect(subject.wipless_title).to eq subject.title
+ expect(subject.draftless_title).to eq subject.title
end
end
- describe "#wip_title" do
+ describe "#draft_title" do
it "adds the Draft: prefix to the title" do
- wip_title = "Draft: #{subject.title}"
+ draft_title = "Draft: #{subject.title}"
- expect(subject.wip_title).to eq wip_title
+ expect(subject.draft_title).to eq draft_title
end
it "does not add the Draft: prefix multiple times" do
- wip_title = "Draft: #{subject.title}"
- subject.title = subject.wip_title
- subject.title = subject.wip_title
+ draft_title = "Draft: #{subject.title}"
+ subject.title = subject.draft_title
+ subject.title = subject.draft_title
- expect(subject.wip_title).to eq wip_title
+ expect(subject.draft_title).to eq draft_title
end
it "is satisfies the #work_in_progress? method" do
- subject.title = subject.wip_title
+ subject.title = subject.draft_title
expect(subject.work_in_progress?).to eq true
end
diff --git a/spec/services/packages/rubygems/create_gemspec_service_spec.rb b/spec/services/packages/rubygems/create_gemspec_service_spec.rb
index 198e978a47e..839fb4d955a 100644
--- a/spec/services/packages/rubygems/create_gemspec_service_spec.rb
+++ b/spec/services/packages/rubygems/create_gemspec_service_spec.rb
@@ -24,5 +24,18 @@ RSpec.describe Packages::Rubygems::CreateGemspecService do
expect(gemspec_file.file_sha1).not_to be_nil
expect(gemspec_file.file_sha256).not_to be_nil
end
+
+ context 'with FIPS mode', :fips_mode do
+ it 'does not generate file_md5' do
+ expect { subject }.to change { package.package_files.count }.by(1)
+
+ gemspec_file = package.package_files.find_by(file_name: "#{gemspec.name}.gemspec")
+ expect(gemspec_file.file).not_to be_nil
+ expect(gemspec_file.size).not_to be_nil
+ expect(gemspec_file.file_md5).to be_nil
+ expect(gemspec_file.file_sha1).not_to be_nil
+ expect(gemspec_file.file_sha256).not_to be_nil
+ end
+ end
end
end
diff --git a/spec/services/quick_actions/interpret_service_spec.rb b/spec/services/quick_actions/interpret_service_spec.rb
index f7a22b1b92f..b67fd928e00 100644
--- a/spec/services/quick_actions/interpret_service_spec.rb
+++ b/spec/services/quick_actions/interpret_service_spec.rb
@@ -333,14 +333,14 @@ RSpec.describe QuickActions::InterpretService do
shared_examples 'undraft command' do
it 'returns wip_event: "unwip" if content contains /draft' do
- issuable.update!(title: issuable.wip_title)
+ issuable.update!(title: issuable.draft_title)
_, updates, _ = service.execute(content, issuable)
expect(updates).to eq(wip_event: 'unwip')
end
it 'returns the unwip message' do
- issuable.update!(title: issuable.wip_title)
+ issuable.update!(title: issuable.draft_title)
_, _, message = service.execute(content, issuable)
expect(message).to eq("Unmarked this #{issuable.to_ability_name.humanize(capitalize: false)} as a draft.")
diff --git a/spec/tasks/gitlab/pages_rake_spec.rb b/spec/tasks/gitlab/pages_rake_spec.rb
index d4bfcafa7b4..9e3d5c3ccf0 100644
--- a/spec/tasks/gitlab/pages_rake_spec.rb
+++ b/spec/tasks/gitlab/pages_rake_spec.rb
@@ -7,86 +7,6 @@ RSpec.describe 'gitlab:pages', :silence_stdout do
Rake.application.rake_require 'tasks/gitlab/pages'
end
- describe 'migrate_legacy_storage task' do
- subject { run_rake_task('gitlab:pages:migrate_legacy_storage') }
-
- it 'calls migration service' do
- expect_next_instance_of(::Pages::MigrateFromLegacyStorageService, anything,
- ignore_invalid_entries: false,
- mark_projects_as_not_deployed: false) do |service|
- expect(service).to receive(:execute_with_threads).with(threads: 3, batch_size: 10).and_call_original
- end
-
- subject
- end
-
- it 'uses PAGES_MIGRATION_THREADS environment variable' do
- stub_env('PAGES_MIGRATION_THREADS', '5')
-
- expect_next_instance_of(::Pages::MigrateFromLegacyStorageService, anything,
- ignore_invalid_entries: false,
- mark_projects_as_not_deployed: false) do |service|
- expect(service).to receive(:execute_with_threads).with(threads: 5, batch_size: 10).and_call_original
- end
-
- subject
- end
-
- it 'uses PAGES_MIGRATION_BATCH_SIZE environment variable' do
- stub_env('PAGES_MIGRATION_BATCH_SIZE', '100')
-
- expect_next_instance_of(::Pages::MigrateFromLegacyStorageService, anything,
- ignore_invalid_entries: false,
- mark_projects_as_not_deployed: false) do |service|
- expect(service).to receive(:execute_with_threads).with(threads: 3, batch_size: 100).and_call_original
- end
-
- subject
- end
-
- it 'uses PAGES_MIGRATION_IGNORE_INVALID_ENTRIES environment variable' do
- stub_env('PAGES_MIGRATION_IGNORE_INVALID_ENTRIES', 'true')
-
- expect_next_instance_of(::Pages::MigrateFromLegacyStorageService, anything,
- ignore_invalid_entries: true,
- mark_projects_as_not_deployed: false) do |service|
- expect(service).to receive(:execute_with_threads).with(threads: 3, batch_size: 10).and_call_original
- end
-
- subject
- end
-
- it 'uses PAGES_MIGRATION_MARK_PROJECTS_AS_NOT_DEPLOYED environment variable' do
- stub_env('PAGES_MIGRATION_MARK_PROJECTS_AS_NOT_DEPLOYED', 'true')
-
- expect_next_instance_of(::Pages::MigrateFromLegacyStorageService, anything,
- ignore_invalid_entries: false,
- mark_projects_as_not_deployed: true) do |service|
- expect(service).to receive(:execute_with_threads).with(threads: 3, batch_size: 10).and_call_original
- end
-
- subject
- end
- end
-
- describe 'clean_migrated_zip_storage task' do
- it 'removes only migrated deployments' do
- regular_deployment = create(:pages_deployment)
- migrated_deployment = create(:pages_deployment, :migrated)
-
- regular_deployment.project.update_pages_deployment!(regular_deployment)
- migrated_deployment.project.update_pages_deployment!(migrated_deployment)
-
- expect(PagesDeployment.all).to contain_exactly(regular_deployment, migrated_deployment)
-
- run_rake_task('gitlab:pages:clean_migrated_zip_storage')
-
- expect(PagesDeployment.all).to contain_exactly(regular_deployment)
- expect(PagesDeployment.find_by_id(regular_deployment.id)).not_to be_nil
- expect(PagesDeployment.find_by_id(migrated_deployment.id)).to be_nil
- end
- end
-
describe 'gitlab:pages:deployments:migrate_to_object_storage' do
subject { run_rake_task('gitlab:pages:deployments:migrate_to_object_storage') }