diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-03-27 12:08:28 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-03-27 12:08:28 +0300 |
commit | 6ac4a6713ed3196af899011f7e18658e16ebaac0 (patch) | |
tree | c60237cb5203d171481b765d31bfead080d063cf /spec | |
parent | d2b64c37bdef067656fdc8deb4728a2fbc6c2729 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
12 files changed, 90 insertions, 21 deletions
diff --git a/spec/lib/gitlab/background_migration/prepare_untracked_uploads_spec.rb b/spec/lib/gitlab/background_migration/prepare_untracked_uploads_spec.rb index 2957d0bed15..9daf35d0311 100644 --- a/spec/lib/gitlab/background_migration/prepare_untracked_uploads_spec.rb +++ b/spec/lib/gitlab/background_migration/prepare_untracked_uploads_spec.rb @@ -67,7 +67,7 @@ describe Gitlab::BackgroundMigration::PrepareUntrackedUploads, schema: 201802081 it 'does not add hashed files to the untracked_files_for_uploads table' do described_class.new.perform - hashed_file_path = get_uploads(project2, 'Project').where(uploader: 'FileUploader').first.path + hashed_file_path = get_uploads(project2, 'Project').find_by(uploader: 'FileUploader').path expect(untracked_files_for_uploads.where("path like '%#{hashed_file_path}%'").exists?).to be_falsey end diff --git a/spec/lib/gitlab/import_export/project/tree_restorer_spec.rb b/spec/lib/gitlab/import_export/project/tree_restorer_spec.rb index e38ef75d085..229f45e9543 100644 --- a/spec/lib/gitlab/import_export/project/tree_restorer_spec.rb +++ b/spec/lib/gitlab/import_export/project/tree_restorer_spec.rb @@ -123,7 +123,7 @@ describe Gitlab::ImportExport::Project::TreeRestorer do end it 'preserves updated_at on issues' do - issue = Issue.where(description: 'Aliquam enim illo et possimus.').first + issue = Issue.find_by(description: 'Aliquam enim illo et possimus.') expect(issue.reload.updated_at.to_s).to eq('2016-06-14 15:02:47 UTC') end @@ -170,7 +170,7 @@ describe Gitlab::ImportExport::Project::TreeRestorer do end context 'event at forth level of the tree' do - let(:event) { Event.where(action: 6).first } + let(:event) { Event.find_by(action: 6) } it 'restores the event' do expect(event).not_to be_nil @@ -440,7 +440,7 @@ describe Gitlab::ImportExport::Project::TreeRestorer do end it 'restores external pull request for the restored pipeline' do - pipeline_with_external_pr = @project.ci_pipelines.where(source: 'external_pull_request_event').first + pipeline_with_external_pr = @project.ci_pipelines.find_by(source: 'external_pull_request_event') expect(pipeline_with_external_pr.external_pull_request).to be_persisted end diff --git a/spec/migrations/generate_missing_routes_spec.rb b/spec/migrations/generate_missing_routes_spec.rb index 3ff220aa8d3..bc7cd3bd55e 100644 --- a/spec/migrations/generate_missing_routes_spec.rb +++ b/spec/migrations/generate_missing_routes_spec.rb @@ -26,7 +26,7 @@ describe GenerateMissingRoutes do described_class.new.up - route = routes.where(source_type: 'Project').take + route = routes.find_by(source_type: 'Project') expect(route.source_id).to eq(project.id) expect(route.path).to eq("gitlab/gitlab-ce-#{project.id}") @@ -37,7 +37,7 @@ describe GenerateMissingRoutes do described_class.new.up - route = routes.where(source_type: 'Namespace').take + route = routes.find_by(source_type: 'Namespace') expect(route.source_id).to eq(namespace.id) expect(route.path).to eq("gitlab-#{namespace.id}") diff --git a/spec/migrations/migrate_auto_dev_ops_domain_to_cluster_domain_spec.rb b/spec/migrations/migrate_auto_dev_ops_domain_to_cluster_domain_spec.rb index 9188c19f76a..2fe6f3f62a9 100644 --- a/spec/migrations/migrate_auto_dev_ops_domain_to_cluster_domain_spec.rb +++ b/spec/migrations/migrate_auto_dev_ops_domain_to_cluster_domain_spec.rb @@ -89,11 +89,11 @@ describe MigrateAutoDevOpsDomainToClusterDomain do end def find_cluster_project(project_id) - cluster_projects_table.where(project_id: project_id).first + cluster_projects_table.find_by(project_id: project_id) end def find_cluster(cluster_id) - clusters_table.where(id: cluster_id).first + clusters_table.find_by(id: cluster_id) end def project_auto_devops_with_domain diff --git a/spec/migrations/nullify_users_role_spec.rb b/spec/migrations/nullify_users_role_spec.rb index 487d84e2a35..b11929ef76f 100644 --- a/spec/migrations/nullify_users_role_spec.rb +++ b/spec/migrations/nullify_users_role_spec.rb @@ -18,16 +18,16 @@ describe NullifyUsersRole do it 'nullifies the role of the user with updated_at < 2019-11-05 12:08:00 and a role of 0' do expect(users.where(role: nil).count).to eq(1) - expect(users.where(role: nil).first.email).to eq('1') + expect(users.find_by(role: nil).email).to eq('1') end it 'leaves the user with role of 1' do expect(users.where(role: 1).count).to eq(1) - expect(users.where(role: 1).first.email).to eq('2') + expect(users.find_by(role: 1).email).to eq('2') end it 'leaves the user with updated_at > 2019-11-05 12:08:00' do expect(users.where(role: 0).count).to eq(1) - expect(users.where(role: 0).first.email).to eq('3') + expect(users.find_by(role: 0).email).to eq('3') end end diff --git a/spec/migrations/schedule_to_archive_legacy_traces_spec.rb b/spec/migrations/schedule_to_archive_legacy_traces_spec.rb index e9158df01c4..69c4b15a74f 100644 --- a/spec/migrations/schedule_to_archive_legacy_traces_spec.rb +++ b/spec/migrations/schedule_to_archive_legacy_traces_spec.rb @@ -39,9 +39,9 @@ describe ScheduleToArchiveLegacyTraces do expect(File.exist?(legacy_trace_path(@build_failed))).to be_falsy expect(File.exist?(legacy_trace_path(@builds_canceled))).to be_falsy expect(File.exist?(legacy_trace_path(@build_running))).to be_truthy - expect(File.exist?(archived_trace_path(job_artifacts.where(job_id: @build_success.id).first))).to be_truthy - expect(File.exist?(archived_trace_path(job_artifacts.where(job_id: @build_failed.id).first))).to be_truthy - expect(File.exist?(archived_trace_path(job_artifacts.where(job_id: @builds_canceled.id).first))).to be_truthy + expect(File.exist?(archived_trace_path(job_artifacts.find_by(job_id: @build_success.id)))).to be_truthy + expect(File.exist?(archived_trace_path(job_artifacts.find_by(job_id: @build_failed.id)))).to be_truthy + expect(File.exist?(archived_trace_path(job_artifacts.find_by(job_id: @builds_canceled.id)))).to be_truthy expect(job_artifacts.where(job_id: @build_running.id)).not_to be_exist end end diff --git a/spec/policies/note_policy_spec.rb b/spec/policies/note_policy_spec.rb index 94e6a86025c..e9dd5ee1c51 100644 --- a/spec/policies/note_policy_spec.rb +++ b/spec/policies/note_policy_spec.rb @@ -263,6 +263,7 @@ describe NotePolicy do let(:non_member) { create(:user) } let(:author) { create(:user) } let(:assignee) { create(:user) } + let(:admin) { create(:admin) } before do project.add_reporter(reporter) @@ -294,6 +295,10 @@ describe NotePolicy do expect(permissions(maintainer, confidential_note)).to be_allowed(:read_note, :admin_note, :resolve_note, :award_emoji) end + it 'allows admins to read all notes and admin them' do + expect(permissions(admin, confidential_note)).to be_allowed(:read_note, :admin_note, :resolve_note, :award_emoji) + end + it 'allows noteable author to read and resolve all notes' do expect(permissions(author, confidential_note)).to be_allowed(:read_note, :resolve_note, :award_emoji) expect(permissions(author, confidential_note)).to be_disallowed(:admin_note) diff --git a/spec/requests/api/jobs_spec.rb b/spec/requests/api/jobs_spec.rb index 03dfd13c25b..bd8aeb65d3f 100644 --- a/spec/requests/api/jobs_spec.rb +++ b/spec/requests/api/jobs_spec.rb @@ -23,9 +23,9 @@ describe API::Jobs do json_job['artifacts'].each do |artifact| expect(artifact).not_to be_nil file_type = Ci::JobArtifact.file_types[artifact['file_type']] - expect(artifact['size']).to eq(second_job.job_artifacts.where(file_type: file_type).first.size) - expect(artifact['filename']).to eq(second_job.job_artifacts.where(file_type: file_type).first.filename) - expect(artifact['file_format']).to eq(second_job.job_artifacts.where(file_type: file_type).first.file_format) + expect(artifact['size']).to eq(second_job.job_artifacts.find_by(file_type: file_type).size) + expect(artifact['filename']).to eq(second_job.job_artifacts.find_by(file_type: file_type).filename) + expect(artifact['file_format']).to eq(second_job.job_artifacts.find_by(file_type: file_type).file_format) end end end diff --git a/spec/services/emails/create_service_spec.rb b/spec/services/emails/create_service_spec.rb index 87f93ec97c9..23c2f53dca0 100644 --- a/spec/services/emails/create_service_spec.rb +++ b/spec/services/emails/create_service_spec.rb @@ -16,7 +16,7 @@ describe Emails::CreateService do it 'creates an email with additional attributes' do expect { service.execute(confirmation_token: 'abc') }.to change { Email.count }.by(1) - expect(Email.where(opts).first.confirmation_token).to eq 'abc' + expect(Email.find_by(opts).confirmation_token).to eq 'abc' end it 'has the right user association' do diff --git a/spec/services/issues/move_service_spec.rb b/spec/services/issues/move_service_spec.rb index ccd4dd4231b..a449541f459 100644 --- a/spec/services/issues/move_service_spec.rb +++ b/spec/services/issues/move_service_spec.rb @@ -100,7 +100,7 @@ describe Issues::MoveService do context 'when issue has notes with mentions' do it 'saves user mentions with actual mentions for new issue' do - expect(new_issue.user_mentions.where(note_id: nil).first.mentioned_users_ids).to match_array([user.id]) + expect(new_issue.user_mentions.find_by(note_id: nil).mentioned_users_ids).to match_array([user.id]) expect(new_issue.user_mentions.where.not(note_id: nil).first.mentioned_users_ids).to match_array([user.id]) expect(new_issue.user_mentions.where.not(note_id: nil).count).to eq 1 expect(new_issue.user_mentions.count).to eq 2 diff --git a/spec/services/notification_recipients/builder/new_note_spec.rb b/spec/services/notification_recipients/builder/new_note_spec.rb new file mode 100644 index 00000000000..f88e8b2dfb0 --- /dev/null +++ b/spec/services/notification_recipients/builder/new_note_spec.rb @@ -0,0 +1,64 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe NotificationRecipients::Builder::NewNote do + describe '#notification_recipients' do + let_it_be(:group) { create(:group, :public) } + let_it_be(:project) { create(:project, :public, group: group) } + let_it_be(:issue) { create(:issue, project: project) } + + let_it_be(:other_user) { create(:user) } + let_it_be(:participant) { create(:user) } + let_it_be(:non_member_participant) { create(:user) } + let_it_be(:group_watcher) { create(:user) } + let_it_be(:project_watcher) { create(:user) } + let_it_be(:guest_project_watcher) { create(:user) } + let_it_be(:subscriber) { create(:user) } + let_it_be(:unsubscribed_user) { create(:user) } + let_it_be(:non_member_subscriber) { create(:user) } + + let_it_be(:notification_setting_project_w) { create(:notification_setting, source: project, user: project_watcher, level: 2) } + let_it_be(:notification_setting_guest_w) { create(:notification_setting, source: project, user: guest_project_watcher, level: 2) } + let_it_be(:notification_setting_group_w) { create(:notification_setting, source: group, user: group_watcher, level: 2) } + let_it_be(:subscriptions) do + [ + create(:subscription, project: project, user: subscriber, subscribable: issue, subscribed: true), + create(:subscription, project: project, user: unsubscribed_user, subscribable: issue, subscribed: false), + create(:subscription, project: project, user: non_member_subscriber, subscribable: issue, subscribed: true) + ] + end + + subject { described_class.new(note) } + + before do + project.add_developer(participant) + project.add_developer(project_watcher) + project.add_guest(guest_project_watcher) + project.add_developer(subscriber) + group.add_developer(group_watcher) + + expect(issue).to receive(:participants).and_return([participant, non_member_participant]) + end + + context 'for public notes' do + let_it_be(:note) { create(:note, noteable: issue, project: project) } + + it 'adds all participants, watchers and subscribers' do + expect(subject.notification_recipients.map(&:user)).to contain_exactly( + participant, non_member_participant, project_watcher, group_watcher, guest_project_watcher, subscriber, non_member_subscriber + ) + end + end + + context 'for confidential notes' do + let_it_be(:note) { create(:note, :confidential, noteable: issue, project: project) } + + it 'adds all participants, watchers and subscribers that are project memebrs' do + expect(subject.notification_recipients.map(&:user)).to contain_exactly( + participant, project_watcher, group_watcher, subscriber + ) + end + end + end +end diff --git a/spec/services/projects/fork_service_spec.rb b/spec/services/projects/fork_service_spec.rb index 55987c6fa0f..443e3dfddf1 100644 --- a/spec/services/projects/fork_service_spec.rb +++ b/spec/services/projects/fork_service_spec.rb @@ -321,9 +321,9 @@ describe Projects::ForkService do Projects::UpdateRepositoryStorageService.new(project).execute('test_second_storage') fork_after_move = fork_project(project) pool_repository_before_move = PoolRepository.joins(:shard) - .where(source_project: project, shards: { name: 'default' }).first + .find_by(source_project: project, shards: { name: 'default' }) pool_repository_after_move = PoolRepository.joins(:shard) - .where(source_project: project, shards: { name: 'test_second_storage' }).first + .find_by(source_project: project, shards: { name: 'test_second_storage' }) expect(fork_before_move.pool_repository).to eq(pool_repository_before_move) expect(fork_after_move.pool_repository).to eq(pool_repository_after_move) |