summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-02-14 21:09:08 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-02-14 21:09:08 +0000
commit866ca4e49ff74ffadf8e6f6ff663a168489c2aba (patch)
treecc3135b1bae11dbd1cb3a30cb547473ad89a5551 /spec
parent26a50872e9da9509c52c70f74dc21698fec906db (diff)
downloadgitlab-ce-866ca4e49ff74ffadf8e6f6ff663a168489c2aba.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/features/security/group/internal_access_spec.rb8
-rw-r--r--spec/features/security/group/private_access_spec.rb8
-rw-r--r--spec/features/security/group/public_access_spec.rb8
-rw-r--r--spec/features/security/project/internal_access_spec.rb18
-rw-r--r--spec/features/security/project/private_access_spec.rb16
-rw-r--r--spec/features/security/project/public_access_spec.rb18
-rw-r--r--spec/frontend/monitoring/store/mutations_spec.js25
-rw-r--r--spec/frontend/releases/components/app_edit_spec.js (renamed from spec/frontend/releases/detail/components/app_spec.js)18
-rw-r--r--spec/frontend/releases/components/evidence_block_spec.js (renamed from spec/frontend/releases/list/components/evidence_block_spec.js)4
-rw-r--r--spec/frontend/releases/components/release_block_footer_spec.js (renamed from spec/frontend/releases/list/components/release_block_footer_spec.js)4
-rw-r--r--spec/frontend/releases/components/release_block_header_spec.js (renamed from spec/frontend/releases/list/components/release_block_header_spec.js)4
-rw-r--r--spec/frontend/releases/components/release_block_milestone_info_spec.js (renamed from spec/frontend/releases/list/components/release_block_milestone_info_spec.js)6
-rw-r--r--spec/frontend/releases/components/release_block_spec.js (renamed from spec/frontend/releases/list/components/release_block_spec.js)8
-rw-r--r--spec/frontend/releases/stores/modules/detail/actions_spec.js (renamed from spec/frontend/releases/detail/store/actions_spec.js)8
-rw-r--r--spec/frontend/releases/stores/modules/detail/mutations_spec.js (renamed from spec/frontend/releases/detail/store/mutations_spec.js)8
-rw-r--r--spec/javascripts/releases/components/app_index_spec.js (renamed from spec/javascripts/releases/list/components/app_spec.js)11
-rw-r--r--spec/javascripts/releases/stores/modules/list/actions_spec.js (renamed from spec/javascripts/releases/list/store/actions_spec.js)8
-rw-r--r--spec/javascripts/releases/stores/modules/list/helpers.js (renamed from spec/javascripts/releases/list/store/helpers.js)2
-rw-r--r--spec/javascripts/releases/stores/modules/list/mutations_spec.js (renamed from spec/javascripts/releases/list/store/mutations_spec.js)8
-rw-r--r--spec/lib/gitlab/background_migration/link_lfs_objects_spec.rb66
-rw-r--r--spec/lib/gitlab/import_export/group_object_builder_spec.rb22
-rw-r--r--spec/migrations/schedule_link_lfs_objects_spec.rb82
-rw-r--r--spec/routing/project_routing_spec.rb16
-rw-r--r--spec/services/ci/pipeline_processing/shared_processing_service.rb25
-rw-r--r--spec/services/ci/process_build_service_spec.rb31
25 files changed, 344 insertions, 88 deletions
diff --git a/spec/features/security/group/internal_access_spec.rb b/spec/features/security/group/internal_access_spec.rb
index 8dd15789cd1..114bc1a1f0c 100644
--- a/spec/features/security/group/internal_access_spec.rb
+++ b/spec/features/security/group/internal_access_spec.rb
@@ -36,7 +36,7 @@ describe 'Internal Group access' do
it { is_expected.to be_denied_for(:visitor) }
end
- describe 'GET /groups/:path/issues' do
+ describe 'GET /groups/:path/-/issues' do
subject { issues_group_path(group) }
it { is_expected.to be_allowed_for(:admin) }
@@ -51,7 +51,7 @@ describe 'Internal Group access' do
it { is_expected.to be_denied_for(:visitor) }
end
- describe 'GET /groups/:path/merge_requests' do
+ describe 'GET /groups/:path/-/merge_requests' do
let(:project) { create(:project, :internal, :repository, group: group) }
subject { merge_requests_group_path(group) }
@@ -68,7 +68,7 @@ describe 'Internal Group access' do
it { is_expected.to be_denied_for(:visitor) }
end
- describe 'GET /groups/:path/group_members' do
+ describe 'GET /groups/:path/-/group_members' do
subject { group_group_members_path(group) }
it { is_expected.to be_allowed_for(:admin) }
@@ -83,7 +83,7 @@ describe 'Internal Group access' do
it { is_expected.to be_denied_for(:visitor) }
end
- describe 'GET /groups/:path/edit' do
+ describe 'GET /groups/:path/-/edit' do
subject { edit_group_path(group) }
it { is_expected.to be_allowed_for(:admin) }
diff --git a/spec/features/security/group/private_access_spec.rb b/spec/features/security/group/private_access_spec.rb
index 0720302b03b..3362b9a9e9e 100644
--- a/spec/features/security/group/private_access_spec.rb
+++ b/spec/features/security/group/private_access_spec.rb
@@ -36,7 +36,7 @@ describe 'Private Group access' do
it { is_expected.to be_denied_for(:visitor) }
end
- describe 'GET /groups/:path/issues' do
+ describe 'GET /groups/:path/-/issues' do
subject { issues_group_path(group) }
it { is_expected.to be_allowed_for(:admin) }
@@ -51,7 +51,7 @@ describe 'Private Group access' do
it { is_expected.to be_denied_for(:visitor) }
end
- describe 'GET /groups/:path/merge_requests' do
+ describe 'GET /groups/:path/-/merge_requests' do
let(:project) { create(:project, :private, :repository, group: group) }
subject { merge_requests_group_path(group) }
@@ -68,7 +68,7 @@ describe 'Private Group access' do
it { is_expected.to be_denied_for(:visitor) }
end
- describe 'GET /groups/:path/group_members' do
+ describe 'GET /groups/:path/-/group_members' do
subject { group_group_members_path(group) }
it { is_expected.to be_allowed_for(:admin) }
@@ -83,7 +83,7 @@ describe 'Private Group access' do
it { is_expected.to be_denied_for(:visitor) }
end
- describe 'GET /groups/:path/edit' do
+ describe 'GET /groups/:path/-/edit' do
subject { edit_group_path(group) }
it { is_expected.to be_allowed_for(:admin) }
diff --git a/spec/features/security/group/public_access_spec.rb b/spec/features/security/group/public_access_spec.rb
index 0a18a0ff812..bf05f276cc6 100644
--- a/spec/features/security/group/public_access_spec.rb
+++ b/spec/features/security/group/public_access_spec.rb
@@ -36,7 +36,7 @@ describe 'Public Group access' do
it { is_expected.to be_allowed_for(:visitor) }
end
- describe 'GET /groups/:path/issues' do
+ describe 'GET /groups/:path/-/issues' do
subject { issues_group_path(group) }
it { is_expected.to be_allowed_for(:admin) }
@@ -51,7 +51,7 @@ describe 'Public Group access' do
it { is_expected.to be_allowed_for(:visitor) }
end
- describe 'GET /groups/:path/merge_requests' do
+ describe 'GET /groups/:path/-/merge_requests' do
let(:project) { create(:project, :public, :repository, group: group) }
subject { merge_requests_group_path(group) }
@@ -68,7 +68,7 @@ describe 'Public Group access' do
it { is_expected.to be_allowed_for(:visitor) }
end
- describe 'GET /groups/:path/group_members' do
+ describe 'GET /groups/:path/-/group_members' do
subject { group_group_members_path(group) }
it { is_expected.to be_allowed_for(:admin) }
@@ -83,7 +83,7 @@ describe 'Public Group access' do
it { is_expected.to be_allowed_for(:visitor) }
end
- describe 'GET /groups/:path/edit' do
+ describe 'GET /groups/:path/-/edit' do
subject { edit_group_path(group) }
it { is_expected.to be_allowed_for(:admin) }
diff --git a/spec/features/security/project/internal_access_spec.rb b/spec/features/security/project/internal_access_spec.rb
index 5c74b566ef0..ed1dbe15d65 100644
--- a/spec/features/security/project/internal_access_spec.rb
+++ b/spec/features/security/project/internal_access_spec.rb
@@ -29,7 +29,7 @@ describe "Internal Project Access" do
it { is_expected.to be_denied_for(:visitor) }
end
- describe "GET /:project_path/tree/master" do
+ describe "GET /:project_path/-/tree/master" do
subject { project_tree_path(project, project.repository.root_ref) }
it { is_expected.to be_allowed_for(:admin) }
@@ -43,7 +43,7 @@ describe "Internal Project Access" do
it { is_expected.to be_denied_for(:visitor) }
end
- describe "GET /:project_path/commits/master" do
+ describe "GET /:project_path/-/commits/master" do
subject { project_commits_path(project, project.repository.root_ref, limit: 1) }
it { is_expected.to be_allowed_for(:admin) }
@@ -57,7 +57,7 @@ describe "Internal Project Access" do
it { is_expected.to be_denied_for(:visitor) }
end
- describe "GET /:project_path/commit/:sha" do
+ describe "GET /:project_path/-/commit/:sha" do
subject { project_commit_path(project, project.repository.commit) }
it { is_expected.to be_allowed_for(:admin) }
@@ -71,7 +71,7 @@ describe "Internal Project Access" do
it { is_expected.to be_denied_for(:visitor) }
end
- describe "GET /:project_path/compare" do
+ describe "GET /:project_path/-/compare" do
subject { project_compare_index_path(project) }
it { is_expected.to be_allowed_for(:admin) }
@@ -127,7 +127,7 @@ describe "Internal Project Access" do
it { is_expected.to be_denied_for(:external) }
end
- describe "GET /:project_path/blob" do
+ describe "GET /:project_path/-/blob" do
let(:commit) { project.repository.commit }
subject { project_blob_path(project, File.join(commit.id, '.gitignore')) }
@@ -229,7 +229,7 @@ describe "Internal Project Access" do
it { is_expected.to be_denied_for(:visitor) }
end
- describe "GET /:project_path/merge_requests" do
+ describe "GET /:project_path/-/merge_requests" do
subject { project_merge_requests_path(project) }
it { is_expected.to be_allowed_for(:admin) }
@@ -243,7 +243,7 @@ describe "Internal Project Access" do
it { is_expected.to be_denied_for(:visitor) }
end
- describe "GET /:project_path/merge_requests/new" do
+ describe "GET /:project_path/-/merge_requests/new" do
subject { project_new_merge_request_path(project) }
it { is_expected.to be_allowed_for(:admin) }
@@ -257,7 +257,7 @@ describe "Internal Project Access" do
it { is_expected.to be_denied_for(:visitor) }
end
- describe "GET /:project_path/branches" do
+ describe "GET /:project_path/-/branches" do
subject { project_branches_path(project) }
before do
@@ -278,7 +278,7 @@ describe "Internal Project Access" do
it { is_expected.to be_denied_for(:visitor) }
end
- describe "GET /:project_path/tags" do
+ describe "GET /:project_path/-/tags" do
subject { project_tags_path(project) }
before do
diff --git a/spec/features/security/project/private_access_spec.rb b/spec/features/security/project/private_access_spec.rb
index 2404b7cc69d..97e6b3bd4ff 100644
--- a/spec/features/security/project/private_access_spec.rb
+++ b/spec/features/security/project/private_access_spec.rb
@@ -29,7 +29,7 @@ describe "Private Project Access" do
it { is_expected.to be_denied_for(:visitor) }
end
- describe "GET /:project_path/tree/master" do
+ describe "GET /:project_path/-/tree/master" do
subject { project_tree_path(project, project.repository.root_ref) }
it { is_expected.to be_allowed_for(:admin) }
@@ -43,7 +43,7 @@ describe "Private Project Access" do
it { is_expected.to be_denied_for(:visitor) }
end
- describe "GET /:project_path/commits/master" do
+ describe "GET /:project_path/-/commits/master" do
subject { project_commits_path(project, project.repository.root_ref, limit: 1) }
it { is_expected.to be_allowed_for(:admin) }
@@ -57,7 +57,7 @@ describe "Private Project Access" do
it { is_expected.to be_denied_for(:visitor) }
end
- describe "GET /:project_path/commit/:sha" do
+ describe "GET /:project_path/-/commit/:sha" do
subject { project_commit_path(project, project.repository.commit) }
it { is_expected.to be_allowed_for(:admin) }
@@ -71,7 +71,7 @@ describe "Private Project Access" do
it { is_expected.to be_denied_for(:visitor) }
end
- describe "GET /:project_path/compare" do
+ describe "GET /:project_path/-/compare" do
subject { project_compare_index_path(project) }
it { is_expected.to be_allowed_for(:admin) }
@@ -127,7 +127,7 @@ describe "Private Project Access" do
it { is_expected.to be_denied_for(:visitor) }
end
- describe "GET /:project_path/blob" do
+ describe "GET /:project_path/-/blob" do
let(:commit) { project.repository.commit }
subject { project_blob_path(project, File.join(commit.id, '.gitignore')) }
@@ -215,7 +215,7 @@ describe "Private Project Access" do
it { is_expected.to be_denied_for(:visitor) }
end
- describe "GET /:project_path/merge_requests" do
+ describe "GET /:project_path/-/merge_requests" do
subject { project_merge_requests_path(project) }
it { is_expected.to be_allowed_for(:admin) }
@@ -229,7 +229,7 @@ describe "Private Project Access" do
it { is_expected.to be_denied_for(:visitor) }
end
- describe "GET /:project_path/branches" do
+ describe "GET /:project_path/-/branches" do
subject { project_branches_path(project) }
before do
@@ -250,7 +250,7 @@ describe "Private Project Access" do
it { is_expected.to be_denied_for(:visitor) }
end
- describe "GET /:project_path/tags" do
+ describe "GET /:project_path/-/tags" do
subject { project_tags_path(project) }
before do
diff --git a/spec/features/security/project/public_access_spec.rb b/spec/features/security/project/public_access_spec.rb
index 8e07af61c8b..24bbb8d9b9e 100644
--- a/spec/features/security/project/public_access_spec.rb
+++ b/spec/features/security/project/public_access_spec.rb
@@ -29,7 +29,7 @@ describe "Public Project Access" do
it { is_expected.to be_allowed_for(:visitor) }
end
- describe "GET /:project_path/tree/master" do
+ describe "GET /:project_path/-/tree/master" do
subject { project_tree_path(project, project.repository.root_ref) }
it { is_expected.to be_allowed_for(:admin) }
@@ -43,7 +43,7 @@ describe "Public Project Access" do
it { is_expected.to be_allowed_for(:visitor) }
end
- describe "GET /:project_path/commits/master" do
+ describe "GET /:project_path/-/commits/master" do
subject { project_commits_path(project, project.repository.root_ref, limit: 1) }
it { is_expected.to be_allowed_for(:admin) }
@@ -57,7 +57,7 @@ describe "Public Project Access" do
it { is_expected.to be_allowed_for(:visitor) }
end
- describe "GET /:project_path/commit/:sha" do
+ describe "GET /:project_path/-/commit/:sha" do
subject { project_commit_path(project, project.repository.commit) }
it { is_expected.to be_allowed_for(:admin) }
@@ -71,7 +71,7 @@ describe "Public Project Access" do
it { is_expected.to be_allowed_for(:visitor) }
end
- describe "GET /:project_path/compare" do
+ describe "GET /:project_path/-/compare" do
subject { project_compare_index_path(project) }
it { is_expected.to be_allowed_for(:admin) }
@@ -345,7 +345,7 @@ describe "Public Project Access" do
it { is_expected.to be_denied_for(:visitor) }
end
- describe "GET /:project_path/blob" do
+ describe "GET /:project_path/-/blob" do
let(:commit) { project.repository.commit }
subject { project_blob_path(project, File.join(commit.id, '.gitignore')) }
@@ -446,7 +446,7 @@ describe "Public Project Access" do
it { is_expected.to be_denied_for(:visitor) }
end
- describe "GET /:project_path/merge_requests" do
+ describe "GET /:project_path/-/merge_requests" do
subject { project_merge_requests_path(project) }
it { is_expected.to be_allowed_for(:admin) }
@@ -460,7 +460,7 @@ describe "Public Project Access" do
it { is_expected.to be_allowed_for(:visitor) }
end
- describe "GET /:project_path/merge_requests/new" do
+ describe "GET /:project_path/-/merge_requests/new" do
subject { project_new_merge_request_path(project) }
it { is_expected.to be_allowed_for(:admin) }
@@ -474,7 +474,7 @@ describe "Public Project Access" do
it { is_expected.to be_denied_for(:visitor) }
end
- describe "GET /:project_path/branches" do
+ describe "GET /:project_path/-/branches" do
subject { project_branches_path(project) }
before do
@@ -495,7 +495,7 @@ describe "Public Project Access" do
it { is_expected.to be_allowed_for(:visitor) }
end
- describe "GET /:project_path/tags" do
+ describe "GET /:project_path/-/tags" do
subject { project_tags_path(project) }
before do
diff --git a/spec/frontend/monitoring/store/mutations_spec.js b/spec/frontend/monitoring/store/mutations_spec.js
index b0ac42e0e5f..d9aebafb9ec 100644
--- a/spec/frontend/monitoring/store/mutations_spec.js
+++ b/spec/frontend/monitoring/store/mutations_spec.js
@@ -91,16 +91,37 @@ describe('Monitoring mutations', () => {
expect(stateCopy.projectPath).toEqual('/gitlab-org/gitlab-foss');
});
- it('should not remove default value of logsPath', () => {
+ it('should not remove previously set properties', () => {
const defaultLogsPath = stateCopy.logsPath;
mutations[types.SET_ENDPOINTS](stateCopy, {
+ logsPath: defaultLogsPath,
+ });
+ mutations[types.SET_ENDPOINTS](stateCopy, {
dashboardEndpoint: 'dashboard.json',
});
+ mutations[types.SET_ENDPOINTS](stateCopy, {
+ projectPath: '/gitlab-org/gitlab-foss',
+ });
- expect(stateCopy.logsPath).toBe(defaultLogsPath);
+ expect(stateCopy).toMatchObject({
+ logsPath: defaultLogsPath,
+ dashboardEndpoint: 'dashboard.json',
+ projectPath: '/gitlab-org/gitlab-foss',
+ });
+ });
+
+ it('should not update unknown properties', () => {
+ mutations[types.SET_ENDPOINTS](stateCopy, {
+ dashboardEndpoint: 'dashboard.json',
+ someOtherProperty: 'some invalid value', // someOtherProperty is not allowed
+ });
+
+ expect(stateCopy.dashboardEndpoint).toBe('dashboard.json');
+ expect(stateCopy.someOtherProperty).toBeUndefined();
});
});
+
describe('Individual panel/metric results', () => {
const metricId = '12_system_metrics_kubernetes_container_memory_total';
const result = [
diff --git a/spec/frontend/releases/detail/components/app_spec.js b/spec/frontend/releases/components/app_edit_spec.js
index 894cd3a8f14..cb940facbd6 100644
--- a/spec/frontend/releases/detail/components/app_spec.js
+++ b/spec/frontend/releases/components/app_edit_spec.js
@@ -1,10 +1,10 @@
import Vuex from 'vuex';
import { mount } from '@vue/test-utils';
-import ReleaseDetailApp from '~/releases/detail/components/app.vue';
-import { release } from '../../mock_data';
+import ReleaseEditApp from '~/releases/components/app_edit.vue';
+import { release } from '../mock_data';
import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';
-describe('Release detail component', () => {
+describe('Release edit component', () => {
let wrapper;
let releaseClone;
let actions;
@@ -27,9 +27,17 @@ describe('Release detail component', () => {
navigateToReleasesPage: jest.fn(),
};
- const store = new Vuex.Store({ actions, state });
+ const store = new Vuex.Store({
+ modules: {
+ detail: {
+ namespaced: true,
+ actions,
+ state,
+ },
+ },
+ });
- wrapper = mount(ReleaseDetailApp, {
+ wrapper = mount(ReleaseEditApp, {
store,
});
diff --git a/spec/frontend/releases/list/components/evidence_block_spec.js b/spec/frontend/releases/components/evidence_block_spec.js
index 39f3975f665..7b896575965 100644
--- a/spec/frontend/releases/list/components/evidence_block_spec.js
+++ b/spec/frontend/releases/components/evidence_block_spec.js
@@ -2,8 +2,8 @@ import { mount } from '@vue/test-utils';
import { GlLink } from '@gitlab/ui';
import { truncateSha } from '~/lib/utils/text_utility';
import Icon from '~/vue_shared/components/icon.vue';
-import { release } from '../../mock_data';
-import EvidenceBlock from '~/releases/list/components/evidence_block.vue';
+import { release } from '../mock_data';
+import EvidenceBlock from '~/releases/components/evidence_block.vue';
import ClipboardButton from '~/vue_shared/components/clipboard_button.vue';
describe('Evidence Block', () => {
diff --git a/spec/frontend/releases/list/components/release_block_footer_spec.js b/spec/frontend/releases/components/release_block_footer_spec.js
index 07f61303e33..4125d5c7e74 100644
--- a/spec/frontend/releases/list/components/release_block_footer_spec.js
+++ b/spec/frontend/releases/components/release_block_footer_spec.js
@@ -1,9 +1,9 @@
import { mount } from '@vue/test-utils';
import { GlLink } from '@gitlab/ui';
import { trimText } from 'helpers/text_helper';
-import ReleaseBlockFooter from '~/releases/list/components/release_block_footer.vue';
+import ReleaseBlockFooter from '~/releases/components/release_block_footer.vue';
import Icon from '~/vue_shared/components/icon.vue';
-import { release } from '../../mock_data';
+import { release } from '../mock_data';
import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';
jest.mock('~/vue_shared/mixins/timeago', () => ({
diff --git a/spec/frontend/releases/list/components/release_block_header_spec.js b/spec/frontend/releases/components/release_block_header_spec.js
index 1f2331635d6..157df15ff3c 100644
--- a/spec/frontend/releases/list/components/release_block_header_spec.js
+++ b/spec/frontend/releases/components/release_block_header_spec.js
@@ -1,9 +1,9 @@
import { shallowMount } from '@vue/test-utils';
import { cloneDeep, merge } from 'lodash';
import { GlLink } from '@gitlab/ui';
-import ReleaseBlockHeader from '~/releases/list/components/release_block_header.vue';
+import ReleaseBlockHeader from '~/releases/components/release_block_header.vue';
import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';
-import { release as originalRelease } from '../../mock_data';
+import { release as originalRelease } from '../mock_data';
describe('Release block header', () => {
let wrapper;
diff --git a/spec/frontend/releases/list/components/release_block_milestone_info_spec.js b/spec/frontend/releases/components/release_block_milestone_info_spec.js
index 8a63dbbdca7..5a3204a4ce2 100644
--- a/spec/frontend/releases/list/components/release_block_milestone_info_spec.js
+++ b/spec/frontend/releases/components/release_block_milestone_info_spec.js
@@ -1,9 +1,9 @@
import { mount } from '@vue/test-utils';
import { GlProgressBar, GlLink, GlBadge, GlButton } from '@gitlab/ui';
import { trimText } from 'helpers/text_helper';
-import ReleaseBlockMilestoneInfo from '~/releases/list/components/release_block_milestone_info.vue';
-import { milestones } from '../../mock_data';
-import { MAX_MILESTONES_TO_DISPLAY } from '~/releases/list/constants';
+import ReleaseBlockMilestoneInfo from '~/releases/components/release_block_milestone_info.vue';
+import { milestones } from '../mock_data';
+import { MAX_MILESTONES_TO_DISPLAY } from '~/releases/constants';
describe('Release block milestone info', () => {
let wrapper;
diff --git a/spec/frontend/releases/list/components/release_block_spec.js b/spec/frontend/releases/components/release_block_spec.js
index 0e8d569f326..aba1b8aff41 100644
--- a/spec/frontend/releases/list/components/release_block_spec.js
+++ b/spec/frontend/releases/components/release_block_spec.js
@@ -1,11 +1,11 @@
import $ from 'jquery';
import { mount } from '@vue/test-utils';
import { first } from 'underscore';
-import EvidenceBlock from '~/releases/list/components/evidence_block.vue';
-import ReleaseBlock from '~/releases/list/components/release_block.vue';
-import ReleaseBlockFooter from '~/releases/list/components/release_block_footer.vue';
+import EvidenceBlock from '~/releases/components/evidence_block.vue';
+import ReleaseBlock from '~/releases/components/release_block.vue';
+import ReleaseBlockFooter from '~/releases/components/release_block_footer.vue';
import timeagoMixin from '~/vue_shared/mixins/timeago';
-import { release } from '../../mock_data';
+import { release } from '../mock_data';
import Icon from '~/vue_shared/components/icon.vue';
import { scrollToElement } from '~/lib/utils/common_utils';
diff --git a/spec/frontend/releases/detail/store/actions_spec.js b/spec/frontend/releases/stores/modules/detail/actions_spec.js
index 5a1447aa4fc..0c2763822c9 100644
--- a/spec/frontend/releases/detail/store/actions_spec.js
+++ b/spec/frontend/releases/stores/modules/detail/actions_spec.js
@@ -1,10 +1,10 @@
import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';
import testAction from 'helpers/vuex_action_helper';
-import * as actions from '~/releases/detail/store/actions';
-import * as types from '~/releases/detail/store/mutation_types';
-import { release } from '../../mock_data';
-import state from '~/releases/detail/store/state';
+import * as actions from '~/releases/stores/modules/detail/actions';
+import * as types from '~/releases/stores/modules/detail/mutation_types';
+import { release } from '../../../mock_data';
+import state from '~/releases/stores/modules/detail/state';
import createFlash from '~/flash';
import { redirectTo } from '~/lib/utils/url_utility';
import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';
diff --git a/spec/frontend/releases/detail/store/mutations_spec.js b/spec/frontend/releases/stores/modules/detail/mutations_spec.js
index 106a40c812e..81b2dde75ab 100644
--- a/spec/frontend/releases/detail/store/mutations_spec.js
+++ b/spec/frontend/releases/stores/modules/detail/mutations_spec.js
@@ -5,10 +5,10 @@
* is resolved
*/
-import state from '~/releases/detail/store/state';
-import mutations from '~/releases/detail/store/mutations';
-import * as types from '~/releases/detail/store/mutation_types';
-import { release } from '../../mock_data';
+import state from '~/releases/stores/modules/detail/state';
+import mutations from '~/releases/stores/modules/detail/mutations';
+import * as types from '~/releases/stores/modules/detail/mutation_types';
+import { release } from '../../../mock_data';
describe('Release detail mutations', () => {
let stateClone;
diff --git a/spec/javascripts/releases/list/components/app_spec.js b/spec/javascripts/releases/components/app_index_spec.js
index de6208ab1fd..bcf062f357a 100644
--- a/spec/javascripts/releases/list/components/app_spec.js
+++ b/spec/javascripts/releases/components/app_index_spec.js
@@ -1,16 +1,17 @@
import _ from 'underscore';
import Vue from 'vue';
import { mountComponentWithStore } from 'spec/helpers/vue_mount_component_helper';
-import app from '~/releases/list/components/app.vue';
-import createStore from '~/releases/list/store';
+import app from '~/releases/components/app_index.vue';
+import createStore from '~/releases/stores';
+import listModule from '~/releases/stores/modules/list';
import api from '~/api';
-import { resetStore } from '../store/helpers';
+import { resetStore } from '../stores/modules/list/helpers';
import {
pageInfoHeadersWithoutPagination,
pageInfoHeadersWithPagination,
release,
releases,
-} from '../../mock_data';
+} from '../mock_data';
describe('Releases App ', () => {
const Component = Vue.extend(app);
@@ -25,7 +26,7 @@ describe('Releases App ', () => {
};
beforeEach(() => {
- store = createStore();
+ store = createStore({ list: listModule });
releasesPagination = _.range(21).map(index => ({ ...release, tag_name: `${index}.00` }));
});
diff --git a/spec/javascripts/releases/list/store/actions_spec.js b/spec/javascripts/releases/stores/modules/list/actions_spec.js
index f03e019b95c..037c9d8d54a 100644
--- a/spec/javascripts/releases/list/store/actions_spec.js
+++ b/spec/javascripts/releases/stores/modules/list/actions_spec.js
@@ -4,12 +4,12 @@ import {
fetchReleases,
receiveReleasesSuccess,
receiveReleasesError,
-} from '~/releases/list/store/actions';
-import state from '~/releases/list/store/state';
-import * as types from '~/releases/list/store/mutation_types';
+} from '~/releases/stores/modules/list/actions';
+import state from '~/releases/stores/modules/list/state';
+import * as types from '~/releases/stores/modules/list/mutation_types';
import api from '~/api';
import { parseIntPagination } from '~/lib/utils/common_utils';
-import { pageInfoHeadersWithoutPagination, releases } from '../../mock_data';
+import { pageInfoHeadersWithoutPagination, releases } from '../../../mock_data';
describe('Releases State actions', () => {
let mockedState;
diff --git a/spec/javascripts/releases/list/store/helpers.js b/spec/javascripts/releases/stores/modules/list/helpers.js
index fbc89ec2148..435ca36047e 100644
--- a/spec/javascripts/releases/list/store/helpers.js
+++ b/spec/javascripts/releases/stores/modules/list/helpers.js
@@ -1,4 +1,4 @@
-import state from '~/releases/list/store/state';
+import state from '~/releases/stores/modules/list/state';
// eslint-disable-next-line import/prefer-default-export
export const resetStore = store => {
diff --git a/spec/javascripts/releases/list/store/mutations_spec.js b/spec/javascripts/releases/stores/modules/list/mutations_spec.js
index d756c69d53b..3035b916ff6 100644
--- a/spec/javascripts/releases/list/store/mutations_spec.js
+++ b/spec/javascripts/releases/stores/modules/list/mutations_spec.js
@@ -1,8 +1,8 @@
-import state from '~/releases/list/store/state';
-import mutations from '~/releases/list/store/mutations';
-import * as types from '~/releases/list/store/mutation_types';
+import state from '~/releases/stores/modules/list/state';
+import mutations from '~/releases/stores/modules/list/mutations';
+import * as types from '~/releases/stores/modules/list/mutation_types';
import { parseIntPagination } from '~/lib/utils/common_utils';
-import { pageInfoHeadersWithoutPagination, releases } from '../../mock_data';
+import { pageInfoHeadersWithoutPagination, releases } from '../../../mock_data';
describe('Releases Store Mutations', () => {
let stateCopy;
diff --git a/spec/lib/gitlab/background_migration/link_lfs_objects_spec.rb b/spec/lib/gitlab/background_migration/link_lfs_objects_spec.rb
new file mode 100644
index 00000000000..2a33af2c644
--- /dev/null
+++ b/spec/lib/gitlab/background_migration/link_lfs_objects_spec.rb
@@ -0,0 +1,66 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::BackgroundMigration::LinkLfsObjects, :migration, schema: 2020_02_10_062432 do
+ let(:namespaces) { table(:namespaces) }
+ let(:projects) { table(:projects) }
+ let(:fork_networks) { table(:fork_networks) }
+ let(:fork_network_members) { table(:fork_network_members) }
+ let(:lfs_objects) { table(:lfs_objects) }
+ let(:lfs_objects_projects) { table(:lfs_objects_projects) }
+ let(:namespace) { namespaces.create(name: 'GitLab', path: 'gitlab') }
+ let(:source_project) { projects.create(namespace_id: namespace.id) }
+ let(:another_source_project) { projects.create(namespace_id: namespace.id) }
+ let(:project) { projects.create(namespace_id: namespace.id) }
+ let(:another_project) { projects.create(namespace_id: namespace.id) }
+ let(:other_project) { projects.create(namespace_id: namespace.id) }
+ let(:linked_project) { projects.create(namespace_id: namespace.id) }
+ let(:fork_network) { fork_networks.create(root_project_id: source_project.id) }
+ let(:another_fork_network) { fork_networks.create(root_project_id: another_source_project.id) }
+ let(:lfs_object) { lfs_objects.create(oid: 'abc123', size: 100) }
+ let(:another_lfs_object) { lfs_objects.create(oid: 'def456', size: 200) }
+
+ before do
+ # Create links between projects
+ fork_network_members.create(fork_network_id: fork_network.id, project_id: source_project.id, forked_from_project_id: nil)
+
+ [project, another_project, linked_project].each do |p|
+ fork_network_members.create(
+ fork_network_id: fork_network.id,
+ project_id: p.id,
+ forked_from_project_id: fork_network.root_project_id
+ )
+ end
+
+ fork_network_members.create(fork_network_id: another_fork_network.id, project_id: another_source_project.id, forked_from_project_id: nil)
+ fork_network_members.create(fork_network_id: another_fork_network.id, project_id: other_project.id, forked_from_project_id: another_fork_network.root_project_id)
+
+ # Links LFS objects to some projects
+ [source_project, another_source_project, linked_project].each do |p|
+ lfs_objects_projects.create(lfs_object_id: lfs_object.id, project_id: p.id)
+ lfs_objects_projects.create(lfs_object_id: another_lfs_object.id, project_id: p.id)
+ end
+ end
+
+ it 'creates LfsObjectsProject records for forks within the specified range of project IDs' do
+ expect { subject.perform(project.id, other_project.id) }.to change { lfs_objects_projects.count }.by(6)
+
+ expect(lfs_object_ids_for(project)).to match_array(lfs_object_ids_for(source_project))
+ expect(lfs_object_ids_for(another_project)).to match_array(lfs_object_ids_for(source_project))
+ expect(lfs_object_ids_for(other_project)).to match_array(lfs_object_ids_for(another_source_project))
+
+ expect { subject.perform(project.id, other_project.id) }.not_to change { lfs_objects_projects.count }
+ end
+
+ context 'when it is not necessary to create LfsObjectProject records' do
+ it 'does not create LfsObjectProject records' do
+ expect { subject.perform(linked_project.id, linked_project.id) }
+ .not_to change { lfs_objects_projects.count }
+ end
+ end
+
+ def lfs_object_ids_for(project)
+ lfs_objects_projects.where(project_id: project.id).pluck(:lfs_object_id)
+ end
+end
diff --git a/spec/lib/gitlab/import_export/group_object_builder_spec.rb b/spec/lib/gitlab/import_export/group_object_builder_spec.rb
index 7950a937608..08b2dae1147 100644
--- a/spec/lib/gitlab/import_export/group_object_builder_spec.rb
+++ b/spec/lib/gitlab/import_export/group_object_builder_spec.rb
@@ -26,6 +26,16 @@ describe Gitlab::ImportExport::GroupObjectBuilder do
expect(label.persisted?).to be true
end
+
+ context 'when description is an empty string' do
+ let(:label_attributes) { base_attributes.merge('type' => 'GroupLabel', 'description' => '') }
+
+ it 'finds the existing group label' do
+ group_label = create(:group_label, label_attributes)
+
+ expect(described_class.build(Label, label_attributes)).to eq(group_label)
+ end
+ end
end
context 'milestones' do
@@ -41,4 +51,16 @@ describe Gitlab::ImportExport::GroupObjectBuilder do
expect(milestone.persisted?).to be true
end
end
+
+ describe '#initialize' do
+ context 'when attributes contain description as empty string' do
+ let(:attributes) { base_attributes.merge('description' => '') }
+
+ it 'converts empty string to nil' do
+ builder = described_class.new(Label, attributes)
+
+ expect(builder.send(:attributes)).to include({ 'description' => nil })
+ end
+ end
+ end
end
diff --git a/spec/migrations/schedule_link_lfs_objects_spec.rb b/spec/migrations/schedule_link_lfs_objects_spec.rb
new file mode 100644
index 00000000000..87632bc7648
--- /dev/null
+++ b/spec/migrations/schedule_link_lfs_objects_spec.rb
@@ -0,0 +1,82 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require Rails.root.join('db', 'post_migrate', '20200210062432_schedule_link_lfs_objects.rb')
+
+describe ScheduleLinkLfsObjects, :migration, :sidekiq do
+ let(:namespaces) { table(:namespaces) }
+ let(:projects) { table(:projects) }
+ let(:fork_networks) { table(:fork_networks) }
+ let(:fork_network_members) { table(:fork_network_members) }
+ let(:lfs_objects) { table(:lfs_objects) }
+ let(:lfs_objects_projects) { table(:lfs_objects_projects) }
+ let(:namespace) { namespaces.create(name: 'GitLab', path: 'gitlab') }
+ let(:fork_network) { fork_networks.create(root_project_id: source_project.id) }
+ let(:another_fork_network) { fork_networks.create(root_project_id: another_source_project.id) }
+ let(:source_project) { projects.create(namespace_id: namespace.id) }
+ let(:another_source_project) { projects.create(namespace_id: namespace.id) }
+ let(:project) { projects.create(namespace_id: namespace.id) }
+ let(:another_project) { projects.create(namespace_id: namespace.id) }
+ let(:other_project) { projects.create(namespace_id: namespace.id) }
+ let(:linked_project) { projects.create(namespace_id: namespace.id) }
+ let(:lfs_object) { lfs_objects.create(oid: 'abc123', size: 100) }
+ let(:another_lfs_object) { lfs_objects.create(oid: 'def456', size: 200) }
+
+ before do
+ # Create links between projects
+ fork_network_members.create(fork_network_id: fork_network.id, project_id: source_project.id, forked_from_project_id: nil)
+
+ [project, another_project, linked_project].each do |p|
+ fork_network_members.create(
+ fork_network_id: fork_network.id,
+ project_id: p.id,
+ forked_from_project_id: fork_network.root_project_id
+ )
+ end
+
+ fork_network_members.create(fork_network_id: another_fork_network.id, project_id: another_source_project.id, forked_from_project_id: nil)
+ fork_network_members.create(fork_network_id: another_fork_network.id, project_id: other_project.id, forked_from_project_id: another_fork_network.root_project_id)
+ end
+
+ context 'when there are forks to be backfilled' do
+ before do
+ stub_const("#{described_class.name}::BATCH_SIZE", 2)
+
+ # Links LFS objects to some projects
+ [source_project, another_source_project, linked_project].each do |p|
+ lfs_objects_projects.create(lfs_object_id: lfs_object.id, project_id: p.id)
+ lfs_objects_projects.create(lfs_object_id: another_lfs_object.id, project_id: p.id)
+ end
+ end
+
+ it 'schedules background migration to link LFS objects' do
+ Sidekiq::Testing.fake! do
+ migrate!
+
+ expect(BackgroundMigrationWorker.jobs.size).to eq(2)
+ expect(described_class::MIGRATION)
+ .to be_scheduled_delayed_migration(2.minutes, project.id, another_project.id)
+ expect(described_class::MIGRATION)
+ .to be_scheduled_delayed_migration(4.minutes, other_project.id, other_project.id)
+ end
+ end
+ end
+
+ context 'when there are no forks to be backfilled' do
+ before do
+ # Links LFS objects to all projects
+ projects.all.each do |p|
+ lfs_objects_projects.create(lfs_object_id: lfs_object.id, project_id: p.id)
+ lfs_objects_projects.create(lfs_object_id: another_lfs_object.id, project_id: p.id)
+ end
+ end
+
+ it 'does not schedule any job' do
+ Sidekiq::Testing.fake! do
+ migrate!
+
+ expect(BackgroundMigrationWorker.jobs.size).to eq(0)
+ end
+ end
+ end
+end
diff --git a/spec/routing/project_routing_spec.rb b/spec/routing/project_routing_spec.rb
index 40c9dd565ff..e503f1a4231 100644
--- a/spec/routing/project_routing_spec.rb
+++ b/spec/routing/project_routing_spec.rb
@@ -577,7 +577,7 @@ describe 'project routing' do
end
end
- # project_blob GET /:project_id/blob/:id(.:format) blob#show {id: /[^\0]+/, project_id: /[^\/]+/}
+ # project_blob GET /:project_id/-/blob/:id(.:format) blob#show {id: /[^\0]+/, project_id: /[^\/]+/}
describe Projects::BlobController, 'routing' do
it 'to #show' do
expect(get('/gitlab/gitlabhq/-/blob/master/app/models/project.rb')).to route_to('projects/blob#show', namespace_id: 'gitlab', project_id: 'gitlabhq', id: 'master/app/models/project.rb')
@@ -600,7 +600,7 @@ describe 'project routing' do
end
end
- # project_tree GET /:project_id/tree/:id(.:format) tree#show {id: /[^\0]+/, project_id: /[^\/]+/}
+ # project_tree GET /:project_id/-/tree/:id(.:format) tree#show {id: /[^\0]+/, project_id: /[^\/]+/}
describe Projects::TreeController, 'routing' do
it 'to #show' do
expect(get('/gitlab/gitlabhq/-/tree/master/app/models/project.rb')).to route_to('projects/tree#show', namespace_id: 'gitlab', project_id: 'gitlabhq', id: 'master/app/models/project.rb')
@@ -621,8 +621,8 @@ describe 'project routing' do
end
end
- # project_find_file GET /:namespace_id/:project_id/find_file/*id(.:format) projects/find_file#show {:id=>/[^\0]+/, :namespace_id=>/[a-zA-Z.0-9_\-]+/, :project_id=>/[a-zA-Z.0-9_\-]+(?<!\.atom)/, :format=>/html/}
- # project_files GET /:namespace_id/:project_id/files/*id(.:format) projects/find_file#list {:id=>/(?:[^.]|\.(?!json$))+/, :namespace_id=>/[a-zA-Z.0-9_\-]+/, :project_id=>/[a-zA-Z.0-9_\-]+(?<!\.atom)/, :format=>/json/}
+ # project_find_file GET /:namespace_id/:project_id/-/find_file/*id(.:format) projects/find_file#show {:id=>/[^\0]+/, :namespace_id=>/[a-zA-Z.0-9_\-]+/, :project_id=>/[a-zA-Z.0-9_\-]+(?<!\.atom)/, :format=>/html/}
+ # project_files GET /:namespace_id/:project_id/-/files/*id(.:format) projects/find_file#list {:id=>/(?:[^.]|\.(?!json$))+/, :namespace_id=>/[a-zA-Z.0-9_\-]+/, :project_id=>/[a-zA-Z.0-9_\-]+(?<!\.atom)/, :format=>/json/}
describe Projects::FindFileController, 'routing' do
it 'to #show' do
expect(get('/gitlab/gitlabhq/-/find_file/master')).to route_to('projects/find_file#show', namespace_id: 'gitlab', project_id: 'gitlabhq', id: 'master')
@@ -677,7 +677,7 @@ describe 'project routing' do
end
end
- # project_raw GET /:project_id/raw/:id(.:format) raw#show {id: /[^\0]+/, project_id: /[^\/]+/}
+ # project_raw GET /:project_id/-/raw/:id(.:format) raw#show {id: /[^\0]+/, project_id: /[^\/]+/}
describe Projects::RawController, 'routing' do
it 'to #show' do
newline_file = "new\n\nline.txt"
@@ -694,9 +694,9 @@ describe 'project routing' do
end
end
- # project_compare_index GET /:project_id/compare(.:format) compare#index {id: /[^\/]+/, project_id: /[^\/]+/}
- # POST /:project_id/compare(.:format) compare#create {id: /[^\/]+/, project_id: /[^\/]+/}
- # project_compare /:project_id/compare/:from...:to(.:format) compare#show {from: /.+/, to: /.+/, id: /[^\/]+/, project_id: /[^\/]+/}
+ # project_compare_index GET /:project_id/-/compare(.:format) compare#index {id: /[^\/]+/, project_id: /[^\/]+/}
+ # POST /:project_id/-/compare(.:format) compare#create {id: /[^\/]+/, project_id: /[^\/]+/}
+ # project_compare /:project_id/-/compare/:from...:to(.:format) compare#show {from: /.+/, to: /.+/, id: /[^\/]+/, project_id: /[^\/]+/}
describe Projects::CompareController, 'routing' do
it 'to #index' do
expect(get('/gitlab/gitlabhq/-/compare')).to route_to('projects/compare#index', namespace_id: 'gitlab', project_id: 'gitlabhq')
diff --git a/spec/services/ci/pipeline_processing/shared_processing_service.rb b/spec/services/ci/pipeline_processing/shared_processing_service.rb
index 2349dedf370..ca003299535 100644
--- a/spec/services/ci/pipeline_processing/shared_processing_service.rb
+++ b/spec/services/ci/pipeline_processing/shared_processing_service.rb
@@ -880,6 +880,31 @@ shared_examples 'Pipeline Processing Service' do
end
end
+ context 'when a needed job is skipped', :sidekiq_inline do
+ let!(:linux_build) { create_build('linux:build', stage: 'build', stage_idx: 0) }
+ let!(:linux_rspec) { create_build('linux:rspec', stage: 'test', stage_idx: 1) }
+ let!(:deploy) do
+ create_build('deploy', stage: 'deploy', stage_idx: 2, scheduling_type: :dag, needs: [
+ create(:ci_build_need, name: 'linux:rspec')
+ ])
+ end
+
+ it 'skips the jobs depending on it' do
+ expect(process_pipeline).to be_truthy
+
+ expect(stages).to eq(%w(pending created created))
+ expect(all_builds.pending).to contain_exactly(linux_build)
+
+ linux_build.reset.drop!
+
+ expect(stages).to eq(%w(failed skipped skipped))
+ expect(all_builds.failed).to contain_exactly(linux_build)
+ expect(all_builds.skipped).to contain_exactly(linux_rspec, deploy)
+ end
+ end
+
+ private
+
def all_builds
pipeline.builds.order(:stage_idx, :id)
end
diff --git a/spec/services/ci/process_build_service_spec.rb b/spec/services/ci/process_build_service_spec.rb
index 704685417bb..abc5c18a523 100644
--- a/spec/services/ci/process_build_service_spec.rb
+++ b/spec/services/ci/process_build_service_spec.rb
@@ -22,6 +22,14 @@ describe Ci::ProcessBuildService, '#execute' do
end
end
+ context 'when current status is skipped' do
+ let(:current_status) { 'skipped' }
+
+ it 'changes the build status' do
+ expect { subject }.to change { build.status }.to('pending')
+ end
+ end
+
context 'when current status is failed' do
let(:current_status) { 'failed' }
@@ -114,4 +122,27 @@ describe Ci::ProcessBuildService, '#execute' do
end
end
end
+
+ context 'when build is scheduled with DAG' do
+ let(:pipeline) { create(:ci_pipeline, ref: 'master', project: project) }
+ let!(:build) { create(:ci_build, :created, when: :on_success, pipeline: pipeline, scheduling_type: :dag) }
+ let!(:other_build) { create(:ci_build, :created, when: :on_success, pipeline: pipeline) }
+ let!(:build_on_other_build) { create(:ci_build_need, build: build, name: other_build.name) }
+
+ context 'when current status is success' do
+ let(:current_status) { 'success' }
+
+ it 'enqueues the build' do
+ expect { subject }.to change { build.status }.to('pending')
+ end
+ end
+
+ context 'when current status is skipped' do
+ let(:current_status) { 'skipped' }
+
+ it 'skips the build' do
+ expect { subject }.to change { build.status }.to('skipped')
+ end
+ end
+ end
end