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
diff options
context:
space:
mode:
Diffstat (limited to 'spec/lib/api')
-rw-r--r--spec/lib/api/ci/helpers/runner_helpers_spec.rb2
-rw-r--r--spec/lib/api/ci/helpers/runner_spec.rb2
-rw-r--r--spec/lib/api/entities/basic_project_details_spec.rb28
-rw-r--r--spec/lib/api/entities/bulk_import_spec.rb5
-rw-r--r--spec/lib/api/entities/bulk_imports/entity_spec.rb5
-rw-r--r--spec/lib/api/entities/diff_spec.rb46
-rw-r--r--spec/lib/api/entities/namespace_basic_spec.rb47
-rw-r--r--spec/lib/api/entities/user_spec.rb4
-rw-r--r--spec/lib/api/entities/wiki_page_spec.rb13
-rw-r--r--spec/lib/api/helpers/common_helpers_spec.rb2
-rw-r--r--spec/lib/api/helpers/import_github_helpers_spec.rb47
-rw-r--r--spec/lib/api/helpers_spec.rb77
12 files changed, 254 insertions, 24 deletions
diff --git a/spec/lib/api/ci/helpers/runner_helpers_spec.rb b/spec/lib/api/ci/helpers/runner_helpers_spec.rb
index c36c8d23e88..e05be65bf19 100644
--- a/spec/lib/api/ci/helpers/runner_helpers_spec.rb
+++ b/spec/lib/api/ci/helpers/runner_helpers_spec.rb
@@ -62,7 +62,7 @@ RSpec.describe API::Ci::Helpers::Runner, feature_category: :runner do
it 'extracts the runner details', :aggregate_failures do
expect(details.keys).to match_array(
- %w(system_id name version revision platform architecture executor config ip_address)
+ %w[system_id name version revision platform architecture executor config ip_address]
)
expect(details['system_id']).to eq(system_id)
expect(details['name']).to eq(name)
diff --git a/spec/lib/api/ci/helpers/runner_spec.rb b/spec/lib/api/ci/helpers/runner_spec.rb
index 70504a58af3..b74f5bf2de8 100644
--- a/spec/lib/api/ci/helpers/runner_spec.rb
+++ b/spec/lib/api/ci/helpers/runner_spec.rb
@@ -111,7 +111,7 @@ RSpec.describe API::Ci::Helpers::Runner do
expect(current_runner_manager).not_to be_nil
expect(current_runner_manager.system_xid).to eq('new_system_id')
- expect(current_runner_manager.contacted_at).to eq(Time.current)
+ expect(current_runner_manager.contacted_at).to be_nil
expect(current_runner_manager.runner).to eq(runner)
end
diff --git a/spec/lib/api/entities/basic_project_details_spec.rb b/spec/lib/api/entities/basic_project_details_spec.rb
index 425252ea315..6e75f08d937 100644
--- a/spec/lib/api/entities/basic_project_details_spec.rb
+++ b/spec/lib/api/entities/basic_project_details_spec.rb
@@ -61,4 +61,32 @@ RSpec.describe API::Entities::BasicProjectDetails, feature_category: :api do
end
end
end
+
+ describe '#repository_storage' do
+ let_it_be(:project) { build(:project, :public) }
+
+ context 'with anonymous user' do
+ let_it_be(:current_user) { nil }
+
+ it 'is not included' do
+ expect(output).not_to include(:repository_storage)
+ end
+ end
+
+ context 'with normal user' do
+ let_it_be(:current_user) { create(:user) }
+
+ it 'is not included' do
+ expect(output).not_to include(:repository_storage)
+ end
+ end
+
+ context 'with admin user' do
+ let_it_be(:current_user) { create(:user, :admin) }
+
+ it 'is included', :enable_admin_mode do
+ expect(output).to include repository_storage: project.repository_storage
+ end
+ end
+ end
end
diff --git a/spec/lib/api/entities/bulk_import_spec.rb b/spec/lib/api/entities/bulk_import_spec.rb
index 2db6862b079..cfa293463ad 100644
--- a/spec/lib/api/entities/bulk_import_spec.rb
+++ b/spec/lib/api/entities/bulk_import_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe API::Entities::BulkImport do
+RSpec.describe API::Entities::BulkImport, feature_category: :importers do
let_it_be(:import) { create(:bulk_import) }
subject { described_class.new(import).as_json }
@@ -13,7 +13,8 @@ RSpec.describe API::Entities::BulkImport do
:status,
:source_type,
:created_at,
- :updated_at
+ :updated_at,
+ :has_failures
)
end
end
diff --git a/spec/lib/api/entities/bulk_imports/entity_spec.rb b/spec/lib/api/entities/bulk_imports/entity_spec.rb
index ba8a2ddffcb..791cd3a20e2 100644
--- a/spec/lib/api/entities/bulk_imports/entity_spec.rb
+++ b/spec/lib/api/entities/bulk_imports/entity_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe API::Entities::BulkImports::Entity do
+RSpec.describe API::Entities::BulkImports::Entity, feature_category: :importers do
let_it_be(:entity) { create(:bulk_import_entity) }
subject { described_class.new(entity).as_json }
@@ -22,7 +22,8 @@ RSpec.describe API::Entities::BulkImports::Entity do
:created_at,
:updated_at,
:failures,
- :migrate_projects
+ :migrate_projects,
+ :has_failures
)
end
end
diff --git a/spec/lib/api/entities/diff_spec.rb b/spec/lib/api/entities/diff_spec.rb
new file mode 100644
index 00000000000..27d9ed44c98
--- /dev/null
+++ b/spec/lib/api/entities/diff_spec.rb
@@ -0,0 +1,46 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe ::API::Entities::Diff, feature_category: :source_code_management do
+ subject(:json) { entity.as_json }
+
+ let_it_be(:user) { create(:user) }
+ let_it_be(:project) { create(:project, :repository) }
+ let_it_be(:repository) { project.repository }
+ let_it_be(:diff) { repository.diff('HEAD~1', 'HEAD').first }
+
+ let(:entity) { described_class.new(diff, options) }
+ let(:options) { {} }
+
+ it 'returns expected data' do
+ expect(entity.as_json).to eq(
+ {
+ diff: diff.diff,
+ new_path: diff.new_path,
+ old_path: diff.old_path,
+ a_mode: diff.a_mode,
+ b_mode: diff.b_mode,
+ new_file: diff.new_file?,
+ renamed_file: diff.renamed_file?,
+ deleted_file: diff.deleted_file?
+ }
+ )
+ end
+
+ context 'when enable_unidiff option is set' do
+ let(:options) { { enable_unidiff: true } }
+
+ it 'returns expected data' do
+ expect(entity.as_json).to include(diff: diff.unidiff)
+ end
+ end
+
+ context 'when enable_unidiff option is false' do
+ let(:options) { { enable_unidiff: false } }
+
+ it 'returns expected data' do
+ expect(entity.as_json).to include(diff: diff.diff)
+ end
+ end
+end
diff --git a/spec/lib/api/entities/namespace_basic_spec.rb b/spec/lib/api/entities/namespace_basic_spec.rb
new file mode 100644
index 00000000000..9a0352991c8
--- /dev/null
+++ b/spec/lib/api/entities/namespace_basic_spec.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe ::API::Entities::NamespaceBasic, feature_category: :groups_and_projects do
+ let_it_be(:current_user) { create(:user) }
+ let_it_be(:namespace) { create(:namespace) }
+
+ let(:options) { { current_user: current_user } }
+
+ let(:entity) do
+ described_class.new(namespace, options)
+ end
+
+ subject(:json) { entity.as_json }
+
+ shared_examples 'returns a response' do
+ it 'returns required fields' do
+ expect(json[:id]).to be_present
+ expect(json[:name]).to be_present
+ expect(json[:path]).to be_present
+ expect(json[:kind]).to be_present
+ expect(json[:full_path]).to be_present
+ expect(json[:web_url]).to be_present
+ end
+ end
+
+ include_examples 'returns a response'
+
+ context 'for a user namespace' do
+ let_it_be(:namespace) { create(:user_namespace) }
+
+ include_examples 'returns a response'
+
+ context 'when user namespece owner is missing' do
+ before do
+ namespace.update_column(:owner_id, non_existing_record_id)
+ end
+
+ include_examples 'returns a response'
+
+ it 'returns correct web_url' do
+ expect(json[:web_url]).to include(namespace.path)
+ end
+ end
+ end
+end
diff --git a/spec/lib/api/entities/user_spec.rb b/spec/lib/api/entities/user_spec.rb
index 1d80aad2127..c5a98e6e42e 100644
--- a/spec/lib/api/entities/user_spec.rb
+++ b/spec/lib/api/entities/user_spec.rb
@@ -16,7 +16,7 @@ RSpec.describe API::Entities::User do
# UserSafe
:id, :username, :name,
# UserBasic
- :state, :avatar_url, :web_url,
+ :state, :locked, :avatar_url, :web_url,
# User
:created_at, :bio, :location, :public_email, :skype, :linkedin, :twitter, :discord,
:website_url, :organization, :job_title, :pronouns, :bot, :work_information,
@@ -29,7 +29,7 @@ RSpec.describe API::Entities::User do
allow(Ability).to receive(:allowed?).with(current_user, :read_user_profile, user).and_return(can_read_user_profile)
end
- %i(followers following is_followed).each do |relationship|
+ %i[followers following is_followed].each do |relationship|
shared_examples 'does not expose relationship' do
it "does not expose #{relationship}" do
expect(subject).not_to include(relationship)
diff --git a/spec/lib/api/entities/wiki_page_spec.rb b/spec/lib/api/entities/wiki_page_spec.rb
index c75bba12484..a3566293c5c 100644
--- a/spec/lib/api/entities/wiki_page_spec.rb
+++ b/spec/lib/api/entities/wiki_page_spec.rb
@@ -22,6 +22,19 @@ RSpec.describe API::Entities::WikiPage do
expect(subject[:content]).to eq wiki_page.content
end
+ context "with front matter content" do
+ let(:wiki_page) { create(:wiki_page) }
+ let(:content_with_front_matter) { "---\nxxx: abc\n---\nHome Page" }
+
+ before do
+ wiki_page.update(content: content_with_front_matter) # rubocop:disable Rails/SaveBang
+ end
+
+ it 'returns the raw wiki page content' do
+ expect(subject[:content]).to eq content_with_front_matter
+ end
+ end
+
context 'when render_html param is passed' do
context 'when it is true' do
let(:params) { { render_html: true } }
diff --git a/spec/lib/api/helpers/common_helpers_spec.rb b/spec/lib/api/helpers/common_helpers_spec.rb
index 5162d2f1000..04a1837dec9 100644
--- a/spec/lib/api/helpers/common_helpers_spec.rb
+++ b/spec/lib/api/helpers/common_helpers_spec.rb
@@ -44,7 +44,7 @@ RSpec.describe API::Helpers::CommonHelpers do
get '/test?array=&array_of_strings=test,me&array_of_ints=1,2'
expect(json_response['array']).to eq([])
- expect(json_response['array_of_strings']).to eq(%w(test me))
+ expect(json_response['array_of_strings']).to eq(%w[test me])
expect(json_response['array_of_ints']).to eq([1, 2])
end
end
diff --git a/spec/lib/api/helpers/import_github_helpers_spec.rb b/spec/lib/api/helpers/import_github_helpers_spec.rb
new file mode 100644
index 00000000000..3324e38660c
--- /dev/null
+++ b/spec/lib/api/helpers/import_github_helpers_spec.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe API::Helpers::ImportGithubHelpers, feature_category: :importers do
+ subject do
+ helper = Class.new.include(described_class).new
+ def helper.params = {
+ personal_access_token: 'foo',
+ additional_access_tokens: 'bar',
+ github_hostname: 'github.example.com'
+ }
+ helper
+ end
+
+ describe '#client' do
+ it 'returns the new github client' do
+ expect(subject.client).to be_a(Gitlab::GithubImport::Client)
+ end
+ end
+
+ describe '#access_params' do
+ it 'makes the passed in personal access token and extra tokens accessible' do
+ expect(subject.access_params).to eq({ github_access_token: 'foo', additional_access_tokens: 'bar' })
+ end
+ end
+
+ describe '#provider' do
+ it 'is GitHub' do
+ expect(subject.provider).to eq(:github)
+ end
+ end
+
+ describe '#provider_unauthorized' do
+ it 'raises an error' do
+ expect(subject).to receive(:error!).with('Access denied to your GitHub account.', 401)
+ subject.provider_unauthorized
+ end
+ end
+
+ describe '#too_many_requests' do
+ it 'raises an error' do
+ expect(subject).to receive(:error!).with('Too Many Requests', 429)
+ subject.too_many_requests
+ end
+ end
+end
diff --git a/spec/lib/api/helpers_spec.rb b/spec/lib/api/helpers_spec.rb
index dd62343890e..5d343ec2777 100644
--- a/spec/lib/api/helpers_spec.rb
+++ b/spec/lib/api/helpers_spec.rb
@@ -773,21 +773,43 @@ RSpec.describe API::Helpers, feature_category: :shared do
end
describe '#track_event' do
- let(:user_id) { 345 }
- let(:namespace_id) { 12 }
- let(:project_id) { 56 }
+ let_it_be(:user) { create(:user) }
+ let_it_be(:namespace) { create(:namespace) }
+ let_it_be(:project) { create(:project) }
let(:event_name) { 'i_compliance_dashboard' }
let(:unknown_event) { 'unknown' }
it 'tracks internal event' do
expect(Gitlab::InternalEvents).to receive(:track_event).with(
event_name,
- user_id: user_id,
- namespace_id: namespace_id,
- project_id: project_id
+ send_snowplow_event: true,
+ user: user,
+ namespace: namespace,
+ project: project
)
- helper.track_event(event_name, user_id: user_id, namespace_id: namespace_id, project_id: project_id)
+ helper.track_event(event_name,
+ user: user,
+ namespace_id: namespace.id,
+ project_id: project.id
+ )
+ end
+
+ it 'passes send_snowplow_event on to InternalEvents.track_event' do
+ expect(Gitlab::InternalEvents).to receive(:track_event).with(
+ event_name,
+ send_snowplow_event: false,
+ user: user,
+ namespace: namespace,
+ project: project
+ )
+
+ helper.track_event(event_name,
+ send_snowplow_event: false,
+ user: user,
+ namespace_id: namespace.id,
+ project_id: project.id
+ )
end
it 'logs an exception for unknown event' do
@@ -797,18 +819,29 @@ RSpec.describe API::Helpers, feature_category: :shared do
instance_of(Gitlab::InternalEvents::UnknownEventError),
event_name: unknown_event
)
- helper.track_event(unknown_event, user_id: user_id, namespace_id: namespace_id, project_id: project_id)
+
+ helper.track_event(unknown_event,
+ user: user,
+ namespace_id: namespace.id,
+ project_id: project.id
+ )
end
- it 'does not track event for nil user_id' do
+ it 'does not track event for nil user' do
expect(Gitlab::InternalEvents).not_to receive(:track_event)
- helper.track_event(unknown_event, user_id: nil, namespace_id: namespace_id, project_id: project_id)
+ helper.track_event(unknown_event,
+ user: nil,
+ namespace_id: namespace.id,
+ project_id: project.id
+ )
end
end
shared_examples '#order_options_with_tie_breaker' do
- subject { Class.new.include(described_class).new.order_options_with_tie_breaker }
+ subject { Class.new.include(described_class).new.order_options_with_tie_breaker(**reorder_params) }
+
+ let(:reorder_params) { {} }
before do
allow_any_instance_of(described_class).to receive(:params).and_return(params)
@@ -852,11 +885,25 @@ RSpec.describe API::Helpers, feature_category: :shared do
describe '#order_options_with_tie_breaker' do
include_examples '#order_options_with_tie_breaker'
- context 'with created_at order given' do
- let(:params) { { order_by: 'created_at', sort: 'asc' } }
+ context 'by default' do
+ context 'with created_at order given' do
+ let(:params) { { order_by: 'created_at', sort: 'asc' } }
- it 'converts to id' do
- is_expected.to eq({ 'id' => 'asc' })
+ it 'converts to id' do
+ is_expected.to eq({ 'id' => 'asc' })
+ end
+ end
+ end
+
+ context 'when override_created_at is false' do
+ let(:reorder_params) { { override_created_at: false } }
+
+ context 'with created_at order given' do
+ let(:params) { { order_by: 'created_at', sort: 'asc' } }
+
+ it 'does not convert to id' do
+ is_expected.to eq({ "created_at" => "asc", "id" => "asc" })
+ end
end
end
end