2019-12-04 20:38:33 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2020-03-13 15:44:24 +05:30
|
|
|
RSpec.shared_examples 'pipelines visibility table' do
|
2019-12-04 20:38:33 +05:30
|
|
|
using RSpec::Parameterized::TableSyntax
|
|
|
|
|
|
|
|
let(:ci_user) { create(:user) }
|
|
|
|
let(:api_user) { user_role && ci_user }
|
|
|
|
|
|
|
|
let(:pipelines_api_path) do
|
|
|
|
"/projects/#{project.id}/pipelines"
|
|
|
|
end
|
|
|
|
|
|
|
|
let(:response_200) do
|
|
|
|
a_collection_containing_exactly(
|
|
|
|
a_hash_including('sha', 'ref', 'status', 'web_url', 'id' => pipeline.id)
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
let(:response_40x) do
|
|
|
|
a_hash_including('message')
|
|
|
|
end
|
|
|
|
|
|
|
|
let(:expected_response) do
|
|
|
|
if response_status == 200
|
|
|
|
response_200
|
|
|
|
else
|
|
|
|
response_40x
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
let(:api_response) { json_response }
|
|
|
|
|
|
|
|
let(:visibility_levels) do
|
|
|
|
{
|
|
|
|
private: Gitlab::VisibilityLevel::PRIVATE,
|
|
|
|
internal: Gitlab::VisibilityLevel::INTERNAL,
|
|
|
|
public: Gitlab::VisibilityLevel::PUBLIC
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
let(:builds_access_levels) do
|
|
|
|
{
|
|
|
|
enabled: ProjectFeature::ENABLED,
|
|
|
|
private: ProjectFeature::PRIVATE
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
let(:project_attributes) do
|
|
|
|
{
|
|
|
|
visibility_level: visibility_levels[visibility_level],
|
|
|
|
public_builds: public_builds
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
let(:project_feature_attributes) do
|
|
|
|
{
|
|
|
|
builds_access_level: builds_access_levels[builds_access_level]
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
where(:visibility_level, :builds_access_level, :public_builds, :is_admin, :user_role, :response_status) do
|
|
|
|
:private | :enabled | true | true | :non_member | 200
|
|
|
|
:private | :enabled | true | true | :guest | 200
|
|
|
|
:private | :enabled | true | true | :reporter | 200
|
|
|
|
:private | :enabled | true | true | :developer | 200
|
|
|
|
:private | :enabled | true | true | :maintainer | 200
|
|
|
|
|
|
|
|
:private | :enabled | true | false | nil | 404
|
|
|
|
:private | :enabled | true | false | :non_member | 404
|
|
|
|
:private | :enabled | true | false | :guest | 200
|
|
|
|
:private | :enabled | true | false | :reporter | 200
|
|
|
|
:private | :enabled | true | false | :developer | 200
|
|
|
|
:private | :enabled | true | false | :maintainer | 200
|
|
|
|
|
|
|
|
:private | :enabled | false | true | :non_member | 200
|
|
|
|
:private | :enabled | false | true | :guest | 200
|
|
|
|
:private | :enabled | false | true | :reporter | 200
|
|
|
|
:private | :enabled | false | true | :developer | 200
|
|
|
|
:private | :enabled | false | true | :maintainer | 200
|
|
|
|
|
|
|
|
:private | :enabled | false | false | nil | 404
|
|
|
|
:private | :enabled | false | false | :non_member | 404
|
|
|
|
:private | :enabled | false | false | :guest | 403
|
|
|
|
:private | :enabled | false | false | :reporter | 200
|
|
|
|
:private | :enabled | false | false | :developer | 200
|
|
|
|
:private | :enabled | false | false | :maintainer | 200
|
|
|
|
|
|
|
|
:private | :private | true | true | :non_member | 200
|
|
|
|
:private | :private | true | true | :guest | 200
|
|
|
|
:private | :private | true | true | :reporter | 200
|
|
|
|
:private | :private | true | true | :developer | 200
|
|
|
|
:private | :private | true | true | :maintainer | 200
|
|
|
|
|
|
|
|
:private | :private | true | false | nil | 404
|
|
|
|
:private | :private | true | false | :non_member | 404
|
|
|
|
:private | :private | true | false | :guest | 200
|
|
|
|
:private | :private | true | false | :reporter | 200
|
|
|
|
:private | :private | true | false | :developer | 200
|
|
|
|
:private | :private | true | false | :maintainer | 200
|
|
|
|
|
|
|
|
:private | :private | false | true | :non_member | 200
|
|
|
|
:private | :private | false | true | :guest | 200
|
|
|
|
:private | :private | false | true | :reporter | 200
|
|
|
|
:private | :private | false | true | :developer | 200
|
|
|
|
:private | :private | false | true | :maintainer | 200
|
|
|
|
|
|
|
|
:private | :private | false | false | nil | 404
|
|
|
|
:private | :private | false | false | :non_member | 404
|
|
|
|
:private | :private | false | false | :guest | 403
|
|
|
|
:private | :private | false | false | :reporter | 200
|
|
|
|
:private | :private | false | false | :developer | 200
|
|
|
|
:private | :private | false | false | :maintainer | 200
|
|
|
|
|
|
|
|
:internal | :enabled | true | true | :non_member | 200
|
|
|
|
:internal | :enabled | true | true | :guest | 200
|
|
|
|
:internal | :enabled | true | true | :reporter | 200
|
|
|
|
:internal | :enabled | true | true | :developer | 200
|
|
|
|
:internal | :enabled | true | true | :maintainer | 200
|
|
|
|
|
|
|
|
:internal | :enabled | true | false | nil | 404
|
|
|
|
:internal | :enabled | true | false | :non_member | 200
|
|
|
|
:internal | :enabled | true | false | :guest | 200
|
|
|
|
:internal | :enabled | true | false | :reporter | 200
|
|
|
|
:internal | :enabled | true | false | :developer | 200
|
|
|
|
:internal | :enabled | true | false | :maintainer | 200
|
|
|
|
|
|
|
|
:internal | :enabled | false | true | :non_member | 200
|
|
|
|
:internal | :enabled | false | true | :guest | 200
|
|
|
|
:internal | :enabled | false | true | :reporter | 200
|
|
|
|
:internal | :enabled | false | true | :developer | 200
|
|
|
|
:internal | :enabled | false | true | :maintainer | 200
|
|
|
|
|
|
|
|
:internal | :enabled | false | false | nil | 404
|
|
|
|
:internal | :enabled | false | false | :non_member | 403
|
|
|
|
:internal | :enabled | false | false | :guest | 403
|
|
|
|
:internal | :enabled | false | false | :reporter | 200
|
|
|
|
:internal | :enabled | false | false | :developer | 200
|
|
|
|
:internal | :enabled | false | false | :maintainer | 200
|
|
|
|
|
|
|
|
:internal | :private | true | true | :non_member | 200
|
|
|
|
:internal | :private | true | true | :guest | 200
|
|
|
|
:internal | :private | true | true | :reporter | 200
|
|
|
|
:internal | :private | true | true | :developer | 200
|
|
|
|
:internal | :private | true | true | :maintainer | 200
|
|
|
|
|
|
|
|
:internal | :private | true | false | nil | 404
|
|
|
|
:internal | :private | true | false | :non_member | 403
|
|
|
|
:internal | :private | true | false | :guest | 200
|
|
|
|
:internal | :private | true | false | :reporter | 200
|
|
|
|
:internal | :private | true | false | :developer | 200
|
|
|
|
:internal | :private | true | false | :maintainer | 200
|
|
|
|
|
|
|
|
:internal | :private | false | true | :non_member | 200
|
|
|
|
:internal | :private | false | true | :guest | 200
|
|
|
|
:internal | :private | false | true | :reporter | 200
|
|
|
|
:internal | :private | false | true | :developer | 200
|
|
|
|
:internal | :private | false | true | :maintainer | 200
|
|
|
|
|
|
|
|
:internal | :private | false | false | nil | 404
|
|
|
|
:internal | :private | false | false | :non_member | 403
|
|
|
|
:internal | :private | false | false | :guest | 403
|
|
|
|
:internal | :private | false | false | :reporter | 200
|
|
|
|
:internal | :private | false | false | :developer | 200
|
|
|
|
:internal | :private | false | false | :maintainer | 200
|
|
|
|
|
|
|
|
:public | :enabled | true | true | :non_member | 200
|
|
|
|
:public | :enabled | true | true | :guest | 200
|
|
|
|
:public | :enabled | true | true | :reporter | 200
|
|
|
|
:public | :enabled | true | true | :developer | 200
|
|
|
|
:public | :enabled | true | true | :maintainer | 200
|
|
|
|
|
|
|
|
:public | :enabled | true | false | nil | 200
|
|
|
|
:public | :enabled | true | false | :non_member | 200
|
|
|
|
:public | :enabled | true | false | :guest | 200
|
|
|
|
:public | :enabled | true | false | :reporter | 200
|
|
|
|
:public | :enabled | true | false | :developer | 200
|
|
|
|
:public | :enabled | true | false | :maintainer | 200
|
|
|
|
|
|
|
|
:public | :enabled | false | true | :non_member | 200
|
|
|
|
:public | :enabled | false | true | :guest | 200
|
|
|
|
:public | :enabled | false | true | :reporter | 200
|
|
|
|
:public | :enabled | false | true | :developer | 200
|
|
|
|
:public | :enabled | false | true | :maintainer | 200
|
|
|
|
|
|
|
|
:public | :enabled | false | false | nil | 403
|
|
|
|
:public | :enabled | false | false | :non_member | 403
|
|
|
|
:public | :enabled | false | false | :guest | 403
|
|
|
|
:public | :enabled | false | false | :reporter | 200
|
|
|
|
:public | :enabled | false | false | :developer | 200
|
|
|
|
:public | :enabled | false | false | :maintainer | 200
|
|
|
|
|
|
|
|
:public | :private | true | true | :non_member | 200
|
|
|
|
:public | :private | true | true | :guest | 200
|
|
|
|
:public | :private | true | true | :reporter | 200
|
|
|
|
:public | :private | true | true | :developer | 200
|
|
|
|
:public | :private | true | true | :maintainer | 200
|
|
|
|
|
|
|
|
:public | :private | true | false | nil | 403
|
|
|
|
:public | :private | true | false | :non_member | 403
|
|
|
|
:public | :private | true | false | :guest | 200
|
|
|
|
:public | :private | true | false | :reporter | 200
|
|
|
|
:public | :private | true | false | :developer | 200
|
|
|
|
:public | :private | true | false | :maintainer | 200
|
|
|
|
|
|
|
|
:public | :private | false | true | :non_member | 200
|
|
|
|
:public | :private | false | true | :guest | 200
|
|
|
|
:public | :private | false | true | :reporter | 200
|
|
|
|
:public | :private | false | true | :developer | 200
|
|
|
|
:public | :private | false | true | :maintainer | 200
|
|
|
|
|
|
|
|
:public | :private | false | false | nil | 403
|
|
|
|
:public | :private | false | false | :non_member | 403
|
|
|
|
:public | :private | false | false | :guest | 403
|
|
|
|
:public | :private | false | false | :reporter | 200
|
|
|
|
:public | :private | false | false | :developer | 200
|
|
|
|
:public | :private | false | false | :maintainer | 200
|
|
|
|
end
|
|
|
|
|
|
|
|
with_them do
|
|
|
|
before do
|
|
|
|
ci_user.update!(admin: is_admin) if user_role
|
|
|
|
|
|
|
|
project.update!(project_attributes)
|
|
|
|
project.project_feature.update!(project_feature_attributes)
|
|
|
|
project.add_role(ci_user, user_role) if user_role && user_role != :non_member
|
|
|
|
|
|
|
|
get api(pipelines_api_path, api_user)
|
|
|
|
end
|
|
|
|
|
|
|
|
it do
|
|
|
|
expect(response).to have_gitlab_http_status(response_status)
|
|
|
|
expect(api_response).to match(expected_response)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|