diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-06-22 18:06:55 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-06-22 18:06:55 +0300 |
commit | 793034a90509193ebf2ad14ed8e5eea10f7c6b4a (patch) | |
tree | c6326ec316c71dad77ab8f40b4eedf5093544403 /spec | |
parent | e2d00f9148a5c87fe4f56e4fd3c90a9b3574f03b (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r-- | spec/factories/audit_events.rb | 1 | ||||
-rw-r--r-- | spec/frontend/content_editor/components/top_toolbar_spec.js | 23 | ||||
-rw-r--r-- | spec/frontend/content_editor/extensions/horizontal_rule_spec.js | 20 | ||||
-rw-r--r-- | spec/frontend/fixtures/api_markdown.yml | 2 | ||||
-rw-r--r-- | spec/lib/gitlab/checks/container_moved_spec.rb (renamed from spec/lib/gitlab/checks/project_moved_spec.rb) | 44 | ||||
-rw-r--r-- | spec/lib/gitlab/checks/project_created_spec.rb | 31 | ||||
-rw-r--r-- | spec/lib/gitlab/git_access_spec.rb | 2 | ||||
-rw-r--r-- | spec/lib/gitlab/repo_path_spec.rb | 36 | ||||
-rw-r--r-- | spec/models/audit_event_spec.rb | 68 | ||||
-rw-r--r-- | spec/requests/api/internal/base_spec.rb | 105 | ||||
-rw-r--r-- | spec/services/post_receive_service_spec.rb | 2 |
11 files changed, 230 insertions, 104 deletions
diff --git a/spec/factories/audit_events.rb b/spec/factories/audit_events.rb index 05b86d2f13b..10f60591922 100644 --- a/spec/factories/audit_events.rb +++ b/spec/factories/audit_events.rb @@ -51,6 +51,7 @@ FactoryBot.define do trait :unauthenticated do author_id { -1 } + author_name { 'An unauthenticated user' } details do { custom_message: 'Custom action', diff --git a/spec/frontend/content_editor/components/top_toolbar_spec.js b/spec/frontend/content_editor/components/top_toolbar_spec.js index 0d55fa730ae..a5d9a626a04 100644 --- a/spec/frontend/content_editor/components/top_toolbar_spec.js +++ b/spec/frontend/content_editor/components/top_toolbar_spec.js @@ -39,17 +39,18 @@ describe('content_editor/components/top_toolbar', () => { }); describe.each` - testId | controlProps - ${'bold'} | ${{ contentType: 'bold', iconName: 'bold', label: 'Bold text', editorCommand: 'toggleBold' }} - ${'italic'} | ${{ contentType: 'italic', iconName: 'italic', label: 'Italic text', editorCommand: 'toggleItalic' }} - ${'strike'} | ${{ contentType: 'strike', iconName: 'strikethrough', label: 'Strikethrough', editorCommand: 'toggleStrike' }} - ${'code'} | ${{ contentType: 'code', iconName: 'code', label: 'Code', editorCommand: 'toggleCode' }} - ${'blockquote'} | ${{ contentType: 'blockquote', iconName: 'quote', label: 'Insert a quote', editorCommand: 'toggleBlockquote' }} - ${'bullet-list'} | ${{ contentType: 'bulletList', iconName: 'list-bulleted', label: 'Add a bullet list', editorCommand: 'toggleBulletList' }} - ${'ordered-list'} | ${{ contentType: 'orderedList', iconName: 'list-numbered', label: 'Add a numbered list', editorCommand: 'toggleOrderedList' }} - ${'code-block'} | ${{ contentType: 'codeBlock', iconName: 'doc-code', label: 'Insert a code block', editorCommand: 'toggleCodeBlock' }} - ${'text-styles'} | ${{}} - ${'link'} | ${{}} + testId | controlProps + ${'bold'} | ${{ contentType: 'bold', iconName: 'bold', label: 'Bold text', editorCommand: 'toggleBold' }} + ${'italic'} | ${{ contentType: 'italic', iconName: 'italic', label: 'Italic text', editorCommand: 'toggleItalic' }} + ${'strike'} | ${{ contentType: 'strike', iconName: 'strikethrough', label: 'Strikethrough', editorCommand: 'toggleStrike' }} + ${'code'} | ${{ contentType: 'code', iconName: 'code', label: 'Code', editorCommand: 'toggleCode' }} + ${'blockquote'} | ${{ contentType: 'blockquote', iconName: 'quote', label: 'Insert a quote', editorCommand: 'toggleBlockquote' }} + ${'bullet-list'} | ${{ contentType: 'bulletList', iconName: 'list-bulleted', label: 'Add a bullet list', editorCommand: 'toggleBulletList' }} + ${'ordered-list'} | ${{ contentType: 'orderedList', iconName: 'list-numbered', label: 'Add a numbered list', editorCommand: 'toggleOrderedList' }} + ${'horizontal-rule'} | ${{ contentType: 'horizontalRule', iconName: 'dash', label: 'Add a horizontal rule', editorCommand: 'setHorizontalRule' }} + ${'code-block'} | ${{ contentType: 'codeBlock', iconName: 'doc-code', label: 'Insert a code block', editorCommand: 'toggleCodeBlock' }} + ${'text-styles'} | ${{}} + ${'link'} | ${{}} `('given a $testId toolbar control', ({ testId, controlProps }) => { beforeEach(() => { buildWrapper(); diff --git a/spec/frontend/content_editor/extensions/horizontal_rule_spec.js b/spec/frontend/content_editor/extensions/horizontal_rule_spec.js new file mode 100644 index 00000000000..a1bc7f0e8ed --- /dev/null +++ b/spec/frontend/content_editor/extensions/horizontal_rule_spec.js @@ -0,0 +1,20 @@ +import { hrInputRuleRegExp } from '~/content_editor/extensions/horizontal_rule'; + +describe('content_editor/extensions/horizontal_rule', () => { + describe.each` + input | matches + ${'---'} | ${true} + ${'--'} | ${false} + ${'---x'} | ${false} + ${' ---x'} | ${false} + ${' --- '} | ${false} + ${'x---x'} | ${false} + ${'x---'} | ${false} + `('hrInputRuleRegExp', ({ input, matches }) => { + it(`${matches ? 'matches' : 'does not match'}: "${input}"`, () => { + const match = new RegExp(hrInputRuleRegExp).test(input); + + expect(match).toBe(matches); + }); + }); +}); diff --git a/spec/frontend/fixtures/api_markdown.yml b/spec/frontend/fixtures/api_markdown.yml index 3274e914f03..07dbd026a39 100644 --- a/spec/frontend/fixtures/api_markdown.yml +++ b/spec/frontend/fixtures/api_markdown.yml @@ -10,6 +10,8 @@ markdown: '`code`' - name: strike markdown: '~~del~~' +- name: horizontal_rule + markdown: '---' - name: link markdown: '[GitLab](https://gitlab.com)' - name: code_block diff --git a/spec/lib/gitlab/checks/project_moved_spec.rb b/spec/lib/gitlab/checks/container_moved_spec.rb index 469aea8d093..00ef5604e1d 100644 --- a/spec/lib/gitlab/checks/project_moved_spec.rb +++ b/spec/lib/gitlab/checks/container_moved_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Gitlab::Checks::ProjectMoved, :clean_gitlab_redis_shared_state do +RSpec.describe Gitlab::Checks::ContainerMoved, :clean_gitlab_redis_shared_state do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project, :repository, :wiki_repo, namespace: user.namespace) } @@ -14,27 +14,48 @@ RSpec.describe Gitlab::Checks::ProjectMoved, :clean_gitlab_redis_shared_state do subject { described_class.new(repository, git_user, protocol, redirect_path) } describe '.fetch_message' do + let(:key) { "redirect_namespace:#{user.id}:#{project.repository.gl_repository}" } + let(:legacy_key) { "redirect_namespace:#{user.id}:#{project.id}" } + context 'with a redirect message queue' do before do subject.add_message end it 'returns the redirect message' do - expect(described_class.fetch_message(user.id, project.id)).to eq(subject.message) + expect(described_class.fetch_message(user, project.repository)).to eq(subject.message) end it 'deletes the redirect message from redis' do - expect(Gitlab::Redis::SharedState.with { |redis| redis.get("redirect_namespace:#{user.id}:#{project.id}") }).not_to be_nil + expect(Gitlab::Redis::SharedState.with { |redis| redis.get(key) }).not_to be_nil - described_class.fetch_message(user.id, project.id) + described_class.fetch_message(user, project.repository) - expect(Gitlab::Redis::SharedState.with { |redis| redis.get("redirect_namespace:#{user.id}:#{project.id}") }).to be_nil + expect(Gitlab::Redis::SharedState.with { |redis| redis.get(key) }).to be_nil + end + + context 'with a message in the legacy key' do + before do + Gitlab::Redis::SharedState.with do |redis| + redis.set(legacy_key, 'legacy message') + end + end + + it 'returns and deletes the legacy message' do + expect(Gitlab::Redis::SharedState.with { |redis| redis.get(key) }).not_to be_nil + expect(Gitlab::Redis::SharedState.with { |redis| redis.get(legacy_key) }).not_to be_nil + + expect(described_class.fetch_message(user, project.repository)).to eq('legacy message') + + expect(Gitlab::Redis::SharedState.with { |redis| redis.get(key) }).to be_nil + expect(Gitlab::Redis::SharedState.with { |redis| redis.get(legacy_key) }).to be_nil + end end end context 'with no redirect message queue' do it 'returns nil' do - expect(described_class.fetch_message(1, 2)).to be_nil + expect(described_class.fetch_message(user, project.repository)).to be_nil end end end @@ -58,7 +79,7 @@ RSpec.describe Gitlab::Checks::ProjectMoved, :clean_gitlab_redis_shared_state do shared_examples 'returns redirect message' do it do message = <<~MSG - Project '#{redirect_path}' was moved to '#{project.full_path}'. + #{container_label} '#{redirect_path}' was moved to '#{repository.container.full_path}'. Please update your Git remote: @@ -86,6 +107,7 @@ RSpec.describe Gitlab::Checks::ProjectMoved, :clean_gitlab_redis_shared_state do context 'with project' do it_behaves_like 'errors per protocol' do + let(:container_label) { 'Project' } let(:http_url_to_repo) { project.http_url_to_repo } let(:ssh_url_to_repo) { project.ssh_url_to_repo } end @@ -95,6 +117,7 @@ RSpec.describe Gitlab::Checks::ProjectMoved, :clean_gitlab_redis_shared_state do let(:repository) { project.wiki.repository } it_behaves_like 'errors per protocol' do + let(:container_label) { 'Project wiki' } let(:http_url_to_repo) { project.wiki.http_url_to_repo } let(:ssh_url_to_repo) { project.wiki.ssh_url_to_repo } end @@ -106,6 +129,7 @@ RSpec.describe Gitlab::Checks::ProjectMoved, :clean_gitlab_redis_shared_state do let(:repository) { snippet.repository } it_behaves_like 'errors per protocol' do + let(:container_label) { 'Project snippet' } let(:http_url_to_repo) { snippet.http_url_to_repo } let(:ssh_url_to_repo) { snippet.ssh_url_to_repo } end @@ -116,8 +140,10 @@ RSpec.describe Gitlab::Checks::ProjectMoved, :clean_gitlab_redis_shared_state do let(:repository) { snippet.repository } - it 'returns nil' do - expect(subject.add_message).to be_nil + it_behaves_like 'errors per protocol' do + let(:container_label) { 'Personal snippet' } + let(:http_url_to_repo) { snippet.http_url_to_repo } + let(:ssh_url_to_repo) { snippet.ssh_url_to_repo } end end end diff --git a/spec/lib/gitlab/checks/project_created_spec.rb b/spec/lib/gitlab/checks/project_created_spec.rb index 74e43b04b6b..6a2e4201030 100644 --- a/spec/lib/gitlab/checks/project_created_spec.rb +++ b/spec/lib/gitlab/checks/project_created_spec.rb @@ -13,27 +13,48 @@ RSpec.describe Gitlab::Checks::ProjectCreated, :clean_gitlab_redis_shared_state subject { described_class.new(repository, git_user, 'http') } describe '.fetch_message' do + let(:key) { "project_created:#{user.id}:#{project.repository.gl_repository}" } + let(:legacy_key) { "project_created:#{user.id}:#{project.id}" } + context 'with a project created message queue' do before do subject.add_message end it 'returns project created message' do - expect(described_class.fetch_message(user.id, project.id)).to eq(subject.message) + expect(described_class.fetch_message(user, project.repository)).to eq(subject.message) end it 'deletes the project created message from redis' do - expect(Gitlab::Redis::SharedState.with { |redis| redis.get("project_created:#{user.id}:#{project.id}") }).not_to be_nil + expect(Gitlab::Redis::SharedState.with { |redis| redis.get(key) }).not_to be_nil + + described_class.fetch_message(user, project.repository) + + expect(Gitlab::Redis::SharedState.with { |redis| redis.get(key) }).to be_nil + end + + context 'with a message in the legacy key' do + before do + Gitlab::Redis::SharedState.with do |redis| + redis.set(legacy_key, 'legacy message') + end + end + + it 'returns and deletes the legacy message' do + expect(Gitlab::Redis::SharedState.with { |redis| redis.get(key) }).not_to be_nil + expect(Gitlab::Redis::SharedState.with { |redis| redis.get(legacy_key) }).not_to be_nil - described_class.fetch_message(user.id, project.id) + expect(described_class.fetch_message(user, project.repository)).to eq('legacy message') - expect(Gitlab::Redis::SharedState.with { |redis| redis.get("project_created:#{user.id}:#{project.id}") }).to be_nil + expect(Gitlab::Redis::SharedState.with { |redis| redis.get(key) }).to be_nil + expect(Gitlab::Redis::SharedState.with { |redis| redis.get(legacy_key) }).to be_nil + end end end context 'with no project created message queue' do it 'returns nil' do - expect(described_class.fetch_message(1, 2)).to be_nil + expect(described_class.fetch_message(user, project.repository)).to be_nil end end end diff --git a/spec/lib/gitlab/git_access_spec.rb b/spec/lib/gitlab/git_access_spec.rb index 3ee0310a9a2..3a10ce1a30e 100644 --- a/spec/lib/gitlab/git_access_spec.rb +++ b/spec/lib/gitlab/git_access_spec.rb @@ -265,7 +265,7 @@ RSpec.describe Gitlab::GitAccess do it 'enqueues a redirected message for pushing' do push_access_check - expect(Gitlab::Checks::ProjectMoved.fetch_message(user.id, project.id)).not_to be_nil + expect(Gitlab::Checks::ContainerMoved.fetch_message(user, project.repository)).not_to be_nil end it 'allows push and pull access' do diff --git a/spec/lib/gitlab/repo_path_spec.rb b/spec/lib/gitlab/repo_path_spec.rb index 912efa6a5db..6cff0eff7e8 100644 --- a/spec/lib/gitlab/repo_path_spec.rb +++ b/spec/lib/gitlab/repo_path_spec.rb @@ -13,11 +13,11 @@ RSpec.describe ::Gitlab::RepoPath do describe '.parse' do context 'a repository storage path' do - it 'parses a full repository project path' do + it 'parses a full project repository path' do expect(described_class.parse(project.repository.full_path)).to eq([project, project, Gitlab::GlRepository::PROJECT, nil]) end - it 'parses a full wiki project path' do + it 'parses a full project wiki repository path' do expect(described_class.parse(project.wiki.repository.full_path)).to eq([project.wiki, project, Gitlab::GlRepository::WIKI, nil]) end @@ -49,7 +49,7 @@ RSpec.describe ::Gitlab::RepoPath do end it 'parses a relative wiki path' do - expect(described_class.parse(redirect.path + '.wiki.git')).to eq([project.wiki, project, Gitlab::GlRepository::WIKI, redirect_route]) + expect(described_class.parse(redirect.path + '.wiki.git')).to eq([project.wiki, project, Gitlab::GlRepository::WIKI, "#{redirect_route}.wiki"]) end it 'parses a relative path starting with /' do @@ -57,7 +57,7 @@ RSpec.describe ::Gitlab::RepoPath do end it 'parses a redirected project snippet repository path' do - expect(described_class.parse(redirect.path + "/snippets/#{project_snippet.id}.git")).to eq([project_snippet, project, Gitlab::GlRepository::SNIPPET, redirect_route]) + expect(described_class.parse(redirect.path + "/snippets/#{project_snippet.id}.git")).to eq([project_snippet, project, Gitlab::GlRepository::SNIPPET, "#{redirect_route}/snippets/#{project_snippet.id}"]) end end end @@ -70,8 +70,8 @@ RSpec.describe ::Gitlab::RepoPath do describe '.find_project' do context 'when finding a project by its canonical path' do context 'when the cases match' do - it 'returns the project and nil' do - expect(described_class.find_project(project.full_path)).to eq([project, nil]) + it 'returns the project' do + expect(described_class.find_project(project.full_path)).to eq(project) end end @@ -80,45 +80,45 @@ RSpec.describe ::Gitlab::RepoPath do # easy and safe to redirect someone to the correctly-cased URL. For git # requests, we should accept wrongly-cased URLs because it is a pain to # block people's git operations and force them to update remote URLs. - it 'returns the project and nil' do - expect(described_class.find_project(project.full_path.upcase)).to eq([project, nil]) + it 'returns the project' do + expect(described_class.find_project(project.full_path.upcase)).to eq(project) end end end context 'when finding a project via a redirect' do - it 'returns the project and nil' do - expect(described_class.find_project(redirect.path)).to eq([project, redirect.path]) + it 'returns the project' do + expect(described_class.find_project(redirect.path)).to eq(project) end end end describe '.find_snippet' do it 'extracts path and id from personal snippet route' do - expect(described_class.find_snippet("snippets/#{personal_snippet.id}")).to eq([personal_snippet, nil]) + expect(described_class.find_snippet("snippets/#{personal_snippet.id}")).to eq(personal_snippet) end it 'extracts path and id from project snippet route' do - expect(described_class.find_snippet("#{project.full_path}/snippets/#{project_snippet.id}")).to eq([project_snippet, nil]) + expect(described_class.find_snippet("#{project.full_path}/snippets/#{project_snippet.id}")).to eq(project_snippet) end it 'returns nil for invalid snippet paths' do aggregate_failures do - expect(described_class.find_snippet("snippets/#{project_snippet.id}")).to eq([nil, nil]) - expect(described_class.find_snippet("#{project.full_path}/snippets/#{personal_snippet.id}")).to eq([nil, nil]) - expect(described_class.find_snippet('')).to eq([nil, nil]) + expect(described_class.find_snippet("snippets/#{project_snippet.id}")).to be_nil + expect(described_class.find_snippet("#{project.full_path}/snippets/#{personal_snippet.id}")).to be_nil + expect(described_class.find_snippet('')).to be_nil end end it 'returns nil for snippets not associated with the project' do snippet = create(:project_snippet) - expect(described_class.find_snippet("#{project.full_path}/snippets/#{snippet.id}")).to eq([nil, nil]) + expect(described_class.find_snippet("#{project.full_path}/snippets/#{snippet.id}")).to be_nil end context 'when finding a project snippet via a redirect' do - it 'returns the project and true' do - expect(described_class.find_snippet("#{redirect.path}/snippets/#{project_snippet.id}")).to eq([project_snippet, redirect.path]) + it 'returns the project snippet' do + expect(described_class.find_snippet("#{redirect.path}/snippets/#{project_snippet.id}")).to eq(project_snippet) end end end diff --git a/spec/models/audit_event_spec.rb b/spec/models/audit_event_spec.rb index 5c87c2e68db..4af84ba1ee6 100644 --- a/spec/models/audit_event_spec.rb +++ b/spec/models/audit_event_spec.rb @@ -3,9 +3,6 @@ require 'spec_helper' RSpec.describe AuditEvent do - let_it_be(:audit_event) { create(:project_audit_event) } - subject { audit_event } - describe 'validations' do include_examples 'validates IP address' do let(:attribute) { :ip_address } @@ -13,6 +10,71 @@ RSpec.describe AuditEvent do end end + describe 'callbacks' do + describe '#parallel_persist' do + shared_examples 'a parallel persisted field' do + using RSpec::Parameterized::TableSyntax + + where(:column, :details, :expected_value) do + :value | nil | :value + nil | :value | :value + :value | :another_value | :value + nil | nil | nil + end + + with_them do + let(:values) { { value: value, another_value: "#{value}88" } } + + let(:audit_event) do + build(:audit_event, name => values[column], details: { name => values[details] }) + end + + it 'sets both values to be the same', :aggregate_failures do + audit_event.validate + + expect(audit_event[name]).to eq(values[expected_value]) + expect(audit_event.details[name]).to eq(values[expected_value]) + end + end + end + + context 'wih author_name' do + let(:name) { :author_name } + let(:value) { 'Mary Poppins' } + + it_behaves_like 'a parallel persisted field' + end + + context 'with entity_path' do + let(:name) { :entity_path } + let(:value) { 'gitlab-org' } + + it_behaves_like 'a parallel persisted field' + end + + context 'with target_details' do + let(:name) { :target_details } + let(:value) { 'gitlab-org/gitlab' } + + it_behaves_like 'a parallel persisted field' + end + + context 'with target_type' do + let(:name) { :target_type } + let(:value) { 'Project' } + + it_behaves_like 'a parallel persisted field' + end + + context 'with target_id' do + let(:name) { :target_id } + let(:value) { 8 } + + it_behaves_like 'a parallel persisted field' + end + end + end + describe '#as_json' do context 'ip_address' do subject { build(:group_audit_event, ip_address: '192.168.1.1').as_json } diff --git a/spec/requests/api/internal/base_spec.rb b/spec/requests/api/internal/base_spec.rb index 3405d66f216..5f1454f6c5d 100644 --- a/spec/requests/api/internal/base_spec.rb +++ b/spec/requests/api/internal/base_spec.rb @@ -1176,59 +1176,68 @@ RSpec.describe API::Internal::Base do allow_any_instance_of(Gitlab::Identifier).to receive(:identify).and_return(user) end - context 'with Project' do - it 'executes PostReceiveService' do - message = <<~MESSAGE.strip - To create a merge request for #{branch_name}, visit: - http://#{Gitlab.config.gitlab.host}/#{project.full_path}/-/merge_requests/new?merge_request%5Bsource_branch%5D=#{branch_name} - MESSAGE + shared_examples 'runs post-receive hooks' do + let(:gl_repository) { container.repository.gl_repository } + let(:messages) { [] } + it 'executes PostReceiveService' do subject + expect(response).to have_gitlab_http_status(:ok) expect(json_response).to eq({ - 'messages' => [{ 'message' => message, 'type' => 'basic' }], + 'messages' => messages, 'reference_counter_decreased' => true }) end + it 'tries to notify that the container has moved' do + expect(Gitlab::Checks::ContainerMoved).to receive(:fetch_message).with(user, container.repository) + + subject + end + it_behaves_like 'storing arguments in the application context' do - let(:expected_params) { { user: user.username, project: project.full_path } } + let(:expected_params) { expected_context } end end - context 'with PersonalSnippet' do - let(:gl_repository) { "snippet-#{personal_snippet.id}" } - - it 'executes PostReceiveService' do - subject + context 'with Project' do + it_behaves_like 'runs post-receive hooks' do + let(:container) { project } + let(:expected_context) { { user: user.username, project: project.full_path } } - expect(json_response).to eq({ - 'messages' => [], - 'reference_counter_decreased' => true - }) + let(:messages) do + [ + { + 'message' => <<~MESSAGE.strip, + To create a merge request for #{branch_name}, visit: + http://#{Gitlab.config.gitlab.host}/#{project.full_path}/-/merge_requests/new?merge_request%5Bsource_branch%5D=#{branch_name} + MESSAGE + 'type' => 'basic' + } + ] + end end + end - it_behaves_like 'storing arguments in the application context' do - let(:expected_params) { { user: key.user.username } } - let(:gl_repository) { "snippet-#{personal_snippet.id}" } + context 'with PersonalSnippet' do + it_behaves_like 'runs post-receive hooks' do + let(:container) { personal_snippet } + let(:expected_context) { { user: key.user.username } } end end context 'with ProjectSnippet' do - let(:gl_repository) { "snippet-#{project_snippet.id}" } - - it 'executes PostReceiveService' do - subject - - expect(json_response).to eq({ - 'messages' => [], - 'reference_counter_decreased' => true - }) + it_behaves_like 'runs post-receive hooks' do + let(:container) { project_snippet } + let(:expected_context) { { user: key.user.username, project: project_snippet.project.full_path } } end + end - it_behaves_like 'storing arguments in the application context' do - let(:expected_params) { { user: key.user.username, project: project_snippet.project.full_path } } - let(:gl_repository) { "snippet-#{project_snippet.id}" } + context 'with ProjectWiki' do + it_behaves_like 'runs post-receive hooks' do + let(:container) { project.wiki } + let(:expected_context) { { user: key.user.username, project: project.full_path } } end end @@ -1236,7 +1245,7 @@ RSpec.describe API::Internal::Base do it 'does not try to notify that project moved' do allow_any_instance_of(Gitlab::Identifier).to receive(:identify).and_return(nil) - expect(Gitlab::Checks::ProjectMoved).not_to receive(:fetch_message) + expect(Gitlab::Checks::ContainerMoved).not_to receive(:fetch_message) subject @@ -1244,33 +1253,17 @@ RSpec.describe API::Internal::Base do end end - context 'when project is nil' do - context 'with Project' do - let(:gl_repository) { 'project-foo' } - - it 'does not try to notify that project moved' do - allow(Gitlab::GlRepository).to receive(:parse).and_return([nil, nil, Gitlab::GlRepository::PROJECT]) - - expect(Gitlab::Checks::ProjectMoved).not_to receive(:fetch_message) - - subject - - expect(response).to have_gitlab_http_status(:ok) - end - end - - context 'with PersonalSnippet' do - let(:gl_repository) { "snippet-#{personal_snippet.id}" } + context 'when container is nil' do + let(:gl_repository) { 'project-foo' } - it 'does not try to notify that project moved' do - allow(Gitlab::GlRepository).to receive(:parse).and_return([personal_snippet, nil, Gitlab::GlRepository::SNIPPET]) + it 'does not try to notify that project moved' do + allow(Gitlab::GlRepository).to receive(:parse).and_return([nil, nil, Gitlab::GlRepository::PROJECT]) - expect(Gitlab::Checks::ProjectMoved).not_to receive(:fetch_message) + expect(Gitlab::Checks::ContainerMoved).not_to receive(:fetch_message) - subject + subject - expect(response).to have_gitlab_http_status(:ok) - end + expect(response).to have_gitlab_http_status(:ok) end end end diff --git a/spec/services/post_receive_service_spec.rb b/spec/services/post_receive_service_spec.rb index 2a78dc454c7..871ed95bf28 100644 --- a/spec/services/post_receive_service_spec.rb +++ b/spec/services/post_receive_service_spec.rb @@ -283,7 +283,7 @@ RSpec.describe PostReceiveService do context 'with a redirected data' do it 'returns redirected message on the response' do - project_moved = Gitlab::Checks::ProjectMoved.new(project.repository, user, 'http', 'foo/baz') + project_moved = Gitlab::Checks::ContainerMoved.new(project.repository, user, 'http', 'foo/baz') project_moved.add_message expect(subject).to include(build_basic_message(project_moved.message)) |