diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-06-07 21:09:51 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-06-07 21:09:51 +0300 |
commit | 9ee2305f46a2b3d1d1e8a1f1182512599a74dbe1 (patch) | |
tree | 82c0631433839156f7d2fa88a5026c385b2b5703 /spec | |
parent | 9498dc957345829f29fe0bc4e55c969783b457be (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r-- | spec/controllers/groups/uploads_controller_spec.rb | 42 | ||||
-rw-r--r-- | spec/factories/packages/helm/file_metadatum.rb | 6 | ||||
-rw-r--r-- | spec/factories/packages/npm/metadata.rb | 10 | ||||
-rw-r--r-- | spec/frontend/jobs/components/job/stages_dropdown_spec.js | 13 | ||||
-rw-r--r-- | spec/frontend/pipelines/pipeline_details_header_spec.js | 22 | ||||
-rw-r--r-- | spec/graphql/types/root_storage_statistics_type_spec.rb | 6 | ||||
-rw-r--r-- | spec/models/packages/helm/file_metadatum_spec.rb | 8 | ||||
-rw-r--r-- | spec/models/packages/npm/metadatum_spec.rb | 2 | ||||
-rw-r--r-- | spec/models/snippet_spec.rb | 28 | ||||
-rw-r--r-- | spec/requests/api/graphql/namespace/root_storage_statistics_spec.rb | 8 | ||||
-rw-r--r-- | spec/workers/packages/go/sync_packages_worker_spec.rb | 2 |
11 files changed, 117 insertions, 30 deletions
diff --git a/spec/controllers/groups/uploads_controller_spec.rb b/spec/controllers/groups/uploads_controller_spec.rb index 645360289d1..6649e8f057c 100644 --- a/spec/controllers/groups/uploads_controller_spec.rb +++ b/spec/controllers/groups/uploads_controller_spec.rb @@ -40,8 +40,8 @@ RSpec.describe Groups::UploadsController do let(:user) { create(:user) } let(:jpg) { fixture_file_upload('spec/fixtures/rails_sample.jpg', 'image/jpg') } let(:txt) { fixture_file_upload('spec/fixtures/doc_sample.txt', 'text/plain') } - let(:secret) { FileUploader.generate_secret } - let(:uploader_class) { FileUploader } + let(:uploader_class) { NamespaceFileUploader } + let(:secret) { uploader_class.generate_secret } let(:upload_service) do UploadService.new(model, jpg, uploader_class).execute @@ -52,9 +52,9 @@ RSpec.describe Groups::UploadsController do end before do - allow(FileUploader).to receive(:generate_secret).and_return(secret) + allow(uploader_class).to receive(:generate_secret).and_return(secret) - allow_next_instance_of(FileUploader) do |instance| + allow_next_instance_of(uploader_class) do |instance| allow(instance).to receive(:image?).and_return(true) end @@ -72,6 +72,40 @@ RSpec.describe Groups::UploadsController do expect(response).to have_gitlab_http_status(:ok) end + + context 'when uploader class does not match the upload' do + let(:uploader_class) { FileUploader } + + it 'responds with status 200 but logs a deprecation message' do + expect(Gitlab::AppJsonLogger).to receive(:info).with( + message: 'Deprecated usage of build_uploader_from_params', + uploader_class: uploader_class.name, + path: filename, + exists: true + ) + + show_upload + + expect(response).to have_gitlab_http_status(:ok) + end + end + + context 'when filename does not match' do + let(:invalid_filename) { 'invalid_filename.jpg' } + + it 'responds with status 404 and logs a deprecation message' do + expect(Gitlab::AppJsonLogger).to receive(:info).with( + message: 'Deprecated usage of build_uploader_from_params', + uploader_class: uploader_class.name, + path: invalid_filename, + exists: false + ) + + get :show, params: params.merge(secret: secret, filename: invalid_filename) + + expect(response).to have_gitlab_http_status(:not_found) + end + end end context "when signed in" do diff --git a/spec/factories/packages/helm/file_metadatum.rb b/spec/factories/packages/helm/file_metadatum.rb index 590956e5d49..a15f9f386d5 100644 --- a/spec/factories/packages/helm/file_metadatum.rb +++ b/spec/factories/packages/helm/file_metadatum.rb @@ -10,9 +10,9 @@ FactoryBot.define do sequence(:channel) { |n| "#{FFaker::Lorem.word}-#{n}" } metadata do { - 'name': package_file.package.name, - 'version': package_file.package.version, - 'apiVersion': 'v2' + name: package_file.package.name, + version: package_file.package.version, + apiVersion: 'v2' }.tap do |defaults| defaults['description'] = description if description end diff --git a/spec/factories/packages/npm/metadata.rb b/spec/factories/packages/npm/metadata.rb index c8acaa10199..dfdcc3409f9 100644 --- a/spec/factories/packages/npm/metadata.rb +++ b/spec/factories/packages/npm/metadata.rb @@ -6,11 +6,11 @@ FactoryBot.define do package_json do { - 'name': package.name, - 'version': package.version, - 'dist': { - 'tarball': 'http://localhost/tarball.tgz', - 'shasum': '1234567890' + name: package.name, + version: package.version, + dist: { + tarball: 'http://localhost/tarball.tgz', + shasum: '1234567890' } } end diff --git a/spec/frontend/jobs/components/job/stages_dropdown_spec.js b/spec/frontend/jobs/components/job/stages_dropdown_spec.js index 9d01dc50e96..c42edc62183 100644 --- a/spec/frontend/jobs/components/job/stages_dropdown_spec.js +++ b/spec/frontend/jobs/components/job/stages_dropdown_spec.js @@ -1,4 +1,4 @@ -import { GlDropdown, GlDropdownItem, GlLink, GlSprintf } from '@gitlab/ui'; +import { GlDisclosureDropdown, GlLink, GlSprintf } from '@gitlab/ui'; import { shallowMount } from '@vue/test-utils'; import { Mousetrap } from '~/lib/mousetrap'; import { extendedWrapper } from 'helpers/vue_test_utils_helper'; @@ -16,8 +16,8 @@ describe('Stages Dropdown', () => { let wrapper; const findStatus = () => wrapper.findComponent(CiIcon); - const findSelectedStageText = () => wrapper.findComponent(GlDropdown).props('text'); - const findStageItem = (index) => wrapper.findAllComponents(GlDropdownItem).at(index); + const findDropdown = () => wrapper.findComponent(GlDisclosureDropdown); + const findSelectedStageText = () => findDropdown().props('toggleText'); const findPipelineInfoText = () => wrapper.findByTestId('pipeline-info').text(); @@ -50,10 +50,13 @@ describe('Stages Dropdown', () => { }); it('renders dropdown with stages', () => { - expect(findStageItem(0).text()).toBe('build'); + expect(findDropdown().props('items')).toEqual([ + expect.objectContaining({ text: 'build' }), + expect.objectContaining({ text: 'test' }), + ]); }); - it('rendes selected stage', () => { + it('renders selected stage', () => { expect(findSelectedStageText()).toBe('deploy'); }); }); diff --git a/spec/frontend/pipelines/pipeline_details_header_spec.js b/spec/frontend/pipelines/pipeline_details_header_spec.js index 828c90211ec..18ae7454a7b 100644 --- a/spec/frontend/pipelines/pipeline_details_header_spec.js +++ b/spec/frontend/pipelines/pipeline_details_header_spec.js @@ -1,9 +1,10 @@ -import { GlAlert, GlBadge, GlLoadingIcon, GlModal } from '@gitlab/ui'; +import { GlAlert, GlBadge, GlLoadingIcon, GlModal, GlSprintf } from '@gitlab/ui'; import Vue, { nextTick } from 'vue'; import VueApollo from 'vue-apollo'; import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; import createMockApollo from 'helpers/mock_apollo_helper'; import waitForPromises from 'helpers/wait_for_promises'; +import { getIdFromGraphQLId } from '~/graphql_shared/utils'; import PipelineDetailsHeader from '~/pipelines/components/pipeline_details_header.vue'; import { BUTTON_TOOLTIP_RETRY, BUTTON_TOOLTIP_CANCEL } from '~/pipelines/constants'; import TimeAgo from '~/pipelines/components/pipelines_list/time_ago.vue'; @@ -69,6 +70,7 @@ describe('Pipeline details header', () => { const findCancelButton = () => wrapper.findByTestId('cancel-pipeline'); const findDeleteButton = () => wrapper.findByTestId('delete-pipeline'); const findDeleteModal = () => wrapper.findComponent(GlModal); + const findPipelineUserLink = () => wrapper.findByTestId('pipeline-user-link'); const defaultHandlers = [[getPipelineDetailsQuery, successHandler]]; @@ -123,6 +125,7 @@ describe('Pipeline details header', () => { }, }, }, + stubs: { GlSprintf }, apolloProvider: createMockApolloProvider(handlers), }); }; @@ -177,6 +180,23 @@ describe('Pipeline details header', () => { it('displays ref text', () => { expect(findPipelineRefText()).toBe('Related merge request !1 to merge test'); }); + + it('displays pipeline user link with required user popover attributes', () => { + const { + data: { + project: { + pipeline: { user }, + }, + }, + } = pipelineHeaderSuccess; + + const userId = getIdFromGraphQLId(user.id).toString(); + + expect(findPipelineUserLink().classes()).toContain('js-user-link'); + expect(findPipelineUserLink().attributes('data-user-id')).toBe(userId); + expect(findPipelineUserLink().attributes('data-username')).toBe(user.username); + expect(findPipelineUserLink().attributes('href')).toBe(user.webUrl); + }); }); describe('without pipeline name', () => { diff --git a/spec/graphql/types/root_storage_statistics_type_spec.rb b/spec/graphql/types/root_storage_statistics_type_spec.rb index 5dde6aa8b14..56f58825db0 100644 --- a/spec/graphql/types/root_storage_statistics_type_spec.rb +++ b/spec/graphql/types/root_storage_statistics_type_spec.rb @@ -7,9 +7,9 @@ RSpec.describe GitlabSchema.types['RootStorageStatistics'] do it 'has all the required fields' do expect(described_class).to have_graphql_fields(:storage_size, :repository_size, :lfs_objects_size, - :build_artifacts_size, :packages_size, :wiki_size, :snippets_size, - :pipeline_artifacts_size, :uploads_size, :dependency_proxy_size, - :container_registry_size, :registry_size_estimated) + :build_artifacts_size, :packages_size, :wiki_size, :snippets_size, + :pipeline_artifacts_size, :uploads_size, :dependency_proxy_size, + :container_registry_size, :registry_size_estimated) end specify { expect(described_class).to require_graphql_authorizations(:read_statistics) } diff --git a/spec/models/packages/helm/file_metadatum_spec.rb b/spec/models/packages/helm/file_metadatum_spec.rb index 995179b391d..516b3fad940 100644 --- a/spec/models/packages/helm/file_metadatum_spec.rb +++ b/spec/models/packages/helm/file_metadatum_spec.rb @@ -49,11 +49,11 @@ RSpec.describe Packages::Helm::FileMetadatum, type: :model do describe '#metadata' do it 'validates #metadata', :aggregate_failures do is_expected.not_to validate_presence_of(:metadata) - is_expected.to allow_value({ 'name': 'foo', 'version': 'v1.0', 'apiVersion': 'v2' }).for(:metadata) + is_expected.to allow_value({ name: 'foo', version: 'v1.0', apiVersion: 'v2' }).for(:metadata) is_expected.not_to allow_value({}).for(:metadata) - is_expected.not_to allow_value({ 'version': 'v1.0', 'apiVersion': 'v2' }).for(:metadata) - is_expected.not_to allow_value({ 'name': 'foo', 'apiVersion': 'v2' }).for(:metadata) - is_expected.not_to allow_value({ 'name': 'foo', 'version': 'v1.0' }).for(:metadata) + is_expected.not_to allow_value({ version: 'v1.0', apiVersion: 'v2' }).for(:metadata) + is_expected.not_to allow_value({ name: 'foo', apiVersion: 'v2' }).for(:metadata) + is_expected.not_to allow_value({ name: 'foo', version: 'v1.0' }).for(:metadata) end end end diff --git a/spec/models/packages/npm/metadatum_spec.rb b/spec/models/packages/npm/metadatum_spec.rb index 92daddded7e..418194bffdd 100644 --- a/spec/models/packages/npm/metadatum_spec.rb +++ b/spec/models/packages/npm/metadatum_spec.rb @@ -25,7 +25,7 @@ RSpec.describe Packages::Npm::Metadatum, type: :model, feature_category: :packag let(:valid_json) { { 'name' => 'foo', 'version' => 'v1.0', 'dist' => { 'tarball' => 'x', 'shasum' => 'x' } } } it { is_expected.to allow_value(valid_json).for(:package_json) } - it { is_expected.to allow_value(valid_json.merge('extra-field': { 'foo': 'bar' })).for(:package_json) } + it { is_expected.to allow_value(valid_json.merge('extra-field': { foo: 'bar' })).for(:package_json) } it { is_expected.to allow_value(with_dist { |dist| dist.merge('extra-field': 'x') }).for(:package_json) } %w[name version dist].each do |field| diff --git a/spec/models/snippet_spec.rb b/spec/models/snippet_spec.rb index a808c12a39a..4c6f1476481 100644 --- a/spec/models/snippet_spec.rb +++ b/spec/models/snippet_spec.rb @@ -805,6 +805,34 @@ RSpec.describe Snippet do include_examples 'size checker for snippet' end + describe '#hook_attrs' do + let_it_be(:snippet) { create(:personal_snippet, secret_token: 'foo') } + + subject(:attrs) { snippet.hook_attrs } + + it 'includes the expected attributes' do + is_expected.to match( + 'id' => snippet.id, + 'title' => snippet.title, + 'content' => snippet.content, + 'description' => snippet.description, + 'file_name' => snippet.file_name, + 'author_id' => snippet.author_id, + 'project_id' => snippet.project_id, + 'visibility_level' => snippet.visibility_level, + 'encrypted_secret_token' => snippet.encrypted_secret_token, + 'encrypted_secret_token_iv' => snippet.encrypted_secret_token_iv, + 'secret' => false, + 'secret_token' => nil, + 'repository_read_only' => snippet.repository_read_only?, + 'url' => Gitlab::UrlBuilder.build(snippet), + 'type' => 'PersonalSnippet', + 'created_at' => be_like_time(snippet.created_at), + 'updated_at' => be_like_time(snippet.updated_at) + ) + end + end + describe '#can_cache_field?' do using RSpec::Parameterized::TableSyntax diff --git a/spec/requests/api/graphql/namespace/root_storage_statistics_spec.rb b/spec/requests/api/graphql/namespace/root_storage_statistics_spec.rb index cee698d6dc5..7c48f324d24 100644 --- a/spec/requests/api/graphql/namespace/root_storage_statistics_spec.rb +++ b/spec/requests/api/graphql/namespace/root_storage_statistics_spec.rb @@ -10,9 +10,11 @@ RSpec.describe 'rendering namespace statistics', feature_category: :metrics do let(:user) { create(:user) } let(:query) do - graphql_query_for('namespace', - { 'fullPath' => namespace.full_path }, - "rootStorageStatistics { #{all_graphql_fields_for('RootStorageStatistics')} }") + graphql_query_for( + 'namespace', + { 'fullPath' => namespace.full_path }, + "rootStorageStatistics { #{all_graphql_fields_for('RootStorageStatistics')} }" + ) end shared_examples 'a working namespace with storage statistics query' do diff --git a/spec/workers/packages/go/sync_packages_worker_spec.rb b/spec/workers/packages/go/sync_packages_worker_spec.rb index 5fdb7a242f6..08962de0805 100644 --- a/spec/workers/packages/go/sync_packages_worker_spec.rb +++ b/spec/workers/packages/go/sync_packages_worker_spec.rb @@ -73,7 +73,7 @@ RSpec.describe Packages::Go::SyncPackagesWorker, type: :worker, feature_category context 'with a package that exceeds project limits' do before do - Plan.default.actual_limits.update!({ 'golang_max_file_size': 1 }) + Plan.default.actual_limits.update!({ golang_max_file_size: 1 }) end it 'logs an exception' do |