diff options
Diffstat (limited to 'spec/lib/api')
-rw-r--r-- | spec/lib/api/ci/helpers/runner_helpers_spec.rb | 2 | ||||
-rw-r--r-- | spec/lib/api/ci/helpers/runner_spec.rb | 2 | ||||
-rw-r--r-- | spec/lib/api/entities/basic_project_details_spec.rb | 28 | ||||
-rw-r--r-- | spec/lib/api/entities/bulk_import_spec.rb | 5 | ||||
-rw-r--r-- | spec/lib/api/entities/bulk_imports/entity_spec.rb | 5 | ||||
-rw-r--r-- | spec/lib/api/entities/diff_spec.rb | 46 | ||||
-rw-r--r-- | spec/lib/api/entities/namespace_basic_spec.rb | 47 | ||||
-rw-r--r-- | spec/lib/api/entities/user_spec.rb | 4 | ||||
-rw-r--r-- | spec/lib/api/entities/wiki_page_spec.rb | 13 | ||||
-rw-r--r-- | spec/lib/api/helpers/common_helpers_spec.rb | 2 | ||||
-rw-r--r-- | spec/lib/api/helpers/import_github_helpers_spec.rb | 47 | ||||
-rw-r--r-- | spec/lib/api/helpers_spec.rb | 77 |
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 |