Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-06-22 18:06:55 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-06-22 18:06:55 +0300
commit793034a90509193ebf2ad14ed8e5eea10f7c6b4a (patch)
treec6326ec316c71dad77ab8f40b4eedf5093544403 /spec
parente2d00f9148a5c87fe4f56e4fd3c90a9b3574f03b (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/factories/audit_events.rb1
-rw-r--r--spec/frontend/content_editor/components/top_toolbar_spec.js23
-rw-r--r--spec/frontend/content_editor/extensions/horizontal_rule_spec.js20
-rw-r--r--spec/frontend/fixtures/api_markdown.yml2
-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.rb31
-rw-r--r--spec/lib/gitlab/git_access_spec.rb2
-rw-r--r--spec/lib/gitlab/repo_path_spec.rb36
-rw-r--r--spec/models/audit_event_spec.rb68
-rw-r--r--spec/requests/api/internal/base_spec.rb105
-rw-r--r--spec/services/post_receive_service_spec.rb2
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))