diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-03-08 03:10:24 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-03-08 03:10:24 +0300 |
commit | 9c1accf52813b2b4b98ce85c9ec4a16fdbb86ee1 (patch) | |
tree | a9b3c0191e4205184bda7920a0a7776db876fbdd /spec | |
parent | c19944d9970b788d8523cee6ee05217a8afd7646 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
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 |