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/requests/jira_connect/installations_controller_spec.rb')
-rw-r--r--spec/requests/jira_connect/installations_controller_spec.rb83
1 files changed, 63 insertions, 20 deletions
diff --git a/spec/requests/jira_connect/installations_controller_spec.rb b/spec/requests/jira_connect/installations_controller_spec.rb
index 6315c66a41a..67544bbca2e 100644
--- a/spec/requests/jira_connect/installations_controller_spec.rb
+++ b/spec/requests/jira_connect/installations_controller_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe JiraConnect::InstallationsController do
+RSpec.describe JiraConnect::InstallationsController, feature_category: :integrations do
let_it_be(:installation) { create(:jira_connect_installation) }
describe 'GET /-/jira_connect/installations' do
@@ -47,16 +47,18 @@ RSpec.describe JiraConnect::InstallationsController do
end
describe 'PUT /-/jira_connect/installations' do
- before do
+ subject(:do_request) do
put '/-/jira_connect/installations', params: { jwt: jwt, installation: { instance_url: update_instance_url } }
end
- let(:update_instance_url) { 'https://example.com' }
+ let(:update_instance_url) { nil }
context 'without JWT' do
let(:jwt) { nil }
it 'returns 403' do
+ do_request
+
expect(response).to have_gitlab_http_status(:forbidden)
end
end
@@ -66,28 +68,69 @@ RSpec.describe JiraConnect::InstallationsController do
let(:jwt) { Atlassian::Jwt.encode({ iss: installation.client_key, qsh: qsh }, installation.shared_secret) }
it 'returns 200' do
+ do_request
+
expect(response).to have_gitlab_http_status(:ok)
end
- it 'updates the instance_url' do
- expect(json_response).to eq({
- 'gitlab_com' => false,
- 'instance_url' => 'https://example.com'
- })
- end
+ context 'with instance_url param' do
+ let(:update_instance_url) { 'https://example.com' }
- context 'invalid URL' do
- let(:update_instance_url) { 'invalid url' }
+ context 'instance response with success' do
+ before do
+ stub_request(:post, 'https://example.com/-/jira_connect/events/installed')
+ end
- it 'returns 422 and errors', :aggregate_failures do
- expect(response).to have_gitlab_http_status(:unprocessable_entity)
- expect(json_response).to eq({
- 'errors' => {
- 'instance_url' => [
- 'is blocked: Only allowed schemes are http, https'
- ]
- }
- })
+ it 'updates the instance_url' do
+ do_request
+
+ expect(json_response).to eq({
+ 'gitlab_com' => false,
+ 'instance_url' => 'https://example.com'
+ })
+ end
+
+ it 'sends an installed event to the self-managed instance' do
+ do_request
+
+ expect(WebMock).to have_requested(:post, 'https://example.com/-/jira_connect/events/installed')
+ end
+ end
+
+ context 'instance response with error' do
+ before do
+ stub_request(:post, 'https://example.com/-/jira_connect/events/installed').to_return(status: 422)
+ end
+
+ it 'returns 422 and errors', :aggregate_failures do
+ do_request
+
+ expect(response).to have_gitlab_http_status(:unprocessable_entity)
+ expect(json_response).to eq({
+ 'errors' => {
+ 'instance_url' => [
+ 'Could not be installed on the instance. Error response code 422'
+ ]
+ }
+ })
+ end
+ end
+
+ context 'invalid URL' do
+ let(:update_instance_url) { 'invalid url' }
+
+ it 'returns 422 and errors', :aggregate_failures do
+ do_request
+
+ expect(response).to have_gitlab_http_status(:unprocessable_entity)
+ expect(json_response).to eq({
+ 'errors' => {
+ 'instance_url' => [
+ 'is blocked: Only allowed schemes are http, https'
+ ]
+ }
+ })
+ end
end
end
end