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:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-04-01 15:08:00 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-04-01 15:08:00 +0300
commit1a0d6dbdc2ac3047f4953a359ef27ba6e26074ae (patch)
treeddb78a8a0d1350dc767f049a21e0f7d37edaa82c /spec/requests/api/terraform
parentb11f7057d067885619ee3e513751f180b2e8ad85 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/requests/api/terraform')
-rw-r--r--spec/requests/api/terraform/state_spec.rb97
1 files changed, 97 insertions, 0 deletions
diff --git a/spec/requests/api/terraform/state_spec.rb b/spec/requests/api/terraform/state_spec.rb
new file mode 100644
index 00000000000..b0a963db684
--- /dev/null
+++ b/spec/requests/api/terraform/state_spec.rb
@@ -0,0 +1,97 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe API::Terraform::State do
+ def auth_header_for(user)
+ auth_header = ActionController::HttpAuthentication::Basic.encode_credentials(
+ user.username,
+ create(:personal_access_token, user: user).token
+ )
+ { 'HTTP_AUTHORIZATION' => auth_header }
+ end
+
+ let!(:project) { create(:project) }
+ let(:developer) { create(:user) }
+ let(:maintainer) { create(:user) }
+ let(:state_name) { 'state' }
+
+ before do
+ project.add_maintainer(maintainer)
+ end
+
+ describe 'GET /projects/:id/terraform/state/:name' do
+ it 'returns 401 if user is not authenticated' do
+ headers = { 'HTTP_AUTHORIZATION' => 'failing_token' }
+ get api("/projects/#{project.id}/terraform/state/#{state_name}"), headers: headers
+
+ expect(response).to have_gitlab_http_status(:unauthorized)
+ end
+
+ it 'returns terraform state belonging to a project of given state name' do
+ get api("/projects/#{project.id}/terraform/state/#{state_name}"), headers: auth_header_for(maintainer)
+
+ expect(response).to have_gitlab_http_status(:not_implemented)
+ expect(response.body).to eq('not implemented')
+ end
+
+ it 'returns not found if the project does not exists' do
+ get api("/projects/0000/terraform/state/#{state_name}"), headers: auth_header_for(maintainer)
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ end
+
+ it 'returns forbidden if the user cannot access the state' do
+ project.add_developer(developer)
+ get api("/projects/#{project.id}/terraform/state/#{state_name}"), headers: auth_header_for(developer)
+
+ expect(response).to have_gitlab_http_status(:forbidden)
+ end
+ end
+
+ describe 'POST /projects/:id/terraform/state/:name' do
+ context 'when terraform state with a given name is already present' do
+ it 'updates the state' do
+ post api("/projects/#{project.id}/terraform/state/#{state_name}"),
+ params: '{ "instance": "example-instance" }',
+ headers: { 'Content-Type' => 'text/plain' }.merge(auth_header_for(maintainer))
+
+ expect(response).to have_gitlab_http_status(:not_implemented)
+ expect(response.body).to eq('not implemented')
+ end
+
+ it 'returns forbidden if the user cannot access the state' do
+ project.add_developer(developer)
+ get api("/projects/#{project.id}/terraform/state/#{state_name}"), headers: auth_header_for(developer)
+
+ expect(response).to have_gitlab_http_status(:forbidden)
+ end
+ end
+
+ context 'when there is no terraform state of a given name' do
+ it 'creates a new state' do
+ post api("/projects/#{project.id}/terraform/state/example2"),
+ headers: auth_header_for(maintainer),
+ params: '{ "database": "example-database" }'
+
+ expect(response).to have_gitlab_http_status(:not_implemented)
+ expect(response.body).to eq('not implemented')
+ end
+ end
+ end
+
+ describe 'DELETE /projects/:id/terraform/state/:name' do
+ it 'deletes the state' do
+ delete api("/projects/#{project.id}/terraform/state/#{state_name}"), headers: auth_header_for(maintainer)
+
+ expect(response).to have_gitlab_http_status(:not_implemented)
+ end
+
+ it 'returns forbidden if the user cannot access the state' do
+ project.add_developer(developer)
+ get api("/projects/#{project.id}/terraform/state/#{state_name}"), headers: auth_header_for(developer)
+
+ expect(response).to have_gitlab_http_status(:forbidden)
+ end
+ end
+end