summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
Diffstat (limited to 'spec')
-rw-r--r--spec/features/merge_request/real_time_merge_widget_spec.rb87
-rw-r--r--spec/lib/gitlab/ci/templates/Jobs/build_gitlab_ci_yaml_spec.rb2
-rw-r--r--spec/requests/api/files_spec.rb28
-rw-r--r--spec/services/files/delete_service_spec.rb4
-rw-r--r--spec/services/files/multi_service_spec.rb14
-rw-r--r--spec/services/files/update_service_spec.rb4
-rw-r--r--spec/services/mattermost/create_team_service_spec.rb28
-rw-r--r--spec/support/helpers/ci/template_helpers.rb4
-rw-r--r--spec/support/shared_examples/features/real_time_merge_widget_shared_examples.rb12
9 files changed, 60 insertions, 123 deletions
diff --git a/spec/features/merge_request/real_time_merge_widget_spec.rb b/spec/features/merge_request/real_time_merge_widget_spec.rb
deleted file mode 100644
index 299651feb53..00000000000
--- a/spec/features/merge_request/real_time_merge_widget_spec.rb
+++ /dev/null
@@ -1,87 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe 'Merge request > Real-time merge widget', :js, feature_category: :code_review_workflow do
- let_it_be_with_reload(:project) { create(:project, :public, :repository) }
- let(:user) { project.creator }
- let(:merge_request) { create(:merge_request, :simple, source_project: project, author: user) }
-
- before do
- sign_in(user)
- visit project_merge_request_path(project, merge_request)
- end
-
- context 'when merge status changes' do
- let(:trigger_action) do
- # There are different service classes that can change the merge_status
- # so we simulate it here.
- merge_request.mark_as_unchecked!
- GraphqlTriggers.merge_request_merge_status_updated(merge_request)
- end
-
- let(:widget_text) { s_('mrWidget|Checking if merge request can be merged…') }
-
- it_behaves_like 'updates merge widget in real-time'
- end
-
- context 'when MR gets closed' do
- let(:trigger_action) do
- MergeRequests::CloseService
- .new(project: project, current_user: user)
- .execute(merge_request)
- end
-
- let(:widget_text) { s_('mrWidget|Closed by') }
-
- it_behaves_like 'updates merge widget in real-time'
- end
-
- context 'when MR gets marked as draft' do
- let(:trigger_action) do
- MergeRequests::UpdateService
- .new(project: project, current_user: user, params: { title: 'Draft: title' })
- .execute(merge_request)
- end
-
- let(:widget_text) { 'Merge blocked: Select Mark as ready to remove it from Draft status.' }
-
- it_behaves_like 'updates merge widget in real-time'
- end
-
- context 'when MR gets approved' do
- let(:trigger_action) do
- MergeRequests::ApprovalService
- .new(project: project, current_user: user)
- .execute(merge_request)
- end
-
- let(:widget_text) { _('Ready to merge!') }
-
- before do
- merge_request.update!(approvals_before_merge: 1)
- end
-
- it_behaves_like 'updates merge widget in real-time'
- end
-
- context 'when a new discussion is started and all threads must be resolved before merge' do
- let(:trigger_action) do
- Notes::CreateService.new(project, user, {
- merge_request_diff_head_sha: merge_request.diff_head_sha,
- noteable_id: merge_request.id,
- noteable_type: merge_request.class.name,
- note: 'Unresolved discussion',
- type: 'DiscussionNote'
- }).execute
- end
-
- let(:widget_text) { s_('mrWidget|Merge blocked: all threads must be resolved.') }
-
- before do
- project.update!(only_allow_merge_if_all_discussions_are_resolved: true)
- end
-
- it_behaves_like 'updates merge widget in real-time'
- end
-end
diff --git a/spec/lib/gitlab/ci/templates/Jobs/build_gitlab_ci_yaml_spec.rb b/spec/lib/gitlab/ci/templates/Jobs/build_gitlab_ci_yaml_spec.rb
index 07cfa939623..995922b6922 100644
--- a/spec/lib/gitlab/ci/templates/Jobs/build_gitlab_ci_yaml_spec.rb
+++ b/spec/lib/gitlab/ci/templates/Jobs/build_gitlab_ci_yaml_spec.rb
@@ -10,7 +10,7 @@ RSpec.describe 'Jobs/Build.gitlab-ci.yml' do
describe 'AUTO_BUILD_IMAGE_VERSION' do
it 'corresponds to a published image in the registry' do
registry = "https://#{template_registry_host}"
- repository = "gitlab-org/cluster-integration/auto-build-image"
+ repository = auto_build_image_repository
reference = YAML.safe_load(template.content).dig('variables', 'AUTO_BUILD_IMAGE_VERSION')
expect(public_image_exist?(registry, repository, reference)).to be true
diff --git a/spec/requests/api/files_spec.rb b/spec/requests/api/files_spec.rb
index 487ab2d95aa..f68ea0cd84c 100644
--- a/spec/requests/api/files_spec.rb
+++ b/spec/requests/api/files_spec.rb
@@ -55,6 +55,11 @@ RSpec.describe API::Files, feature_category: :source_code_management do
}
end
+ let(:last_commit_for_path) do
+ Gitlab::Git::Commit
+ .last_for_path(project.repository, 'master', Addressable::URI.unencode_component(file_path))
+ end
+
shared_context 'with author parameters' do
let(:author_email) { 'user@example.org' }
let(:author_name) { 'John Doe' }
@@ -1202,7 +1207,7 @@ RSpec.describe API::Files, feature_category: :source_code_management do
end
context 'when updating an existing file with stale last commit id' do
- let(:params_with_stale_id) { params.merge(last_commit_id: 'stale') }
+ let(:params_with_stale_id) { params.merge(last_commit_id: last_commit_for_path.parent_id) }
it 'returns a 400 bad request' do
put api(route(file_path), user), params: params_with_stale_id
@@ -1213,12 +1218,7 @@ RSpec.describe API::Files, feature_category: :source_code_management do
end
context 'with correct last commit id' do
- let(:last_commit) do
- Gitlab::Git::Commit
- .last_for_path(project.repository, 'master', Addressable::URI.unencode_component(file_path))
- end
-
- let(:params_with_correct_id) { params.merge(last_commit_id: last_commit.id) }
+ let(:params_with_correct_id) { params.merge(last_commit_id: last_commit_for_path.id) }
it 'updates existing file in project repo' do
put api(route(file_path), user), params: params_with_correct_id
@@ -1228,12 +1228,7 @@ RSpec.describe API::Files, feature_category: :source_code_management do
end
context 'when file path is invalid' do
- let(:last_commit) do
- Gitlab::Git::Commit
- .last_for_path(project.repository, 'master', Addressable::URI.unencode_component(file_path))
- end
-
- let(:params_with_correct_id) { params.merge(last_commit_id: last_commit.id) }
+ let(:params_with_correct_id) { params.merge(last_commit_id: last_commit_for_path.id) }
it 'returns a 400 bad request' do
put api(route(invalid_file_path), user), params: params_with_correct_id
@@ -1244,12 +1239,7 @@ RSpec.describe API::Files, feature_category: :source_code_management do
end
it_behaves_like 'when path is absolute' do
- let(:last_commit) do
- Gitlab::Git::Commit
- .last_for_path(project.repository, 'master', Addressable::URI.unencode_component(file_path))
- end
-
- let(:params_with_correct_id) { params.merge(last_commit_id: last_commit.id) }
+ let(:params_with_correct_id) { params.merge(last_commit_id: last_commit_for_path.id) }
subject { put api(route(absolute_path), user), params: params_with_correct_id }
end
diff --git a/spec/services/files/delete_service_spec.rb b/spec/services/files/delete_service_spec.rb
index f5e75f45803..dd99e5f9742 100644
--- a/spec/services/files/delete_service_spec.rb
+++ b/spec/services/files/delete_service_spec.rb
@@ -52,8 +52,8 @@ RSpec.describe Files::DeleteService, feature_category: :source_code_management d
end
describe "#execute" do
- context "when the file's last commit sha does not match the supplied last_commit_sha" do
- let(:last_commit_sha) { "foo" }
+ context "when the file's last commit is earlier than the latest commit for this branch" do
+ let(:last_commit_sha) { Gitlab::Git::Commit.last_for_path(project.repository, project.default_branch, file_path).parent_id }
it "returns a hash with the correct error message and a :error status" do
expect { subject.execute }
diff --git a/spec/services/files/multi_service_spec.rb b/spec/services/files/multi_service_spec.rb
index 9b85d83e721..7149fa77d6a 100644
--- a/spec/services/files/multi_service_spec.rb
+++ b/spec/services/files/multi_service_spec.rb
@@ -19,6 +19,10 @@ RSpec.describe Files::MultiService, feature_category: :source_code_management do
Gitlab::Git::Commit.last_for_path(project.repository, branch_name, original_file_path).sha
end
+ let(:branch_commit_id) do
+ Gitlab::Git::Commit.find(project.repository, branch_name).sha
+ end
+
let(:default_action) do
{
action: action,
@@ -78,6 +82,16 @@ RSpec.describe Files::MultiService, feature_category: :source_code_management do
end
end
+ context 'when file not changed, but later commit id is used' do
+ let(:actions) { [default_action.merge(last_commit_id: branch_commit_id)] }
+
+ it 'accepts the commit' do
+ results = subject.execute
+
+ expect(results[:status]).to eq(:success)
+ end
+ end
+
context 'when the file have not been modified' do
it 'accepts the commit' do
results = subject.execute
diff --git a/spec/services/files/update_service_spec.rb b/spec/services/files/update_service_spec.rb
index b464e47b0bc..6a9f9d6b86f 100644
--- a/spec/services/files/update_service_spec.rb
+++ b/spec/services/files/update_service_spec.rb
@@ -31,8 +31,8 @@ RSpec.describe Files::UpdateService, feature_category: :source_code_management d
end
describe "#execute" do
- context "when the file's last commit sha does not match the supplied last_commit_sha" do
- let(:last_commit_sha) { "foo" }
+ context "when the file's last commit sha is earlier than the latest change for that branch" do
+ let(:last_commit_sha) { Gitlab::Git::Commit.last_for_path(project.repository, project.default_branch, file_path).parent_id }
it "returns a hash with the correct error message and a :error status" do
expect { subject.execute }
diff --git a/spec/services/mattermost/create_team_service_spec.rb b/spec/services/mattermost/create_team_service_spec.rb
new file mode 100644
index 00000000000..b9e5162aab4
--- /dev/null
+++ b/spec/services/mattermost/create_team_service_spec.rb
@@ -0,0 +1,28 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Mattermost::CreateTeamService, feature_category: :integrations do
+ let(:user) { create(:user) }
+ let(:group) { create(:group) }
+
+ subject { described_class.new(group, user) }
+
+ it 'creates a team' do
+ expect_next_instance_of(::Mattermost::Team) do |instance|
+ expect(instance).to receive(:create).with(name: anything, display_name: anything, type: anything)
+ end
+
+ subject.execute
+ end
+
+ it 'adds an error if a team could not be created' do
+ expect_next_instance_of(::Mattermost::Team) do |instance|
+ expect(instance).to receive(:create).and_raise(::Mattermost::ClientError, 'client error')
+ end
+
+ subject.execute
+
+ expect(group.errors).to be_present
+ end
+end
diff --git a/spec/support/helpers/ci/template_helpers.rb b/spec/support/helpers/ci/template_helpers.rb
index cd3ab4bd82d..1818dec5fc7 100644
--- a/spec/support/helpers/ci/template_helpers.rb
+++ b/spec/support/helpers/ci/template_helpers.rb
@@ -6,6 +6,10 @@ module Ci
'registry.gitlab.com'
end
+ def auto_build_image_repository
+ "gitlab-org/cluster-integration/auto-build-image"
+ end
+
def public_image_exist?(registry, repository, image)
public_image_manifest(registry, repository, image).present?
end
diff --git a/spec/support/shared_examples/features/real_time_merge_widget_shared_examples.rb b/spec/support/shared_examples/features/real_time_merge_widget_shared_examples.rb
deleted file mode 100644
index d76d0f74e98..00000000000
--- a/spec/support/shared_examples/features/real_time_merge_widget_shared_examples.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-# frozen_string_literal: true
-
-RSpec.shared_examples 'updates merge widget in real-time' do
- specify do
- wait_for_requests
-
- # Simulate a real-time update of merge widget
- trigger_action
-
- expect(find('.mr-state-widget')).to have_content(widget_text)
- end
-end