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/helpers/routing/pseudonymization_helper_spec.rb')
-rw-r--r--spec/helpers/routing/pseudonymization_helper_spec.rb220
1 files changed, 167 insertions, 53 deletions
diff --git a/spec/helpers/routing/pseudonymization_helper_spec.rb b/spec/helpers/routing/pseudonymization_helper_spec.rb
index a28a86d1f53..82ed893289d 100644
--- a/spec/helpers/routing/pseudonymization_helper_spec.rb
+++ b/spec/helpers/routing/pseudonymization_helper_spec.rb
@@ -25,95 +25,196 @@ RSpec.describe ::Routing::PseudonymizationHelper do
describe 'when url has params to mask' do
context 'with controller for MR' do
- let(:masked_url) { "http://test.host/namespace:#{group.id}/project:#{project.id}/-/merge_requests/#{merge_request.id}" }
+ let(:masked_url) { "http://localhost/namespace#{group.id}/project#{project.id}/-/merge_requests/#{merge_request.id}" }
+ let(:request) do
+ double(:Request,
+ path_parameters: {
+ controller: "projects/merge_requests",
+ action: "show",
+ namespace_id: group.name,
+ project_id: project.name,
+ id: merge_request.id.to_s
+ },
+ protocol: 'http',
+ host: 'localhost',
+ query_string: '')
+ end
before do
- allow(Rails.application.routes).to receive(:recognize_path).and_return({
- controller: "projects/merge_requests",
- action: "show",
- namespace_id: group.name,
- project_id: project.name,
- id: merge_request.id.to_s
- })
+ allow(helper).to receive(:request).and_return(request)
end
it_behaves_like 'masked url'
end
context 'with controller for issue' do
- let(:masked_url) { "http://test.host/namespace:#{group.id}/project:#{project.id}/-/issues/#{issue.id}" }
+ let(:masked_url) { "http://localhost/namespace#{group.id}/project#{project.id}/-/issues/#{issue.id}" }
+ let(:request) do
+ double(:Request,
+ path_parameters: {
+ controller: "projects/issues",
+ action: "show",
+ namespace_id: group.name,
+ project_id: project.name,
+ id: issue.id.to_s
+ },
+ protocol: 'http',
+ host: 'localhost',
+ query_string: '')
+ end
before do
- allow(Rails.application.routes).to receive(:recognize_path).and_return({
- controller: "projects/issues",
- action: "show",
- namespace_id: group.name,
- project_id: project.name,
- id: issue.id.to_s
- })
+ allow(helper).to receive(:request).and_return(request)
end
it_behaves_like 'masked url'
end
context 'with controller for groups with subgroups and project' do
- let(:masked_url) { "http://test.host/namespace:#{subgroup.id}/project:#{subproject.id}"}
+ let(:masked_url) { "http://localhost/namespace#{subgroup.id}/project#{subproject.id}"}
+ let(:request) do
+ double(:Request,
+ path_parameters: {
+ controller: 'projects',
+ action: 'show',
+ namespace_id: subgroup.name,
+ id: subproject.name
+ },
+ protocol: 'http',
+ host: 'localhost',
+ query_string: '')
+ end
before do
allow(helper).to receive(:group).and_return(subgroup)
allow(helper).to receive(:project).and_return(subproject)
- allow(Rails.application.routes).to receive(:recognize_path).and_return({
- controller: 'projects',
- action: 'show',
- namespace_id: subgroup.name,
- id: subproject.name
- })
+ allow(helper).to receive(:request).and_return(request)
end
it_behaves_like 'masked url'
end
context 'with controller for groups and subgroups' do
- let(:masked_url) { "http://test.host/namespace:#{subgroup.id}"}
+ let(:masked_url) { "http://localhost/groups/namespace#{subgroup.id}/-/shared"}
+ let(:request) do
+ double(:Request,
+ path_parameters: {
+ controller: 'groups',
+ action: 'show',
+ id: subgroup.name
+ },
+ protocol: 'http',
+ host: 'localhost',
+ query_string: '')
+ end
before do
allow(helper).to receive(:group).and_return(subgroup)
- allow(Rails.application.routes).to receive(:recognize_path).and_return({
- controller: 'groups',
- action: 'show',
- id: subgroup.name
- })
+ allow(helper).to receive(:request).and_return(request)
end
it_behaves_like 'masked url'
end
context 'with controller for blob with file path' do
- let(:masked_url) { "http://test.host/namespace:#{group.id}/project:#{project.id}/-/blob/:repository_path" }
+ let(:masked_url) { "http://localhost/namespace#{group.id}/project#{project.id}/-/blob/:repository_path" }
+ let(:request) do
+ double(:Request,
+ path_parameters: {
+ controller: 'projects/blob',
+ action: 'show',
+ namespace_id: group.name,
+ project_id: project.name,
+ id: 'master/README.md'
+ },
+ protocol: 'http',
+ host: 'localhost',
+ query_string: '')
+ end
+
+ before do
+ allow(helper).to receive(:request).and_return(request)
+ end
+
+ it_behaves_like 'masked url'
+ end
+
+ context 'when assignee_username is present' do
+ let(:masked_url) { "http://localhost/dashboard/issues?assignee_username=masked_assignee_username" }
+ let(:request) do
+ double(:Request,
+ path_parameters: {
+ controller: 'dashboard',
+ action: 'issues'
+ },
+ protocol: 'http',
+ host: 'localhost',
+ query_string: 'assignee_username=root')
+ end
before do
- allow(Rails.application.routes).to receive(:recognize_path).and_return({
- controller: 'projects/blob',
- action: 'show',
- namespace_id: group.name,
- project_id: project.name,
- id: 'master/README.md'
- })
+ allow(helper).to receive(:request).and_return(request)
end
it_behaves_like 'masked url'
end
- context 'with non identifiable controller' do
- let(:masked_url) { "http://test.host/dashboard/issues?assignee_username=root" }
+ context 'when author_username is present' do
+ let(:masked_url) { "http://localhost/dashboard/issues?author_username=masked_author_username&scope=masked_scope&state=masked_state" }
+ let(:request) do
+ double(:Request,
+ path_parameters: {
+ controller: 'dashboard',
+ action: 'issues'
+ },
+ protocol: 'http',
+ host: 'localhost',
+ query_string: 'author_username=root&scope=all&state=opened')
+ end
before do
- controller.request.path = '/dashboard/issues'
- controller.request.query_string = 'assignee_username=root'
- allow(Rails.application.routes).to receive(:recognize_path).and_return({
- controller: 'dashboard',
- action: 'issues'
- })
+ allow(helper).to receive(:request).and_return(request)
+ end
+
+ it_behaves_like 'masked url'
+ end
+
+ context 'when some query params are not required to be masked' do
+ let(:masked_url) { "http://localhost/dashboard/issues?author_username=masked_author_username&scope=all&state=masked_state" }
+ let(:request) do
+ double(:Request,
+ path_parameters: {
+ controller: 'dashboard',
+ action: 'issues'
+ },
+ protocol: 'http',
+ host: 'localhost',
+ query_string: 'author_username=root&scope=all&state=opened')
+ end
+
+ before do
+ stub_const('Routing::PseudonymizationHelper::MaskHelper::QUERY_PARAMS_TO_NOT_MASK', %w[scope].freeze)
+ allow(helper).to receive(:request).and_return(request)
+ end
+
+ it_behaves_like 'masked url'
+ end
+
+ context 'when query string has keys with the same names as path params' do
+ let(:masked_url) { "http://localhost/dashboard/issues?action=masked_action&scope=masked_scope&state=masked_state" }
+ let(:request) do
+ double(:Request,
+ path_parameters: {
+ controller: 'dashboard',
+ action: 'issues'
+ },
+ protocol: 'http',
+ host: 'localhost',
+ query_string: 'action=foobar&scope=all&state=opened')
+ end
+
+ before do
+ allow(helper).to receive(:request).and_return(request)
end
it_behaves_like 'masked url'
@@ -121,9 +222,13 @@ RSpec.describe ::Routing::PseudonymizationHelper do
end
describe 'when url has no params to mask' do
- let(:root_url) { 'http://test.host' }
+ let(:root_url) { 'http://localhost/some/path' }
context 'returns root url' do
+ before do
+ controller.request.path = 'some/path'
+ end
+
it 'masked_page_url' do
expect(helper.masked_page_url).to eq(root_url)
end
@@ -132,17 +237,26 @@ RSpec.describe ::Routing::PseudonymizationHelper do
describe 'when it raises exception' do
context 'calls error tracking' do
+ let(:request) do
+ double(:Request,
+ path_parameters: {
+ controller: 'dashboard',
+ action: 'issues'
+ },
+ protocol: 'http',
+ host: 'localhost',
+ query_string: 'assignee_username=root',
+ original_fullpath: '/dashboard/issues?assignee_username=root')
+ end
+
before do
- controller.request.path = '/dashboard/issues'
- controller.request.query_string = 'assignee_username=root'
- allow(Rails.application.routes).to receive(:recognize_path).and_return({
- controller: 'dashboard',
- action: 'issues'
- })
+ allow(helper).to receive(:request).and_return(request)
end
it 'sends error to sentry and returns nil' do
- allow(helper).to receive(:mask_params).with(anything).and_raise(ActionController::RoutingError, 'Some routing error')
+ allow_next_instance_of(Routing::PseudonymizationHelper::MaskHelper) do |mask_helper|
+ allow(mask_helper).to receive(:mask_params).and_raise(ActionController::RoutingError, 'Some routing error')
+ end
expect(Gitlab::ErrorTracking).to receive(:track_exception).with(
ActionController::RoutingError,