Class: QAT::Reporter::Xray::Publisher::Cloud

Inherits:
Base
  • Object
show all
Defined in:
lib/qat/reporter/xray/publisher/cloud.rb

Overview

QAT::Reporter::Xray::Publisher::Cloud integrator class

Instance Attribute Summary

Attributes inherited from Base

#base_url, #cloud_xray_api_credentials, #default_cloud_api_url, #default_headers, #login_credentials

Instance Method Summary collapse

Methods inherited from Base

#cloud_graphql_headers, #create_issue, #initialize

Constructor Details

This class inherits a constructor from QAT::Reporter::Xray::Publisher::Base

Instance Method Details

#auth_tokenObject

Get the Authorization Token based on client_id & client_secret (ONLY FOR CLOUD XRAY)



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/qat/reporter/xray/publisher/cloud.rb', line 49

def auth_token
	return @auth_token if @auth_token
	
	client_id         = cloud_xray_api_credentials[0]
	client_secret     = cloud_xray_api_credentials[1]
	auth_header_cloud = {
		client_id:     client_id,
		client_secret: client_secret
	}
	
	response    = Client.new(default_cloud_api_url).post('/api/v1/authenticate', auth_header_cloud).body
	bearer      = JSON.parse(response)
	@auth_token = {
		Authorization: "Bearer #{bearer}"
	}
end

#export_test_scenarios(keys, filter = nil) ⇒ Object

Export Xray test scenarios to a zip file via API

Parameters:

  • keys (String)

    test scenarios

  • filter (String) (defaults to: nil)

    project filter

Raises:

See Also:



98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/qat/reporter/xray/publisher/cloud.rb', line 98

def export_test_scenarios(keys, filter = nil)
	params          = {
		keys: keys,
	}
	params[:filter] = filter if filter.present?
	
	headers = auth_token.merge(params: params)
	
	puts "Exporting features from: #{default_cloud_api_url}/api/v1/export/cucumber"
	all_tests = RestClient.get("#{default_cloud_api_url}/api/v1/export/cucumber", headers)
	raise(NoTestsFoundError, "No Tests found for keys: #{keys}") if all_tests.code != 200
	all_test_keys = all_tests.body.to_s.scan(/(@TEST_\w+-\d+)/).flatten
	(0...all_test_keys.count).to_a.map do |index|
		{ test_issue_key: all_test_keys[index].gsub('@TEST_', '') }
	end
end

#get_jira_issue(issue_key) ⇒ Object



10
11
12
13
# File 'lib/qat/reporter/xray/publisher/cloud.rb', line 10

def get_jira_issue(issue_key)
	headers = { 'Content-Type': 'application/json' }.merge(auth_headers)
	Client.new(base_url).get("/rest/api/3/issue/#{issue_key}", headers)
end

#get_jira_linked_issue(linked_issue_id) ⇒ Object



20
21
22
23
# File 'lib/qat/reporter/xray/publisher/cloud.rb', line 20

def get_jira_linked_issue(linked_issue_id)
	headers = { 'Content-Type': 'application/json' }.merge(auth_headers)
	Client.new(base_url).get("/rest/api/3/issueLink/#{linked_issue_id}", headers)
end

#get_project(project_key) ⇒ Object



25
26
27
28
# File 'lib/qat/reporter/xray/publisher/cloud.rb', line 25

def get_project(project_key)
	headers = { 'Content-Type': 'application/json' }.merge(auth_headers)
	Client.new(base_url).get("/rest/api/3/project/#{project_key}", headers)
end

#get_transitions(issue_key) ⇒ Object

Get workflow transitions of an issue



31
32
33
34
# File 'lib/qat/reporter/xray/publisher/cloud.rb', line 31

def get_transitions(issue_key)
	headers = { 'Content-Type': 'application/json' }.merge(auth_headers)
	Client.new(base_url).get("/rest/api/2/issue/#{issue_key}/transitions", headers)
end

#import_cucumber_behave_tests(info, results) ⇒ Object



66
67
68
69
70
71
72
73
74
# File 'lib/qat/reporter/xray/publisher/cloud.rb', line 66

def import_cucumber_behave_tests(info, results)
	headers = { 'Content-Type': 'multipart/form-data' }.merge(auth_token)
	payload = {
		info:    File.new(info, 'rb'),
		results: File.new(results, 'rb')
	}
	
	Client.new(default_cloud_api_url).post('/api/v2/import/execution/behave/multipart', payload, headers)
end

#import_cucumber_tests(project_key, file_path, project_id = nil) ⇒ Object

Import Cucumber features files as a zip file via API

Parameters:

  • project_key (String)

    JIRA’s project key

  • file_path (String)

    Cucumber features files’ zip file

See Also:



80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/qat/reporter/xray/publisher/cloud.rb', line 80

def import_cucumber_tests(project_key, file_path, project_id = nil)
	headers = auth_token.merge({
															 multipart: true,
															 params:    {
																 projectKey: project_key,
																 projectId:  project_id,
																 source:     project_key
															 }
														 })
	payload = { file: File.new(file_path, 'rb') }
	
	Client.new(default_cloud_api_url).post('/api/v1/import/feature', payload, headers)
end

#send_execution_results(results) ⇒ Object

Posts the execution json results in Xray



43
44
45
46
# File 'lib/qat/reporter/xray/publisher/cloud.rb', line 43

def send_execution_results(results)
	headers = { 'Content-Type': 'application/json' }.merge(auth_token)
	Client.new(default_cloud_api_url).post('/api/v1/import/execution', results.to_json, headers)
end

#transitions_issue(issue_key, payload) ⇒ Object

Change transition issue



37
38
39
40
# File 'lib/qat/reporter/xray/publisher/cloud.rb', line 37

def transitions_issue(issue_key, payload)
	headers = { 'Content-Type': 'application/json' }.merge(auth_headers)
	Client.new(base_url).post("/rest/api/2/issue/#{issue_key}/transitions", payload.to_json, headers)
end

#update_jira_issue(issue_key, payload) ⇒ Object



15
16
17
18
# File 'lib/qat/reporter/xray/publisher/cloud.rb', line 15

def update_jira_issue(issue_key, payload)
	headers = { 'Content-Type': 'application/json' }.merge(auth_headers)
	Client.new(base_url).put("/rest/api/2/issue/#{issue_key}", payload.to_json, headers)
end