diff options
Diffstat (limited to 'spec/support/shared_examples/models')
7 files changed, 296 insertions, 185 deletions
diff --git a/spec/support/shared_examples/models/application_setting_shared_examples.rb b/spec/support/shared_examples/models/application_setting_shared_examples.rb index 74ec6474e80..6e7d04d3cba 100644 --- a/spec/support/shared_examples/models/application_setting_shared_examples.rb +++ b/spec/support/shared_examples/models/application_setting_shared_examples.rb @@ -238,8 +238,16 @@ RSpec.shared_examples 'application settings examples' do end describe '#allowed_key_types' do - it 'includes all key types by default' do - expect(setting.allowed_key_types).to contain_exactly(*Gitlab::SSHPublicKey.supported_types) + context 'in non-FIPS mode', fips_mode: false do + it 'includes all key types by default' do + expect(setting.allowed_key_types).to contain_exactly(*Gitlab::SSHPublicKey.supported_types) + end + end + + context 'in FIPS mode', :fips_mode do + it 'excludes DSA from supported key types' do + expect(setting.allowed_key_types).to contain_exactly(*Gitlab::SSHPublicKey.supported_types - %i(dsa)) + end end it 'excludes disabled key types' do diff --git a/spec/support/shared_examples/models/commit_signature_shared_examples.rb b/spec/support/shared_examples/models/commit_signature_shared_examples.rb new file mode 100644 index 00000000000..56d5c1da3af --- /dev/null +++ b/spec/support/shared_examples/models/commit_signature_shared_examples.rb @@ -0,0 +1,51 @@ +# frozen_string_literal: true + +RSpec.shared_examples 'commit signature' do + describe 'associations' do + it { is_expected.to belong_to(:project).required } + end + + describe 'validation' do + subject { described_class.new } + + it { is_expected.to validate_presence_of(:commit_sha) } + it { is_expected.to validate_presence_of(:project_id) } + end + + describe '.safe_create!' do + it 'finds a signature by commit sha if it existed' do + signature + + expect(described_class.safe_create!(commit_sha: commit_sha)).to eq(signature) + end + + it 'creates a new signature if it was not found' do + expect { described_class.safe_create!(attributes) }.to change { described_class.count }.by(1) + end + + it 'assigns the correct attributes when creating' do + signature = described_class.safe_create!(attributes) + + expect(signature).to have_attributes(attributes) + end + + it 'does not raise an error in case of a race condition' do + expect(described_class).to receive(:find_by).and_return(nil, instance_double(described_class, persisted?: true)) + + expect(described_class).to receive(:create).and_raise(ActiveRecord::RecordNotUnique) + allow(described_class).to receive(:create).and_call_original + + described_class.safe_create!(attributes) + end + end + + describe '#commit' do + it 'fetches the commit through the project' do + expect_next_instance_of(Project) do |instance| + expect(instance).to receive(:commit).with(commit_sha).and_return(commit) + end + + signature.commit + end + end +end diff --git a/spec/support/shared_examples/models/concerns/limitable_shared_examples.rb b/spec/support/shared_examples/models/concerns/limitable_shared_examples.rb index 0ff0895b861..3d393e6dcb5 100644 --- a/spec/support/shared_examples/models/concerns/limitable_shared_examples.rb +++ b/spec/support/shared_examples/models/concerns/limitable_shared_examples.rb @@ -1,6 +1,30 @@ # frozen_string_literal: true RSpec.shared_examples 'includes Limitable concern' do + describe '#exceeds_limits?' do + let(:plan_limits) { create(:plan_limits, :default_plan) } + + context 'without plan limits configured' do + it { expect(subject.exceeds_limits?).to eq false } + end + + context 'without plan limits configured' do + before do + plan_limits.update!(subject.class.limit_name => 1) + end + + it { expect(subject.exceeds_limits?).to eq false } + + context 'with an existing model' do + before do + subject.clone.save! + end + + it { expect(subject.exceeds_limits?).to eq true } + end + end + end + describe 'validations' do let(:plan_limits) { create(:plan_limits, :default_plan) } diff --git a/spec/support/shared_examples/models/integrations/base_data_fields_shared_examples.rb b/spec/support/shared_examples/models/integrations/base_data_fields_shared_examples.rb new file mode 100644 index 00000000000..211beb5b32f --- /dev/null +++ b/spec/support/shared_examples/models/integrations/base_data_fields_shared_examples.rb @@ -0,0 +1,51 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.shared_examples Integrations::BaseDataFields do + subject(:model) { described_class.new } + + describe 'associations' do + it { is_expected.to belong_to :integration } + end + + describe '#activated?' do + subject(:activated?) { model.activated? } + + context 'with integration' do + let(:integration) { instance_spy(Integration, activated?: activated) } + + before do + allow(model).to receive(:integration).and_return(integration) + end + + context 'with value set to false' do + let(:activated) { false } + + it { is_expected.to eq(false) } + end + + context 'with value set to true' do + let(:activated) { true } + + it { is_expected.to eq(true) } + end + end + + context 'without integration' do + before do + allow(model).to receive(:integration).and_return(nil) + end + + it { is_expected.to eq(false) } + end + end + + describe '#to_database_hash' do + it 'does not include certain attributes' do + hash = model.to_database_hash + + expect(hash.keys).not_to include('id', 'service_id', 'integration_id', 'created_at', 'updated_at') + end + end +end diff --git a/spec/support/shared_examples/models/member_shared_examples.rb b/spec/support/shared_examples/models/member_shared_examples.rb index e293d10964b..75fff11cecd 100644 --- a/spec/support/shared_examples/models/member_shared_examples.rb +++ b/spec/support/shared_examples/models/member_shared_examples.rb @@ -80,7 +80,7 @@ RSpec.shared_examples_for "member creation" do let_it_be(:admin) { create(:admin) } it 'returns a Member object', :aggregate_failures do - member = described_class.new(source, user, :maintainer).execute + member = described_class.add_user(source, user, :maintainer) expect(member).to be_a member_type expect(member).to be_persisted @@ -99,7 +99,7 @@ RSpec.shared_examples_for "member creation" do end it 'does not update the member' do - member = described_class.new(source, project_bot, :maintainer, current_user: user).execute + member = described_class.add_user(source, project_bot, :maintainer, current_user: user) expect(source.users.reload).to include(project_bot) expect(member).to be_persisted @@ -110,7 +110,7 @@ RSpec.shared_examples_for "member creation" do context 'when project_bot is not already a member' do it 'adds the member' do - member = described_class.new(source, project_bot, :maintainer, current_user: user).execute + member = described_class.add_user(source, project_bot, :maintainer, current_user: user) expect(source.users.reload).to include(project_bot) expect(member).to be_persisted @@ -120,7 +120,7 @@ RSpec.shared_examples_for "member creation" do context 'when admin mode is enabled', :enable_admin_mode, :aggregate_failures do it 'sets members.created_by to the given admin current_user' do - member = described_class.new(source, user, :maintainer, current_user: admin).execute + member = described_class.add_user(source, user, :maintainer, current_user: admin) expect(member).to be_persisted expect(source.users.reload).to include(user) @@ -130,7 +130,7 @@ RSpec.shared_examples_for "member creation" do context 'when admin mode is disabled' do it 'rejects setting members.created_by to the given admin current_user', :aggregate_failures do - member = described_class.new(source, user, :maintainer, current_user: admin).execute + member = described_class.add_user(source, user, :maintainer, current_user: admin) expect(member).not_to be_persisted expect(source.users.reload).not_to include(user) @@ -139,7 +139,7 @@ RSpec.shared_examples_for "member creation" do end it 'sets members.expires_at to the given expires_at' do - member = described_class.new(source, user, :maintainer, expires_at: Date.new(2016, 9, 22)).execute + member = described_class.add_user(source, user, :maintainer, expires_at: Date.new(2016, 9, 22)) expect(member.expires_at).to eq(Date.new(2016, 9, 22)) end @@ -148,7 +148,7 @@ RSpec.shared_examples_for "member creation" do it "accepts the :#{sym_key} symbol as access level", :aggregate_failures do expect(source.users).not_to include(user) - member = described_class.new(source, user.id, sym_key).execute + member = described_class.add_user(source, user.id, sym_key) expect(member.access_level).to eq(int_access_level) expect(source.users.reload).to include(user) @@ -157,7 +157,7 @@ RSpec.shared_examples_for "member creation" do it "accepts the #{int_access_level} integer as access level", :aggregate_failures do expect(source.users).not_to include(user) - member = described_class.new(source, user.id, int_access_level).execute + member = described_class.add_user(source, user.id, int_access_level) expect(member.access_level).to eq(int_access_level) expect(source.users.reload).to include(user) @@ -169,7 +169,7 @@ RSpec.shared_examples_for "member creation" do it 'adds the user as a member' do expect(source.users).not_to include(user) - described_class.new(source, user.id, :maintainer).execute + described_class.add_user(source, user.id, :maintainer) expect(source.users.reload).to include(user) end @@ -179,7 +179,7 @@ RSpec.shared_examples_for "member creation" do it 'does not add the user as a member' do expect(source.users).not_to include(user) - described_class.new(source, non_existing_record_id, :maintainer).execute + described_class.add_user(source, non_existing_record_id, :maintainer) expect(source.users.reload).not_to include(user) end @@ -189,7 +189,7 @@ RSpec.shared_examples_for "member creation" do it 'adds the user as a member' do expect(source.users).not_to include(user) - described_class.new(source, user, :maintainer).execute + described_class.add_user(source, user, :maintainer) expect(source.users.reload).to include(user) end @@ -200,12 +200,12 @@ RSpec.shared_examples_for "member creation" do source.request_access(user) end - it 'adds the requester as a member', :aggregate_failures do + it 'does not add the requester as a regular member', :aggregate_failures do expect(source.users).not_to include(user) expect(source.requesters.exists?(user_id: user)).to be_truthy expect do - described_class.new(source, user, :maintainer).execute + described_class.add_user(source, user, :maintainer) end.to raise_error(Gitlab::Access::AccessDeniedError) expect(source.users.reload).not_to include(user) @@ -217,7 +217,7 @@ RSpec.shared_examples_for "member creation" do it 'adds the user as a member' do expect(source.users).not_to include(user) - described_class.new(source, user.email, :maintainer).execute + described_class.add_user(source, user.email, :maintainer) expect(source.users.reload).to include(user) end @@ -227,7 +227,7 @@ RSpec.shared_examples_for "member creation" do it 'creates an invited member' do expect(source.users).not_to include(user) - described_class.new(source, 'user@example.com', :maintainer).execute + described_class.add_user(source, 'user@example.com', :maintainer) expect(source.members.invite.pluck(:invite_email)).to include('user@example.com') end @@ -237,7 +237,7 @@ RSpec.shared_examples_for "member creation" do it 'creates an invited member', :aggregate_failures do email_starting_with_number = "#{user.id}_email@example.com" - described_class.new(source, email_starting_with_number, :maintainer).execute + described_class.add_user(source, email_starting_with_number, :maintainer) expect(source.members.invite.pluck(:invite_email)).to include(email_starting_with_number) expect(source.users.reload).not_to include(user) @@ -249,7 +249,7 @@ RSpec.shared_examples_for "member creation" do it 'creates the member' do expect(source.users).not_to include(user) - described_class.new(source, user, :maintainer, current_user: admin).execute + described_class.add_user(source, user, :maintainer, current_user: admin) expect(source.users.reload).to include(user) end @@ -263,7 +263,7 @@ RSpec.shared_examples_for "member creation" do expect(source.users).not_to include(user) expect(source.requesters.exists?(user_id: user)).to be_truthy - described_class.new(source, user, :maintainer, current_user: admin).execute + described_class.add_user(source, user, :maintainer, current_user: admin) expect(source.users.reload).to include(user) expect(source.requesters.reload.exists?(user_id: user)).to be_falsy @@ -275,7 +275,7 @@ RSpec.shared_examples_for "member creation" do it 'does not create the member', :aggregate_failures do expect(source.users).not_to include(user) - member = described_class.new(source, user, :maintainer, current_user: user).execute + member = described_class.add_user(source, user, :maintainer, current_user: user) expect(source.users.reload).not_to include(user) expect(member).not_to be_persisted @@ -290,7 +290,7 @@ RSpec.shared_examples_for "member creation" do expect(source.users).not_to include(user) expect(source.requesters.exists?(user_id: user)).to be_truthy - described_class.new(source, user, :maintainer, current_user: user).execute + described_class.add_user(source, user, :maintainer, current_user: user) expect(source.users.reload).not_to include(user) expect(source.requesters.exists?(user_id: user)).to be_truthy @@ -307,7 +307,7 @@ RSpec.shared_examples_for "member creation" do it 'updates the member' do expect(source.users).to include(user) - described_class.new(source, user, :maintainer).execute + described_class.add_user(source, user, :maintainer) expect(source.members.find_by(user_id: user).access_level).to eq(Gitlab::Access::MAINTAINER) end @@ -317,7 +317,7 @@ RSpec.shared_examples_for "member creation" do it 'updates the member' do expect(source.users).to include(user) - described_class.new(source, user, :maintainer, current_user: admin).execute + described_class.add_user(source, user, :maintainer, current_user: admin) expect(source.members.find_by(user_id: user).access_level).to eq(Gitlab::Access::MAINTAINER) end @@ -327,221 +327,194 @@ RSpec.shared_examples_for "member creation" do it 'does not update the member' do expect(source.users).to include(user) - described_class.new(source, user, :maintainer, current_user: user).execute + described_class.add_user(source, user, :maintainer, current_user: user) expect(source.members.find_by(user_id: user).access_level).to eq(Gitlab::Access::DEVELOPER) end end end +end - context 'when `tasks_to_be_done` and `tasks_project_id` are passed' do - let(:task_project) { source.is_a?(Group) ? create(:project, group: source) : source } - - it 'creates a member_task with the correct attributes', :aggregate_failures do - described_class.new(source, user, :developer, tasks_to_be_done: %w(ci code), tasks_project_id: task_project.id).execute +RSpec.shared_examples_for "bulk member creation" do + let_it_be(:admin) { create(:admin) } + let_it_be(:user1) { create(:user) } + let_it_be(:user2) { create(:user) } - member = source.members.last + context 'when current user does not have permission' do + it 'does not succeed' do + # maintainers cannot add owners + source.add_maintainer(user) - expect(member.tasks_to_be_done).to match_array([:ci, :code]) - expect(member.member_task.project).to eq(task_project) + expect(described_class.add_users(source, [user1, user2], :owner, current_user: user)).to be_empty end + end - context 'with an already existing member' do - before do - source.add_user(user, :developer) - end - - it 'does not update tasks to be done if tasks already exist', :aggregate_failures do - member = source.members.find_by(user_id: user.id) - create(:member_task, member: member, project: task_project, tasks_to_be_done: %w(code ci)) - - expect do - described_class.new(source, - user, - :developer, - tasks_to_be_done: %w(issues), - tasks_project_id: task_project.id).execute - end.not_to change(MemberTask, :count) + it 'returns Member objects' do + members = described_class.add_users(source, [user1, user2], :maintainer) - member.reset - expect(member.tasks_to_be_done).to match_array([:code, :ci]) - expect(member.member_task.project).to eq(task_project) - end + expect(members.map(&:user)).to contain_exactly(user1, user2) + expect(members).to all(be_a(member_type)) + expect(members).to all(be_persisted) + end - it 'adds tasks to be done if they do not exist', :aggregate_failures do - expect do - described_class.new(source, - user, - :developer, - tasks_to_be_done: %w(issues), - tasks_project_id: task_project.id).execute - end.to change(MemberTask, :count).by(1) + it 'returns an empty array' do + members = described_class.add_users(source, [], :maintainer) - member = source.members.find_by(user_id: user.id) - expect(member.tasks_to_be_done).to match_array([:issues]) - expect(member.member_task.project).to eq(task_project) - end - end + expect(members).to be_a Array + expect(members).to be_empty end -end -RSpec.shared_examples_for "bulk member creation" do - let_it_be(:user) { create(:user) } - let_it_be(:admin) { create(:admin) } + it 'supports different formats' do + list = ['joe@local.test', admin, user1.id, user2.id.to_s] - describe '#execute' do - it 'raises an error when exiting_members is not passed in the args hash' do - expect do - described_class.new(source, user, :maintainer, current_user: user).execute - end.to raise_error(ArgumentError, 'existing_members must be included in the args hash') - end - end + members = described_class.add_users(source, list, :maintainer) - describe '.add_users', :aggregate_failures do - let_it_be(:user1) { create(:user) } - let_it_be(:user2) { create(:user) } + expect(members.size).to eq(4) + expect(members.first).to be_invite + end - it 'returns a Member objects' do - members = described_class.add_users(source, [user1, user2], :maintainer) + context 'with de-duplication' do + it 'has the same user by id and user' do + members = described_class.add_users(source, [user1.id, user1, user1.id, user2, user2.id, user2], :maintainer) expect(members.map(&:user)).to contain_exactly(user1, user2) expect(members).to all(be_a(member_type)) expect(members).to all(be_persisted) end - it 'returns an empty array' do - members = described_class.add_users(source, [], :maintainer) + it 'has the same user sent more than once' do + members = described_class.add_users(source, [user1, user1], :maintainer) - expect(members).to be_a Array - expect(members).to be_empty + expect(members.map(&:user)).to contain_exactly(user1) + expect(members).to all(be_a(member_type)) + expect(members).to all(be_persisted) end + end - it 'supports different formats' do - list = ['joe@local.test', admin, user1.id, user2.id.to_s] + it 'with the same user sent more than once by user and by email' do + members = described_class.add_users(source, [user1, user1.email], :maintainer) - members = described_class.add_users(source, list, :maintainer) + expect(members.map(&:user)).to contain_exactly(user1) + expect(members).to all(be_a(member_type)) + expect(members).to all(be_persisted) + end - expect(members.size).to eq(4) - expect(members.first).to be_invite - end + it 'with the same user sent more than once by user id and by email' do + members = described_class.add_users(source, [user1.id, user1.email], :maintainer) - context 'with de-duplication' do - it 'has the same user by id and user' do - members = described_class.add_users(source, [user1.id, user1, user1.id, user2, user2.id, user2], :maintainer) + expect(members.map(&:user)).to contain_exactly(user1) + expect(members).to all(be_a(member_type)) + expect(members).to all(be_persisted) + end + + context 'when a member already exists' do + before do + source.add_user(user1, :developer) + end + it 'has the same user sent more than once with the member already existing' do + expect do + members = described_class.add_users(source, [user1, user1, user2], :maintainer) expect(members.map(&:user)).to contain_exactly(user1, user2) expect(members).to all(be_a(member_type)) expect(members).to all(be_persisted) - end + end.to change { Member.count }.by(1) + end - it 'has the same user sent more than once' do - members = described_class.add_users(source, [user1, user1], :maintainer) + it 'supports existing users as expected with user_ids passed' do + user3 = create(:user) - expect(members.map(&:user)).to contain_exactly(user1) + expect do + members = described_class.add_users(source, [user1.id, user2, user3.id], :maintainer) + expect(members.map(&:user)).to contain_exactly(user1, user2, user3) expect(members).to all(be_a(member_type)) expect(members).to all(be_persisted) - end + end.to change { Member.count }.by(2) end - it 'with the same user sent more than once by user and by email' do - members = described_class.add_users(source, [user1, user1.email], :maintainer) + it 'supports existing users as expected without user ids passed' do + user3 = create(:user) - expect(members.map(&:user)).to contain_exactly(user1) - expect(members).to all(be_a(member_type)) - expect(members).to all(be_persisted) + expect do + members = described_class.add_users(source, [user1, user2, user3], :maintainer) + expect(members.map(&:user)).to contain_exactly(user1, user2, user3) + expect(members).to all(be_a(member_type)) + expect(members).to all(be_persisted) + end.to change { Member.count }.by(2) end + end - it 'with the same user sent more than once by user id and by email' do - members = described_class.add_users(source, [user1.id, user1.email], :maintainer) + context 'when `tasks_to_be_done` and `tasks_project_id` are passed' do + let(:task_project) { source.is_a?(Group) ? create(:project, group: source) : source } - expect(members.map(&:user)).to contain_exactly(user1) - expect(members).to all(be_a(member_type)) - expect(members).to all(be_persisted) + it 'creates a member_task with the correct attributes', :aggregate_failures do + members = described_class.add_users(source, [user1], :developer, tasks_to_be_done: %w(ci code), tasks_project_id: task_project.id) + member = members.last + + expect(member.tasks_to_be_done).to match_array([:ci, :code]) + expect(member.member_task.project).to eq(task_project) end - context 'when a member already exists' do + context 'with an already existing member' do before do source.add_user(user1, :developer) end - it 'has the same user sent more than once with the member already existing' do - expect do - members = described_class.add_users(source, [user1, user1, user2], :maintainer) - expect(members.map(&:user)).to contain_exactly(user1, user2) - expect(members).to all(be_a(member_type)) - expect(members).to all(be_persisted) - end.to change { Member.count }.by(1) - end - - it 'supports existing users as expected with user_ids passed' do - user3 = create(:user) + it 'does not update tasks to be done if tasks already exist', :aggregate_failures do + member = source.members.find_by(user_id: user1.id) + create(:member_task, member: member, project: task_project, tasks_to_be_done: %w(code ci)) expect do - members = described_class.add_users(source, [user1.id, user2, user3.id], :maintainer) - expect(members.map(&:user)).to contain_exactly(user1, user2, user3) - expect(members).to all(be_a(member_type)) - expect(members).to all(be_persisted) - end.to change { Member.count }.by(2) - end + described_class.add_users(source, + [user1.id], + :developer, + tasks_to_be_done: %w(issues), + tasks_project_id: task_project.id) + end.not_to change(MemberTask, :count) - it 'supports existing users as expected without user ids passed' do - user3 = create(:user) + member.reset + expect(member.tasks_to_be_done).to match_array([:code, :ci]) + expect(member.member_task.project).to eq(task_project) + end + it 'adds tasks to be done if they do not exist', :aggregate_failures do expect do - members = described_class.add_users(source, [user1, user2, user3], :maintainer) - expect(members.map(&:user)).to contain_exactly(user1, user2, user3) - expect(members).to all(be_a(member_type)) - expect(members).to all(be_persisted) - end.to change { Member.count }.by(2) + described_class.add_users(source, + [user1.id], + :developer, + tasks_to_be_done: %w(issues), + tasks_project_id: task_project.id) + end.to change(MemberTask, :count).by(1) + + member = source.members.find_by(user_id: user1.id) + expect(member.tasks_to_be_done).to match_array([:issues]) + expect(member.member_task.project).to eq(task_project) end end + end +end + +RSpec.shared_examples 'owner management' do + describe '.cannot_manage_owners?' do + subject { described_class.cannot_manage_owners?(source, user) } - context 'when `tasks_to_be_done` and `tasks_project_id` are passed' do - let(:task_project) { source.is_a?(Group) ? create(:project, group: source) : source } + context 'when maintainer' do + before do + source.add_maintainer(user) + end - it 'creates a member_task with the correct attributes', :aggregate_failures do - members = described_class.add_users(source, [user1], :developer, tasks_to_be_done: %w(ci code), tasks_project_id: task_project.id) - member = members.last + it 'cannot manage owners' do + expect(subject).to be_truthy + end + end - expect(member.tasks_to_be_done).to match_array([:ci, :code]) - expect(member.member_task.project).to eq(task_project) + context 'when owner' do + before do + source.add_owner(user) end - context 'with an already existing member' do - before do - source.add_user(user1, :developer) - end - - it 'does not update tasks to be done if tasks already exist', :aggregate_failures do - member = source.members.find_by(user_id: user1.id) - create(:member_task, member: member, project: task_project, tasks_to_be_done: %w(code ci)) - - expect do - described_class.add_users(source, - [user1.id], - :developer, - tasks_to_be_done: %w(issues), - tasks_project_id: task_project.id) - end.not_to change(MemberTask, :count) - - member.reset - expect(member.tasks_to_be_done).to match_array([:code, :ci]) - expect(member.member_task.project).to eq(task_project) - end - - it 'adds tasks to be done if they do not exist', :aggregate_failures do - expect do - described_class.add_users(source, - [user1.id], - :developer, - tasks_to_be_done: %w(issues), - tasks_project_id: task_project.id) - end.to change(MemberTask, :count).by(1) - - member = source.members.find_by(user_id: user1.id) - expect(member.tasks_to_be_done).to match_array([:issues]) - expect(member.member_task.project).to eq(task_project) - end + it 'can manage owners' do + expect(subject).to be_falsey end end end diff --git a/spec/support/shared_examples/models/members_notifications_shared_example.rb b/spec/support/shared_examples/models/members_notifications_shared_example.rb index 04af3935d15..75eed0203a7 100644 --- a/spec/support/shared_examples/models/members_notifications_shared_example.rb +++ b/spec/support/shared_examples/models/members_notifications_shared_example.rb @@ -33,6 +33,18 @@ RSpec.shared_examples 'members notifications' do |entity_type| end end + describe '#after_commit' do + context 'on creation of a member requesting access' do + let(:member) { build(:"#{entity_type}_member", :access_request) } + + it "calls NotificationService.new_access_request" do + expect(notification_service).to receive(:new_access_request).with(member) + + member.save! + end + end + end + describe '#accept_request' do let(:member) { create(:"#{entity_type}_member", :access_request) } diff --git a/spec/support/shared_examples/models/wiki_shared_examples.rb b/spec/support/shared_examples/models/wiki_shared_examples.rb index 6f17231a040..604c57768fe 100644 --- a/spec/support/shared_examples/models/wiki_shared_examples.rb +++ b/spec/support/shared_examples/models/wiki_shared_examples.rb @@ -540,14 +540,6 @@ RSpec.shared_examples 'wiki model' do end end end - - context 'when feature flag :gitaly_replace_wiki_create_page is disabled' do - before do - stub_feature_flags(gitaly_replace_wiki_create_page: false) - end - - it_behaves_like 'create_page tests' - end end describe '#update_page' do |