Move all EE specific specs to the ee/specs directory
EE specific code that resides in spec
should be moved to
corresponding EE specific tests that reside in ee/spec
.
Differences
spec/controllers/projects/project_members_controller_spec.rb https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/14823
diff --git a/spec/controllers/projects/project_members_controller_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/controllers/projects/project_members_controller_spec.rb
index 4141e41c7a7..1c3ada0dfa5 100644
--- a/spec/controllers/projects/project_members_controller_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/controllers/projects/project_members_controller_spec.rb
@@ -4,7 +4,8 @@ require('spec_helper')
describe Projects::ProjectMembersController do
let(:user) { create(:user) }
- let(:project) { create(:project, :public, :access_requestable) }
+ let(:project) { create(:project, :public, :access_requestable, namespace: namespace) }
+ let(:namespace) { create :group }
describe 'GET index' do
it 'has the project_members address with a 200 status code' do
@@ -315,6 +316,13 @@ describe Projects::ProjectMembersController do
end
describe 'POST apply_import' do
+ subject(:apply_import) do
+ post(:apply_import, params: {
+ namespace_id: project.namespace,
+ project_id: project,
+ source_project_id: another_project.id
+ })
+ end
let(:another_project) { create(:project, :private) }
let(:member) { create(:user) }
@@ -324,40 +332,44 @@ describe Projects::ProjectMembersController do
sign_in(user)
end
- shared_context 'import applied' do
- before do
- post(:apply_import, params: {
- namespace_id: project.namespace,
- project_id: project,
- source_project_id: another_project.id
- })
- end
- end
-
context 'when user can access source project members' do
before do
another_project.add_guest(user)
end
- include_context 'import applied'
-
it 'imports source project members' do
+ apply_import
+
expect(project.team_members).to include member
expect(response).to set_flash.to 'Successfully imported'
expect(response).to redirect_to(
project_project_members_path(project)
)
end
+
+ context 'and the project group has membership lock enabled' do
+ before do
+ project.namespace.update(membership_lock: true)
+ end
+
+ it 'responds with 403' do
+ apply_import
+
+ expect(response.status).to eq 403
+ end
+ end
end
context 'when user is not member of a source project' do
- include_context 'import applied'
-
it 'does not import team members' do
+ apply_import
+
expect(project.team_members).not_to include member
end
it 'responds with not found' do
+ apply_import
+
expect(response.status).to eq 404
end
end
@@ -365,40 +377,78 @@ describe Projects::ProjectMembersController do
describe 'POST create' do
let(:stranger) { create(:user) }
+ subject(:create_member) do
+ post :create, params: {
+ user_ids: stranger.id,
+ namespace_id: project.namespace,
+ access_level: access_level,
+ project_id: project
+ }
+ end
+ let(:access_level) { nil }
+
+ before do
+ project.add_maintainer(user)
+ sign_in(user)
+ end
context 'when creating owner' do
- before do
- project.add_maintainer(user)
- sign_in(user)
- end
+ let(:access_level) { Member::OWNER }
it 'does not create a member' do
- expect do
- post :create, params: {
- user_ids: stranger.id,
- namespace_id: project.namespace,
- access_level: Member::OWNER,
- project_id: project
- }
- end.to change { project.members.count }.by(0)
+ expect { create_member }.not_to change { project.members.count }
end
end
context 'when create maintainer' do
+ let(:access_level) { Member::MAINTAINER }
+
+ it 'creates a member' do
+ expect { create_member }.to change { project.members.count }.by(1)
+ end
+ end
+
+ context 'when project group has membership lock enabled' do
before do
- project.add_maintainer(user)
- sign_in(user)
+ project.namespace.update(membership_lock: true)
end
- it 'creates a member' do
- expect do
- post :create, params: {
- user_ids: stranger.id,
- namespace_id: project.namespace,
- access_level: Member::MAINTAINER,
- project_id: project
- }
- end.to change { project.members.count }.by(1)
+ it 'responds with 403' do
+ create_member
+
+ expect(response.status).to eq 403
+ end
+ end
+ end
+
+ describe 'GET import' do
+ subject(:import) do
+ get :import, params: {
+ namespace_id: project.namespace,
+ project_id: project
+ }
+ end
+
+ before do
+ project.add_maintainer(user)
+ sign_in(user)
+ end
+
+ it 'responds with 200' do
+ import
+
+ expect(response.status).to eq 200
+ end
+
+ context 'when project group has membership lock enabled' do
+ before do
+ project.namespace.update(membership_lock: true)
+ end
+
+ it 'responds with 403' do
+ import
+
+ expect(response.status).to eq 403
end
end
end
spec/db/schema_spec.rb: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/31109
diff --git a/spec/db/schema_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/db/schema_spec.rb
index 6cfec5f4017..74b2f7ebfed 100644
--- a/spec/db/schema_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/db/schema_spec.rb
@@ -1,12 +1,16 @@
# frozen_string_literal: true
require 'spec_helper'
+require Rails.root.join('ee', 'spec', 'db', 'schema_support')
describe 'Database schema' do
+ prepend ::EE::DB::SchemaSupport
+
let(:connection) { ActiveRecord::Base.connection }
let(:tables) { connection.tables }
# Use if you are certain that this column should not have a foreign key
+ # EE: edit the ee/spec/db/schema_support.rb
IGNORED_FK_COLUMNS = {
abuse_reports: %w[reporter_id user_id],
application_settings: %w[performance_bar_allowed_group_id slack_app_id snowplow_site_id],
spec/features/dashboard/todos/todos_filtering_spec.rb: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/31109
diff --git a/spec/features/dashboard/todos/todos_filtering_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/features/dashboard/todos/todos_filtering_spec.rb
index 85f865321cf..3ea42748936 100644
--- a/spec/features/dashboard/todos/todos_filtering_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/features/dashboard/todos/todos_filtering_spec.rb
@@ -4,23 +4,36 @@ describe 'Dashboard > User filters todos', :js do
let(:user_1) { create(:user, username: 'user_1', name: 'user_1') }
let(:user_2) { create(:user, username: 'user_2', name: 'user_2') }
- let(:project_1) { create(:project, name: 'project_1') }
- let(:project_2) { create(:project, name: 'project_2') }
+ let(:group1) { create(:group) }
+ let(:group2) { create(:group) }
- let(:issue) { create(:issue, title: 'issue', project: project_1) }
+ let(:project_1) { create(:project, name: 'project_1', namespace: group1) }
+ let(:project_2) { create(:project, name: 'project_2', namespace: group1) }
+ let(:project_3) { create(:project, name: 'project_3', namespace: group2) }
+
+ let(:issue1) { create(:issue, title: 'issue', project: project_1) }
+ let(:issue2) { create(:issue, title: 'issue', project: project_3) }
let!(:merge_request) { create(:merge_request, source_project: project_2, title: 'merge_request') }
before do
- create(:todo, user: user_1, author: user_2, project: project_1, target: issue, action: 1)
+ create(:todo, user: user_1, author: user_2, project: project_1, target: issue1, action: 1)
+ create(:todo, user: user_1, author: user_2, project: project_3, target: issue2, action: 1)
create(:todo, user: user_1, author: user_1, project: project_2, target: merge_request, action: 2)
project_1.add_developer(user_1)
project_2.add_developer(user_1)
+ project_3.add_developer(user_1)
sign_in(user_1)
visit dashboard_todos_path
end
+ it 'displays all todos without a filter' do
+ expect(page).to have_content issue1.to_reference(full: true)
+ expect(page).to have_content merge_request.to_reference(full: true)
+ expect(page).to have_content issue2.to_reference(full: true)
+ end
+
it 'filters by project' do
click_button 'Project'
within '.dropdown-menu-project' do
@@ -34,6 +47,20 @@ describe 'Dashboard > User filters todos', :js do
expect(page).not_to have_content project_2.full_name
end
+ it 'filters by group' do
+ click_button 'Group'
+ within '.dropdown-menu-group' do
+ fill_in 'Search groups', with: group1.full_name
+ click_link group1.full_name
+ end
+
+ wait_for_requests
+
+ expect(page).to have_content issue1.to_reference(full: true)
+ expect(page).to have_content merge_request.to_reference(full: true)
+ expect(page).not_to have_content issue2.to_reference(full: true)
+ end
+
context 'Author filter' do
it 'filters by author' do
click_button 'Author'
@@ -63,7 +90,7 @@ describe 'Dashboard > User filters todos', :js do
it 'shows only authors of existing done todos' do
user_3 = create :user
user_4 = create :user
- create(:todo, user: user_1, author: user_3, project: project_1, target: issue, action: 1, state: :done)
+ create(:todo, user: user_1, author: user_3, project: project_1, target: issue1, action: 1, state: :done)
create(:todo, user: user_1, author: user_4, project: project_2, target: merge_request, action: 2, state: :done)
project_1.add_developer(user_3)
@@ -92,14 +119,15 @@ describe 'Dashboard > User filters todos', :js do
wait_for_requests
- expect(find('.todos-list')).to have_content issue.to_reference
+ expect(find('.todos-list')).to have_content issue1.to_reference
+ expect(find('.todos-list')).to have_content issue2.to_reference
expect(find('.todos-list')).not_to have_content merge_request.to_reference
end
describe 'filter by action' do
before do
create(:todo, :build_failed, user: user_1, author: user_2, project: project_1)
- create(:todo, :marked, user: user_1, author: user_2, project: project_1, target: issue)
+ create(:todo, :marked, user: user_1, author: user_2, project: project_1, target: issue1)
end
it 'filters by Assigned' do
spec/features/protected_tags_spec.rb https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/31109
diff --git a/spec/features/protected_tags_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/features/protected_tags_spec.rb
index 652542b1719..7b9dde29ce9 100644
--- a/spec/features/protected_tags_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/features/protected_tags_spec.rb
@@ -14,6 +14,7 @@ describe 'Protected Tags', :js do
it "allows creating explicit protected tags" do
visit project_protected_tags_path(project)
set_protected_tag_name('some-tag')
+ set_allowed_to('create')
click_on "Protect"
within(".protected-tags-list") { expect(page).to have_content('some-tag') }
@@ -27,6 +28,7 @@ describe 'Protected Tags', :js do
visit project_protected_tags_path(project)
set_protected_tag_name('some-tag')
+ set_allowed_to('create')
click_on "Protect"
within(".protected-tags-list") { expect(page).to have_content(commit.id[0..7]) }
@@ -35,6 +37,7 @@ describe 'Protected Tags', :js do
it "displays an error message if the named tag does not exist" do
visit project_protected_tags_path(project)
set_protected_tag_name('some-tag')
+ set_allowed_to('create')
click_on "Protect"
within(".protected-tags-list") { expect(page).to have_content('tag was removed') }
@@ -45,6 +48,7 @@ describe 'Protected Tags', :js do
it "allows creating protected tags with a wildcard" do
visit project_protected_tags_path(project)
set_protected_tag_name('*-stable')
+ set_allowed_to('create')
click_on "Protect"
within(".protected-tags-list") { expect(page).to have_content('*-stable') }
@@ -58,6 +62,7 @@ describe 'Protected Tags', :js do
visit project_protected_tags_path(project)
set_protected_tag_name('*-stable')
+ set_allowed_to('create')
click_on "Protect"
within(".protected-tags-list") do
@@ -73,6 +78,7 @@ describe 'Protected Tags', :js do
visit project_protected_tags_path(project)
set_protected_tag_name('*-stable')
+ set_allowed_to('create')
click_on "Protect"
visit project_protected_tags_path(project)
spec/features/security/profile_access_spec.rb https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/14823
diff --git a/spec/features/security/profile_access_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/features/security/profile_access_spec.rb
index 044a47567be..9fa5ae0df7d 100644
--- a/spec/features/security/profile_access_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/features/security/profile_access_spec.rb
@@ -10,6 +10,7 @@ describe "Profile access" do
it { is_expected.to be_allowed_for :admin }
it { is_expected.to be_allowed_for :user }
+ it { is_expected.to be_allowed_for :auditor }
it { is_expected.to be_denied_for :visitor }
end
@@ -18,6 +19,7 @@ describe "Profile access" do
it { is_expected.to be_allowed_for :admin }
it { is_expected.to be_allowed_for :user }
+ it { is_expected.to be_allowed_for :auditor }
it { is_expected.to be_denied_for :visitor }
end
@@ -26,6 +28,7 @@ describe "Profile access" do
it { is_expected.to be_allowed_for :admin }
it { is_expected.to be_allowed_for :user }
+ it { is_expected.to be_allowed_for :auditor }
it { is_expected.to be_denied_for :visitor }
end
@@ -34,6 +37,7 @@ describe "Profile access" do
it { is_expected.to be_allowed_for :admin }
it { is_expected.to be_allowed_for :user }
+ it { is_expected.to be_allowed_for :auditor }
it { is_expected.to be_denied_for :visitor }
end
@@ -42,6 +46,7 @@ describe "Profile access" do
it { is_expected.to be_allowed_for :admin }
it { is_expected.to be_allowed_for :user }
+ it { is_expected.to be_allowed_for :auditor }
it { is_expected.to be_denied_for :visitor }
end
@@ -50,6 +55,7 @@ describe "Profile access" do
it { is_expected.to be_allowed_for :admin }
it { is_expected.to be_allowed_for :user }
+ it { is_expected.to be_allowed_for :auditor }
it { is_expected.to be_denied_for :visitor }
end
end
spec/features/security/project/private_access_spec.rb: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/31119
diff --git a/spec/features/security/project/private_access_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/features/security/project/private_access_spec.rb
index f380bc122a7..65dbae1c674 100644
--- a/spec/features/security/project/private_access_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/features/security/project/private_access_spec.rb
@@ -126,7 +126,7 @@ describe "Private Project Access" do
describe "GET /:project_path/blob" do
let(:commit) { project.repository.commit }
- subject { project_blob_path(project, File.join(commit.id, '.gitignore'))}
+ subject { project_blob_path(project, File.join(commit.id, '.gitignore')) }
it { is_expected.to be_allowed_for(:admin) }
it { is_expected.to be_allowed_for(:owner).of(project) }
spec/features/usage_stats_consent_spec.rb https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/31109
diff --git a/spec/features/usage_stats_consent_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/features/usage_stats_consent_spec.rb
index dd8f3179895..86da58581c5 100644
--- a/spec/features/usage_stats_consent_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/features/usage_stats_consent_spec.rb
@@ -8,7 +8,7 @@ describe 'Usage stats consent' do
let(:message) { 'To help improve GitLab, we would like to periodically collect usage information.' }
before do
- allow(user).to receive(:has_current_license?).and_return false
+ allow_any_instance_of(EE::User).to receive(:has_current_license?).and_return false
gitlab_sign_in(user)
end
spec/fixtures/lib/gitlab/metrics/dashboard/schemas/dashboard.json: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/31119
diff --git a/spec/fixtures/lib/gitlab/metrics/dashboard/schemas/dashboard.json b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/fixtures/lib/gitlab/metrics/dashboard/schemas/dashboard.json
index 1ee1205e29a..5d779a323c2 100644
--- a/spec/fixtures/lib/gitlab/metrics/dashboard/schemas/dashboard.json
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/fixtures/lib/gitlab/metrics/dashboard/schemas/dashboard.json
@@ -1,6 +1,10 @@
{
"type": "object",
- "required": ["dashboard", "priority", "panel_groups"],
+ "required": [
+ "dashboard",
+ "priority",
+ "panel_groups"
+ ],
"properties": {
"dashboard": { "type": "string" },
"priority": { "type": "number" },
spec/lib/banzai/filter/wiki_link_filter_spec.rb https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/31109
diff --git a/spec/lib/banzai/filter/wiki_link_filter_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/lib/banzai/filter/wiki_link_filter_spec.rb
index cce1cd0b284..75745310d43 100644
--- a/spec/lib/banzai/filter/wiki_link_filter_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/lib/banzai/filter/wiki_link_filter_spec.rb
@@ -88,7 +88,7 @@ describe Banzai::Filter::WikiLinkFilter do
"javascript:",
"java\0script:",
"  javascript:"
- ]
+ ]
invalid_slugs.each do |slug|
context "with the slug #{slug}" do
spec/lib/gitlab/ci/config/entry/job_spec.rb https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/14823
diff --git a/spec/lib/gitlab/ci/config/entry/job_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/lib/gitlab/ci/config/entry/job_spec.rb
index 25766d34c65..c34e3ec9af1 100644
--- a/spec/lib/gitlab/ci/config/entry/job_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/lib/gitlab/ci/config/entry/job_spec.rb
@@ -176,6 +176,46 @@ describe Gitlab::Ci::Config::Entry::Job do
end
end
+ context 'when parallel value is not correct' do
+ context 'when it is not a numeric value' do
+ let(:config) { { parallel: true } }
+
+ it 'returns error about invalid type' do
+ expect(entry).not_to be_valid
+ expect(entry.errors).to include 'job parallel is not a number'
+ end
+ end
+
+ context 'when it is lower than two' do
+ let(:config) { { parallel: 1 } }
+
+ it 'returns error about value too low' do
+ expect(entry).not_to be_valid
+ expect(entry.errors)
+ .to include 'job parallel must be greater than or equal to 2'
+ end
+ end
+
+ context 'when it is bigger than 50' do
+ let(:config) { { parallel: 51 } }
+
+ it 'returns error about value too high' do
+ expect(entry).not_to be_valid
+ expect(entry.errors)
+ .to include 'job parallel must be less than or equal to 50'
+ end
+ end
+
+ context 'when it is not an integer' do
+ let(:config) { { parallel: 1.5 } }
+
+ it 'returns error about wrong value' do
+ expect(entry).not_to be_valid
+ expect(entry.errors).to include 'job parallel must be an integer'
+ end
+ end
+ end
+
context 'when delayed job' do
context 'when start_in is specified' do
let(:config) { { script: 'echo', when: 'delayed', start_in: '1 day' } }
spec/lib/gitlab/git_ref_validator_spec.rb https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/14823
diff --git a/spec/lib/gitlab/git_ref_validator_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/lib/gitlab/git_ref_validator_spec.rb
index b63389af29f..6fc41cd64f9 100644
--- a/spec/lib/gitlab/git_ref_validator_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/lib/gitlab/git_ref_validator_spec.rb
@@ -4,66 +4,66 @@ describe Gitlab::GitRefValidator do
using RSpec::Parameterized::TableSyntax
context '.validate' do
- it { expect(described_class.validate('feature/new')).to be true }
- it { expect(described_class.validate('implement_@all')).to be true }
- it { expect(described_class.validate('my_new_feature')).to be true }
- it { expect(described_class.validate('my-branch')).to be true }
- it { expect(described_class.validate('#1')).to be true }
- it { expect(described_class.validate('feature/refs/heads/foo')).to be true }
- it { expect(described_class.validate('feature/~new/')).to be false }
- it { expect(described_class.validate('feature/^new/')).to be false }
- it { expect(described_class.validate('feature/:new/')).to be false }
- it { expect(described_class.validate('feature/?new/')).to be false }
- it { expect(described_class.validate('feature/*new/')).to be false }
- it { expect(described_class.validate('feature/[new/')).to be false }
- it { expect(described_class.validate('feature/new/')).to be false }
- it { expect(described_class.validate('feature/new.')).to be false }
- it { expect(described_class.validate('feature\@{')).to be false }
- it { expect(described_class.validate('feature\new')).to be false }
- it { expect(described_class.validate('feature//new')).to be false }
- it { expect(described_class.validate('feature new')).to be false }
- it { expect(described_class.validate('refs/heads/')).to be false }
- it { expect(described_class.validate('refs/remotes/')).to be false }
- it { expect(described_class.validate('refs/heads/feature')).to be false }
- it { expect(described_class.validate('refs/remotes/origin')).to be false }
- it { expect(described_class.validate('-')).to be false }
- it { expect(described_class.validate('-branch')).to be false }
- it { expect(described_class.validate('+foo:bar')).to be false }
- it { expect(described_class.validate('foo:bar')).to be false }
- it { expect(described_class.validate('.tag')).to be false }
- it { expect(described_class.validate('my branch')).to be false }
- it { expect(described_class.validate("\xA0\u0000\xB0")).to be false }
+ it { expect(described_class.validate('feature/new')).to be_truthy }
+ it { expect(described_class.validate('implement_@all')).to be_truthy }
+ it { expect(described_class.validate('my_new_feature')).to be_truthy }
+ it { expect(described_class.validate('my-branch')).to be_truthy }
+ it { expect(described_class.validate('#1')).to be_truthy }
+ it { expect(described_class.validate('feature/refs/heads/foo')).to be_truthy }
+ it { expect(described_class.validate('feature/~new/')).to be_falsey }
+ it { expect(described_class.validate('feature/^new/')).to be_falsey }
+ it { expect(described_class.validate('feature/:new/')).to be_falsey }
+ it { expect(described_class.validate('feature/?new/')).to be_falsey }
+ it { expect(described_class.validate('feature/*new/')).to be_falsey }
+ it { expect(described_class.validate('feature/[new/')).to be_falsey }
+ it { expect(described_class.validate('feature/new/')).to be_falsey }
+ it { expect(described_class.validate('feature/new.')).to be_falsey }
+ it { expect(described_class.validate('feature\@{')).to be_falsey }
+ it { expect(described_class.validate('feature\new')).to be_falsey }
+ it { expect(described_class.validate('feature//new')).to be_falsey }
+ it { expect(described_class.validate('feature new')).to be_falsey }
+ it { expect(described_class.validate('refs/heads/')).to be_falsey }
+ it { expect(described_class.validate('refs/remotes/')).to be_falsey }
+ it { expect(described_class.validate('refs/heads/feature')).to be_falsey }
+ it { expect(described_class.validate('refs/remotes/origin')).to be_falsey }
+ it { expect(described_class.validate('-')).to be_falsey }
+ it { expect(described_class.validate('-branch')).to be_falsey }
+ it { expect(described_class.validate('+foo:bar')).to be_falsey }
+ it { expect(described_class.validate('foo:bar')).to be_falsey }
+ it { expect(described_class.validate('.tag')).to be_falsey }
+ it { expect(described_class.validate('my branch')).to be_falsey }
+ it { expect(described_class.validate("\xA0\u0000\xB0")).to be_falsey }
end
context '.validate_merge_request_branch' do
- it { expect(described_class.validate_merge_request_branch('HEAD')).to be true }
- it { expect(described_class.validate_merge_request_branch('feature/new')).to be true }
- it { expect(described_class.validate_merge_request_branch('implement_@all')).to be true }
- it { expect(described_class.validate_merge_request_branch('my_new_feature')).to be true }
- it { expect(described_class.validate_merge_request_branch('my-branch')).to be true }
- it { expect(described_class.validate_merge_request_branch('#1')).to be true }
- it { expect(described_class.validate_merge_request_branch('feature/refs/heads/foo')).to be true }
- it { expect(described_class.validate_merge_request_branch('feature/~new/')).to be false }
- it { expect(described_class.validate_merge_request_branch('feature/^new/')).to be false }
- it { expect(described_class.validate_merge_request_branch('feature/:new/')).to be false }
- it { expect(described_class.validate_merge_request_branch('feature/?new/')).to be false }
- it { expect(described_class.validate_merge_request_branch('feature/*new/')).to be false }
- it { expect(described_class.validate_merge_request_branch('feature/[new/')).to be false }
- it { expect(described_class.validate_merge_request_branch('feature/new/')).to be false }
- it { expect(described_class.validate_merge_request_branch('feature/new.')).to be false }
- it { expect(described_class.validate_merge_request_branch('feature\@{')).to be false }
- it { expect(described_class.validate_merge_request_branch('feature\new')).to be false }
- it { expect(described_class.validate_merge_request_branch('feature//new')).to be false }
- it { expect(described_class.validate_merge_request_branch('feature new')).to be false }
- it { expect(described_class.validate_merge_request_branch('refs/heads/master')).to be true }
- it { expect(described_class.validate_merge_request_branch('refs/heads/')).to be false }
- it { expect(described_class.validate_merge_request_branch('refs/remotes/')).to be false }
- it { expect(described_class.validate_merge_request_branch('-')).to be false }
- it { expect(described_class.validate_merge_request_branch('-branch')).to be false }
- it { expect(described_class.validate_merge_request_branch('+foo:bar')).to be false }
- it { expect(described_class.validate_merge_request_branch('foo:bar')).to be false }
- it { expect(described_class.validate_merge_request_branch('.tag')).to be false }
- it { expect(described_class.validate_merge_request_branch('my branch')).to be false }
- it { expect(described_class.validate_merge_request_branch("\xA0\u0000\xB0")).to be false }
+ it { expect(described_class.validate_merge_request_branch('HEAD')).to be_truthy }
+ it { expect(described_class.validate_merge_request_branch('feature/new')).to be_truthy }
+ it { expect(described_class.validate_merge_request_branch('implement_@all')).to be_truthy }
+ it { expect(described_class.validate_merge_request_branch('my_new_feature')).to be_truthy }
+ it { expect(described_class.validate_merge_request_branch('my-branch')).to be_truthy }
+ it { expect(described_class.validate_merge_request_branch('#1')).to be_truthy }
+ it { expect(described_class.validate_merge_request_branch('feature/refs/heads/foo')).to be_truthy }
+ it { expect(described_class.validate_merge_request_branch('feature/~new/')).to be_falsey }
+ it { expect(described_class.validate_merge_request_branch('feature/^new/')).to be_falsey }
+ it { expect(described_class.validate_merge_request_branch('feature/:new/')).to be_falsey }
+ it { expect(described_class.validate_merge_request_branch('feature/?new/')).to be_falsey }
+ it { expect(described_class.validate_merge_request_branch('feature/*new/')).to be_falsey }
+ it { expect(described_class.validate_merge_request_branch('feature/[new/')).to be_falsey }
+ it { expect(described_class.validate_merge_request_branch('feature/new/')).to be_falsey }
+ it { expect(described_class.validate_merge_request_branch('feature/new.')).to be_falsey }
+ it { expect(described_class.validate_merge_request_branch('feature\@{')).to be_falsey }
+ it { expect(described_class.validate_merge_request_branch('feature\new')).to be_falsey }
+ it { expect(described_class.validate_merge_request_branch('feature//new')).to be_falsey }
+ it { expect(described_class.validate_merge_request_branch('feature new')).to be_falsey }
+ it { expect(described_class.validate_merge_request_branch('refs/heads/master')).to be_truthy }
+ it { expect(described_class.validate_merge_request_branch('refs/heads/')).to be_falsey }
+ it { expect(described_class.validate_merge_request_branch('refs/remotes/')).to be_falsey }
+ it { expect(described_class.validate_merge_request_branch('-')).to be_falsey }
+ it { expect(described_class.validate_merge_request_branch('-branch')).to be_falsey }
+ it { expect(described_class.validate_merge_request_branch('+foo:bar')).to be_falsey }
+ it { expect(described_class.validate_merge_request_branch('foo:bar')).to be_falsey }
+ it { expect(described_class.validate_merge_request_branch('.tag')).to be_falsey }
+ it { expect(described_class.validate_merge_request_branch('my branch')).to be_falsey }
+ it { expect(described_class.validate_merge_request_branch("\xA0\u0000\xB0")).to be_falsey }
end
end
spec/lib/gitlab/object_hierarchy_spec.rb https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/14823
diff --git a/spec/lib/gitlab/object_hierarchy_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/lib/gitlab/object_hierarchy_spec.rb
index e6e9ae3223e..4154f9cbe80 100644
--- a/spec/lib/gitlab/object_hierarchy_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/lib/gitlab/object_hierarchy_spec.rb
@@ -145,6 +145,20 @@ describe Gitlab::ObjectHierarchy, :postgresql do
end
end
+ describe '#root' do
+ it 'includes only the roots' do
+ relation = described_class.new(Group.where(id: child2)).roots
+
+ expect(relation).to contain_exactly(parent)
+ end
+
+ it 'when quering parent it includes parent' do
+ relation = described_class.new(Group.where(id: parent)).roots
+
+ expect(relation).to contain_exactly(parent)
+ end
+ end
+
describe '#all_objects' do
let(:relation) do
described_class.new(Group.where(id: child1.id)).all_objects
spec/lib/gitlab/search_results_spec.rb https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/14823
diff --git a/spec/lib/gitlab/search_results_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/lib/gitlab/search_results_spec.rb
index 3d27156b356..cc029038108 100644
--- a/spec/lib/gitlab/search_results_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/lib/gitlab/search_results_spec.rb
@@ -272,7 +272,6 @@ describe Gitlab::SearchResults do
milestone_1 = create(:milestone, project: private_project_1, title: 'Private project with access milestone', state: 'closed')
milestone_2 = create(:milestone, project: internal_project, title: 'Internal project milestone')
milestone_3 = create(:milestone, project: public_project_1, title: 'Public project with milestones enabled milestone')
- # Global search scope takes user authorized projects, internal projects and public projects.
limit_projects = ProjectsFinder.new(current_user: user).execute
milestones = described_class.new(user, limit_projects, 'milestone').objects('milestones')
spec/lib/gitlab/sidekiq_config_spec.rb: https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/14832
diff --git a/spec/lib/gitlab/sidekiq_config_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/lib/gitlab/sidekiq_config_spec.rb
index 0c66d764851..9c83af740b7 100644
--- a/spec/lib/gitlab/sidekiq_config_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/lib/gitlab/sidekiq_config_spec.rb
@@ -21,25 +21,4 @@ describe Gitlab::SidekiqConfig do
expect(queues).to include('default')
end
end
-
- describe '.expand_queues' do
- it 'expands queue namespaces to concrete queue names' do
- queues = described_class.expand_queues(%w[cronjob])
-
- expect(queues).to include('cronjob:stuck_import_jobs')
- expect(queues).to include('cronjob:stuck_merge_jobs')
- end
-
- it 'lets concrete queue names pass through' do
- queues = described_class.expand_queues(%w[post_receive])
-
- expect(queues).to include('post_receive')
- end
-
- it 'lets unknown queues pass through' do
- queues = described_class.expand_queues(%w[unknown])
-
- expect(queues).to include('unknown')
- end
- end
end
spec/requests/api/pipelines_spec.rb https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/14823
diff --git a/spec/requests/api/pipelines_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/requests/api/pipelines_spec.rb
index 35b3dd219f7..ba68c517f81 100644
--- a/spec/requests/api/pipelines_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/requests/api/pipelines_spec.rb
@@ -532,8 +532,14 @@ describe API::Pipelines do
expect(json_response['message']).to eq '404 Not found'
end
- it 'does not log an audit event' do
- expect { delete api("/projects/#{project.id}/pipelines/#{pipeline.id}", owner) }.not_to change { SecurityEvent.count }
+ context 'when audit events is enabled' do
+ before do
+ stub_licensed_features(extended_audit_events: true, admin_audit_log: true)
+ end
+
+ it 'does not log an audit event' do
+ expect { delete api("/projects/#{project.id}/pipelines/#{pipeline.id}", owner) }.not_to change { SecurityEvent.count }
+ end
end
context 'when the pipeline has jobs' do
spec/requests/api/resource_label_events_spec.rb: https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/14845
diff --git a/spec/requests/api/resource_label_events_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/requests/api/resource_label_events_spec.rb
index 37b46eaeb86..588e9c7050e 100644
--- a/spec/requests/api/resource_label_events_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/requests/api/resource_label_events_spec.rb
@@ -63,6 +63,22 @@ describe API::ResourceLabelEvents do
end
end
+ context 'when eventable is an Epic' do
+ let(:group) { create(:group, :public) }
+ let(:epic) { create(:epic, group: group, author: user) }
+
+ before do
+ group.add_owner(user)
+ stub_licensed_features(epics: true)
+ end
+
+ it_behaves_like 'resource_label_events API', 'groups', 'epics', 'id' do
+ let(:parent) { group }
+ let(:eventable) { epic }
+ let!(:event) { create(:resource_label_event, epic: epic) }
+ end
+ end
+
context 'when eventable is a Merge Request' do
let(:merge_request) { create(:merge_request, source_project: project, target_project: project, author: user) }
spec/services/ci/destroy_pipeline_service_spec.rb: https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/14832
diff --git a/spec/services/ci/destroy_pipeline_service_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/services/ci/destroy_pipeline_service_spec.rb
index bff2b3179fb..f7adfdc6cfa 100644
--- a/spec/services/ci/destroy_pipeline_service_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/services/ci/destroy_pipeline_service_spec.rb
@@ -17,21 +17,6 @@ describe ::Ci::DestroyPipelineService do
expect { pipeline.reload }.to raise_error(ActiveRecord::RecordNotFound)
end
- it 'clears the cache', :use_clean_rails_memory_store_caching do
- create(:commit_status, :success, pipeline: pipeline, ref: pipeline.ref)
-
- expect(project.pipeline_status.has_status?).to be_truthy
-
- subject
-
- # Need to use find to avoid memoization
- expect(Project.find(project.id).pipeline_status.has_status?).to be_falsey
- end
-
- it 'does not log an audit event' do
- expect { subject }.not_to change { SecurityEvent.count }
- end
-
context 'when the pipeline has jobs' do
let!(:build) { create(:ci_build, project: project, pipeline: pipeline) }
spec/services/quick_actions/interpret_service_spec.rb: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/31119
diff --git a/spec/services/quick_actions/interpret_service_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/services/quick_actions/interpret_service_spec.rb
index 95a131e8c86..71c4c3ad0d7 100644
--- a/spec/services/quick_actions/interpret_service_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/services/quick_actions/interpret_service_spec.rb
@@ -574,7 +574,7 @@ describe QuickActions::InterpretService do
context 'Issue' do
it 'populates assignee_ids: [] if content contains /unassign' do
- issue.update(assignee_ids: [developer.id])
+ issue.update!(assignee_ids: [developer.id])
_, updates = service.execute(content, issue)
expect(updates).to eq(assignee_ids: [])
@@ -583,7 +583,7 @@ describe QuickActions::InterpretService do
context 'Merge Request' do
it 'populates assignee_ids: [] if content contains /unassign' do
- merge_request.update(assignee_ids: [developer.id])
+ merge_request.update!(assignee_ids: [developer.id])
_, updates = service.execute(content, merge_request)
expect(updates).to eq(assignee_ids: [])
spec/views/projects/merge_requests/creations/_new_submit.html.haml_spec.rb: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/31119
diff --git a/spec/views/projects/merge_requests/creations/_new_submit.html.haml_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/views/projects/merge_requests/creations/_new_submit.html.haml_spec.rb
index 0206928a211..88c4b52b3a6 100644
--- a/spec/views/projects/merge_requests/creations/_new_submit.html.haml_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/views/projects/merge_requests/creations/_new_submit.html.haml_spec.rb
@@ -12,6 +12,7 @@ describe 'projects/merge_requests/creations/_new_submit.html.haml' do
assign(:hidden_commit_count, 0)
assign(:total_commit_count, merge_request.commits.count)
assign(:project, merge_request.target_project)
+ assign(:target_project, merge_request.target_project)
assign(:mr_presenter, merge_request.present(current_user: merge_request.author))
allow(view).to receive(:can?).and_return(true)
spec/views/projects/merge_requests/edit.html.haml_spec.rb: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/31119
diff --git a/spec/views/projects/merge_requests/edit.html.haml_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/views/projects/merge_requests/edit.html.haml_spec.rb
index 529afa03f9c..0a3a46210ed 100644
--- a/spec/views/projects/merge_requests/edit.html.haml_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/views/projects/merge_requests/edit.html.haml_spec.rb
@@ -23,6 +23,7 @@ describe 'projects/merge_requests/edit.html.haml' do
before do
assign(:project, project)
+ assign(:target_project, project)
assign(:merge_request, closed_merge_request)
assign(:mr_presenter, closed_merge_request.present(current_user: user))