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>2022-03-02 06:13:05 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2022-03-02 06:13:05 +0300
commit1a54a22498c83026e61d30d36c9c599938664454 (patch)
tree00774b3d97d24f001390341b1e9c88f2c45669a8 /spec
parent90c386a7b0f2701abeb1e86517fc1d5dea231c09 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/controllers/boards/lists_controller_spec.rb4
-rw-r--r--spec/controllers/projects/serverless/functions_controller_spec.rb23
-rw-r--r--spec/lib/banzai/filter/issuable_reference_expansion_filter_spec.rb2
-rw-r--r--spec/lib/serializers/unsafe_json_spec.rb27
-rw-r--r--spec/lib/sidebars/projects/menus/infrastructure_menu_spec.rb8
-rw-r--r--spec/models/concerns/blocks_json_serialization_spec.rb22
-rw-r--r--spec/models/concerns/blocks_unsafe_serialization_spec.rb17
-rw-r--r--spec/models/project_spec.rb14
-rw-r--r--spec/models/user_spec.rb2
-rw-r--r--spec/support/shared_examples/blocks_unsafe_serialization_shared_examples.rb26
-rw-r--r--spec/support/shared_examples/serializers/note_entity_shared_examples.rb23
11 files changed, 142 insertions, 26 deletions
diff --git a/spec/controllers/boards/lists_controller_spec.rb b/spec/controllers/boards/lists_controller_spec.rb
index 29141582c6f..95334974e66 100644
--- a/spec/controllers/boards/lists_controller_spec.rb
+++ b/spec/controllers/boards/lists_controller_spec.rb
@@ -208,7 +208,7 @@ RSpec.describe Boards::ListsController do
sign_in(user)
params = { namespace_id: project.namespace.to_param,
- project_id: project,
+ project_id: project.id,
board_id: board.to_param,
id: list.to_param,
list: { position: position },
@@ -221,7 +221,7 @@ RSpec.describe Boards::ListsController do
sign_in(user)
params = { namespace_id: project.namespace.to_param,
- project_id: project,
+ project_id: project.id,
board_id: board.to_param,
id: list.to_param,
list: setting,
diff --git a/spec/controllers/projects/serverless/functions_controller_spec.rb b/spec/controllers/projects/serverless/functions_controller_spec.rb
index 860bbc1c5cc..f8cee09006c 100644
--- a/spec/controllers/projects/serverless/functions_controller_spec.rb
+++ b/spec/controllers/projects/serverless/functions_controller_spec.rb
@@ -39,9 +39,24 @@ RSpec.describe Projects::Serverless::FunctionsController do
project_id: project.to_param)
end
+ shared_examples_for 'behind :deprecated_serverless feature flag' do
+ before do
+ stub_feature_flags(deprecated_serverless: false)
+ end
+
+ it 'returns 404' do
+ action
+ expect(response).to have_gitlab_http_status(:not_found)
+ end
+ end
+
describe 'GET #index' do
let(:expected_json) { { 'knative_installed' => knative_state, 'functions' => functions } }
+ it_behaves_like 'behind :deprecated_serverless feature flag' do
+ let(:action) { get :index, params: params({ format: :json }) }
+ end
+
context 'when cache is being read' do
let(:knative_state) { 'checking' }
let(:functions) { [] }
@@ -147,6 +162,10 @@ RSpec.describe Projects::Serverless::FunctionsController do
end
describe 'GET #show' do
+ it_behaves_like 'behind :deprecated_serverless feature flag' do
+ let(:action) { get :show, params: params({ format: :json, environment_id: "*", id: "foo" }) }
+ end
+
context 'with function that does not exist' do
it 'returns 404' do
get :show, params: params({ format: :json, environment_id: "*", id: "foo" })
@@ -239,6 +258,10 @@ RSpec.describe Projects::Serverless::FunctionsController do
end
describe 'GET #metrics' do
+ it_behaves_like 'behind :deprecated_serverless feature flag' do
+ let(:action) { get :metrics, params: params({ format: :json, environment_id: "*", id: "foo" }) }
+ end
+
context 'invalid data' do
it 'has a bad function name' do
get :metrics, params: params({ format: :json, environment_id: "*", id: "foo" })
diff --git a/spec/lib/banzai/filter/issuable_reference_expansion_filter_spec.rb b/spec/lib/banzai/filter/issuable_reference_expansion_filter_spec.rb
index 0840ccf19e4..ef23725c790 100644
--- a/spec/lib/banzai/filter/issuable_reference_expansion_filter_spec.rb
+++ b/spec/lib/banzai/filter/issuable_reference_expansion_filter_spec.rb
@@ -33,7 +33,7 @@ RSpec.describe Banzai::Filter::IssuableReferenceExpansionFilter do
end
it 'ignores non-issuable links' do
- link = create_link('text', project: project, reference_type: 'issue')
+ link = create_link('text', project: project.id, reference_type: 'issue')
doc = filter(link, context)
expect(doc.css('a').last.text).to eq('text')
diff --git a/spec/lib/serializers/unsafe_json_spec.rb b/spec/lib/serializers/unsafe_json_spec.rb
new file mode 100644
index 00000000000..9bf04f8f4aa
--- /dev/null
+++ b/spec/lib/serializers/unsafe_json_spec.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+require 'fast_spec_helper'
+require 'oj'
+
+RSpec.describe Serializers::UnsafeJson do
+ let(:result) { double(:result) }
+
+ describe '.dump' do
+ let(:obj) { { key: "value" } }
+
+ it 'calls object#to_json with unsafe: true and returns the result' do
+ expect(obj).to receive(:to_json).with(unsafe: true).and_return(result)
+ expect(described_class.dump(obj)).to eq(result)
+ end
+ end
+
+ describe '.load' do
+ let(:data_string) { '{"key":"value","variables":[{"key":"VAR1","value":"VALUE1"}]}' }
+ let(:data_hash) { Gitlab::Json.parse(data_string) }
+
+ it 'calls JSON.load and returns the result' do
+ expect(JSON).to receive(:load).with(data_hash).and_return(result)
+ expect(described_class.load(data_hash)).to eq(result)
+ end
+ end
+end
diff --git a/spec/lib/sidebars/projects/menus/infrastructure_menu_spec.rb b/spec/lib/sidebars/projects/menus/infrastructure_menu_spec.rb
index 0e415ec6014..8a6b0e4e95d 100644
--- a/spec/lib/sidebars/projects/menus/infrastructure_menu_spec.rb
+++ b/spec/lib/sidebars/projects/menus/infrastructure_menu_spec.rb
@@ -92,6 +92,14 @@ RSpec.describe Sidebars::Projects::Menus::InfrastructureMenu do
let(:item_id) { :serverless }
it_behaves_like 'access rights checks'
+
+ context 'when feature :deprecated_serverless is disabled' do
+ before do
+ stub_feature_flags(deprecated_serverless: false)
+ end
+
+ it { is_expected.to be_nil }
+ end
end
describe 'Terraform' do
diff --git a/spec/models/concerns/blocks_json_serialization_spec.rb b/spec/models/concerns/blocks_json_serialization_spec.rb
deleted file mode 100644
index d811b47fa35..00000000000
--- a/spec/models/concerns/blocks_json_serialization_spec.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe BlocksJsonSerialization do
- before do
- stub_const('DummyModel', Class.new)
- DummyModel.class_eval do
- include BlocksJsonSerialization
- end
- end
-
- it 'blocks as_json' do
- expect { DummyModel.new.as_json }
- .to raise_error(described_class::JsonSerializationError, /DummyModel/)
- end
-
- it 'blocks to_json' do
- expect { DummyModel.new.to_json }
- .to raise_error(described_class::JsonSerializationError, /DummyModel/)
- end
-end
diff --git a/spec/models/concerns/blocks_unsafe_serialization_spec.rb b/spec/models/concerns/blocks_unsafe_serialization_spec.rb
new file mode 100644
index 00000000000..5c8f5035a58
--- /dev/null
+++ b/spec/models/concerns/blocks_unsafe_serialization_spec.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe BlocksUnsafeSerialization do
+ before do
+ stub_const('DummyModel', Class.new)
+ DummyModel.class_eval do
+ include ActiveModel::Serializers::JSON
+ include BlocksUnsafeSerialization
+ end
+ end
+
+ it_behaves_like 'blocks unsafe serialization' do
+ let(:object) { DummyModel.new }
+ end
+end
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index 6516b5f777e..f65365db8a8 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -8022,6 +8022,20 @@ RSpec.describe Project, factory_default: :keep do
end
end
+ describe 'serialization' do
+ let(:object) { build(:project) }
+
+ it_behaves_like 'blocks unsafe serialization'
+
+ context 'when feature flag block_project_serialization is disabled' do
+ before do
+ stub_feature_flags(block_project_serialization: false)
+ end
+
+ it_behaves_like 'allows unsafe serialization'
+ end
+ end
+
describe '#runners_token' do
let_it_be(:project) { create(:project) }
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index a5bf32972a2..49f041947b4 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -17,7 +17,7 @@ RSpec.describe User do
it { is_expected.to include_module(Referable) }
it { is_expected.to include_module(Sortable) }
it { is_expected.to include_module(TokenAuthenticatable) }
- it { is_expected.to include_module(BlocksJsonSerialization) }
+ it { is_expected.to include_module(BlocksUnsafeSerialization) }
it { is_expected.to include_module(AsyncDeviseEmail) }
end
diff --git a/spec/support/shared_examples/blocks_unsafe_serialization_shared_examples.rb b/spec/support/shared_examples/blocks_unsafe_serialization_shared_examples.rb
new file mode 100644
index 00000000000..db42e41344f
--- /dev/null
+++ b/spec/support/shared_examples/blocks_unsafe_serialization_shared_examples.rb
@@ -0,0 +1,26 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+# Requires a context with:
+# - object
+#
+RSpec.shared_examples 'blocks unsafe serialization' do
+ it 'blocks as_json' do
+ expect { object.as_json }.to raise_error(described_class::UnsafeSerializationError, /#{object.class.name}/)
+ end
+
+ it 'blocks to_json' do
+ expect { object.to_json }.to raise_error(described_class::UnsafeSerializationError, /#{object.class.name}/)
+ end
+end
+
+RSpec.shared_examples 'allows unsafe serialization' do
+ it 'allows as_json' do
+ expect { object.as_json }.not_to raise_error
+ end
+
+ it 'allows to_json' do
+ expect { object.to_json }.not_to raise_error
+ end
+end
diff --git a/spec/support/shared_examples/serializers/note_entity_shared_examples.rb b/spec/support/shared_examples/serializers/note_entity_shared_examples.rb
index 9af6ec45e49..2e557ca090c 100644
--- a/spec/support/shared_examples/serializers/note_entity_shared_examples.rb
+++ b/spec/support/shared_examples/serializers/note_entity_shared_examples.rb
@@ -68,6 +68,29 @@ RSpec.shared_examples 'note entity' do
end
end
+ describe ':outdated_line_change_path' do
+ before do
+ allow(note).to receive(:show_outdated_changes?).and_return(show_outdated_changes)
+ end
+
+ context 'when note shows outdated changes' do
+ let(:show_outdated_changes) { true }
+
+ it 'returns correct outdated_line_change_namespace_project_note_path' do
+ path = "/#{note.project.namespace.path}/#{note.project.path}/notes/#{note.id}/outdated_line_change"
+ expect(subject[:outdated_line_change_path]).to eq(path)
+ end
+ end
+
+ context 'when note does not show outdated changes' do
+ let(:show_outdated_changes) { false }
+
+ it 'does not expose outdated_line_change_path' do
+ expect(subject).not_to include(:outdated_line_change_path)
+ end
+ end
+ end
+
context 'when note was edited' do
before do
note.update!(updated_at: 1.minute.from_now, updated_by: user)