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>2021-02-11 02:24:31 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-02-11 02:24:31 +0300
commit83380b5e7f6489d6429af539ebd2fd1bb973d90f (patch)
tree60df92052073f1619b2b3515b5aa3d928fc60f9c /spec
parent21585f82e753689cc46f59c02d8e207756d794bf (diff)
Add latest changes from gitlab-org/security/gitlab@13-8-stable-ee
Diffstat (limited to 'spec')
-rw-r--r--spec/factories/projects.rb7
-rw-r--r--spec/lib/gitlab/auth/otp/strategies/forti_token_cloud_spec.rb21
-rw-r--r--spec/policies/project_policy_spec.rb72
-rw-r--r--spec/requests/api/projects_spec.rb1
4 files changed, 96 insertions, 5 deletions
diff --git a/spec/factories/projects.rb b/spec/factories/projects.rb
index f5e496080c4..54a5dea49bb 100644
--- a/spec/factories/projects.rb
+++ b/spec/factories/projects.rb
@@ -28,6 +28,7 @@ FactoryBot.define do
forking_access_level { ProjectFeature::ENABLED }
merge_requests_access_level { ProjectFeature::ENABLED }
repository_access_level { ProjectFeature::ENABLED }
+ analytics_access_level { ProjectFeature::ENABLED }
pages_access_level do
visibility_level == Gitlab::VisibilityLevel::PUBLIC ? ProjectFeature::ENABLED : ProjectFeature::PRIVATE
end
@@ -63,7 +64,8 @@ FactoryBot.define do
repository_access_level: evaluator.repository_access_level,
pages_access_level: evaluator.pages_access_level,
metrics_dashboard_access_level: evaluator.metrics_dashboard_access_level,
- operations_access_level: evaluator.operations_access_level
+ operations_access_level: evaluator.operations_access_level,
+ analytics_access_level: evaluator.analytics_access_level
}
project.build_project_feature(hash)
@@ -335,6 +337,9 @@ FactoryBot.define do
trait(:operations_enabled) { operations_access_level { ProjectFeature::ENABLED } }
trait(:operations_disabled) { operations_access_level { ProjectFeature::DISABLED } }
trait(:operations_private) { operations_access_level { ProjectFeature::PRIVATE } }
+ trait(:analytics_enabled) { analytics_access_level { ProjectFeature::ENABLED } }
+ trait(:analytics_disabled) { analytics_access_level { ProjectFeature::DISABLED } }
+ trait(:analytics_private) { analytics_access_level { ProjectFeature::PRIVATE } }
trait :auto_devops do
association :auto_devops, factory: :project_auto_devops
diff --git a/spec/lib/gitlab/auth/otp/strategies/forti_token_cloud_spec.rb b/spec/lib/gitlab/auth/otp/strategies/forti_token_cloud_spec.rb
index 1580fc82279..368cf98dfec 100644
--- a/spec/lib/gitlab/auth/otp/strategies/forti_token_cloud_spec.rb
+++ b/spec/lib/gitlab/auth/otp/strategies/forti_token_cloud_spec.rb
@@ -13,6 +13,8 @@ RSpec.describe Gitlab::Auth::Otp::Strategies::FortiTokenCloud do
let(:otp_verification_url) { url + '/auth' }
let(:access_token) { 'an_access_token' }
let(:access_token_create_response_body) { '' }
+ let(:access_token_request_body) { { client_id: client_id, client_secret: client_secret } }
+ let(:headers) { { 'Content-Type': 'application/json' } }
subject(:validate) { described_class.new(user).validate(otp_code) }
@@ -27,11 +29,8 @@ RSpec.describe Gitlab::Auth::Otp::Strategies::FortiTokenCloud do
client_secret: client_secret
)
- access_token_request_body = { client_id: client_id,
- client_secret: client_secret }
-
stub_request(:post, access_token_create_url)
- .with(body: JSON(access_token_request_body), headers: { 'Content-Type' => 'application/json' })
+ .with(body: JSON(access_token_request_body), headers: headers)
.to_return(
status: access_token_create_response_status,
body: Gitlab::Json.generate(access_token_create_response_body),
@@ -81,6 +80,20 @@ RSpec.describe Gitlab::Auth::Otp::Strategies::FortiTokenCloud do
end
end
+ context 'SSL Verification' do
+ let(:access_token_create_response_status) { 400 }
+
+ context 'with `Gitlab::HTTP`' do
+ it 'does not use a `verify` argument,'\
+ 'thereby always performing SSL verification while making API calls' do
+ expect(Gitlab::HTTP).to receive(:post)
+ .with(access_token_create_url, body: JSON(access_token_request_body), headers: headers).and_call_original
+
+ validate
+ end
+ end
+ end
+
def stub_forti_token_cloud_config(forti_token_cloud_settings)
allow(::Gitlab.config.forti_token_cloud).to(receive_messages(forti_token_cloud_settings))
end
diff --git a/spec/policies/project_policy_spec.rb b/spec/policies/project_policy_spec.rb
index e6650549f7f..8bd4a463f87 100644
--- a/spec/policies/project_policy_spec.rb
+++ b/spec/policies/project_policy_spec.rb
@@ -992,6 +992,78 @@ RSpec.describe ProjectPolicy do
it { is_expected.to be_allowed(:read_analytics) }
end
+ context 'with various analytics features' do
+ let_it_be(:project_with_analytics_disabled) { create(:project, :analytics_disabled) }
+ let_it_be(:project_with_analytics_private) { create(:project, :analytics_private) }
+ let_it_be(:project_with_analytics_enabled) { create(:project, :analytics_enabled) }
+
+ before do
+ project_with_analytics_disabled.add_developer(developer)
+ project_with_analytics_private.add_developer(developer)
+ project_with_analytics_enabled.add_developer(developer)
+ end
+
+ context 'when analytics is enabled for the project' do
+ let(:project) { project_with_analytics_disabled }
+
+ context 'for guest user' do
+ let(:current_user) { guest }
+
+ it { is_expected.to be_disallowed(:read_cycle_analytics) }
+ it { is_expected.to be_disallowed(:read_insights) }
+ it { is_expected.to be_disallowed(:read_repository_graphs) }
+ end
+
+ context 'for developer' do
+ let(:current_user) { developer }
+
+ it { is_expected.to be_disallowed(:read_cycle_analytics) }
+ it { is_expected.to be_disallowed(:read_insights) }
+ it { is_expected.to be_disallowed(:read_repository_graphs) }
+ end
+ end
+
+ context 'when analytics is private for the project' do
+ let(:project) { project_with_analytics_private }
+
+ context 'for guest user' do
+ let(:current_user) { guest }
+
+ it { is_expected.to be_disallowed(:read_cycle_analytics) }
+ it { is_expected.to be_disallowed(:read_insights) }
+ it { is_expected.to be_disallowed(:read_repository_graphs) }
+ end
+
+ context 'for developer' do
+ let(:current_user) { developer }
+
+ it { is_expected.to be_allowed(:read_cycle_analytics) }
+ it { is_expected.to be_allowed(:read_insights) }
+ it { is_expected.to be_allowed(:read_repository_graphs) }
+ end
+ end
+
+ context 'when analytics is enabled for the project' do
+ let(:project) { project_with_analytics_private }
+
+ context 'for guest user' do
+ let(:current_user) { guest }
+
+ it { is_expected.to be_disallowed(:read_cycle_analytics) }
+ it { is_expected.to be_disallowed(:read_insights) }
+ it { is_expected.to be_disallowed(:read_repository_graphs) }
+ end
+
+ context 'for developer' do
+ let(:current_user) { developer }
+
+ it { is_expected.to be_allowed(:read_cycle_analytics) }
+ it { is_expected.to be_allowed(:read_insights) }
+ it { is_expected.to be_allowed(:read_repository_graphs) }
+ end
+ end
+ end
+
context 'project member' do
let(:project) { private_project }
diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb
index e3eb3649a1a..8a4a7880ab4 100644
--- a/spec/requests/api/projects_spec.rb
+++ b/spec/requests/api/projects_spec.rb
@@ -886,6 +886,7 @@ RSpec.describe API::Projects do
merge_method: 'ff'
}).tap do |attrs|
attrs[:operations_access_level] = 'disabled'
+ attrs[:analytics_access_level] = 'disabled'
end
post api('/projects', user), params: project