Class: AirTest::JiraTicketParser

Inherits:
Object
  • Object
show all
Includes:
TicketParser
Defined in:
lib/air_test/jira_ticket_parser.rb

Instance Method Summary collapse

Constructor Details

#initialize(config = AirTest.configuration) ⇒ JiraTicketParser

Returns a new instance of JiraTicketParser.



11
12
13
14
15
16
# File 'lib/air_test/jira_ticket_parser.rb', line 11

def initialize(config = AirTest.configuration)
  @domain = config.jira[:domain]
  @api_key = config.jira[:token]
  @project_key = config.jira[:project_id]
  @email = config.jira[:email]
end

Instance Method Details

#extract_ticket_id(ticket) ⇒ Object



78
79
80
# File 'lib/air_test/jira_ticket_parser.rb', line 78

def extract_ticket_id(ticket)
  ticket["key"] || "No ID"
end

#extract_ticket_title(ticket) ⇒ Object



74
75
76
# File 'lib/air_test/jira_ticket_parser.rb', line 74

def extract_ticket_title(ticket)
  ticket.dig("fields", "summary") || "No title"
end

#extract_ticket_url(ticket) ⇒ Object



82
83
84
# File 'lib/air_test/jira_ticket_parser.rb', line 82

def extract_ticket_url(ticket)
  "#{@domain}/browse/#{ticket["key"]}"
end

#fetch_tickets(limit: 5) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/air_test/jira_ticket_parser.rb', line 18

def fetch_tickets(limit: 5)
  # Try different status names (English and French)
  statuses = ["To Do", "À faire", "Open", "New"]
  all_issues = []

  statuses.each do |status|
    jql = "project = #{@project_key} AND status = '#{status}' ORDER BY created DESC"
    uri = URI("#{@domain}/rest/api/3/search?jql=#{URI.encode_www_form_component(jql)}&maxResults=#{limit}")
    request = Net::HTTP::Get.new(uri)
    request.basic_auth(@email, @api_key)
    request["Accept"] = "application/json"
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    response = http.request(request)

    next unless response.code == "200"

    data = JSON.parse(response.body)
    issues = data["issues"] || []
    all_issues.concat(issues)
    puts "Found #{issues.length} issues with status '#{status}'" if issues.any?
  end

  all_issues.first(limit)
end

#parse_ticket_content(issue_id) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/air_test/jira_ticket_parser.rb', line 44

def parse_ticket_content(issue_id)
  # Fetch issue details (description, etc.)
  uri = URI("#{@domain}/rest/api/3/issue/#{issue_id}")
  request = Net::HTTP::Get.new(uri)
  request.basic_auth(@email, @api_key)
  request["Accept"] = "application/json"
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  response = http.request(request)
  return nil unless response.code == "200"

  issue = JSON.parse(response.body)
  # Example: parse description as feature, steps, etc. (customize as needed)
  {
    feature: issue.dig("fields", "summary") || "",
    scenarios: [
      {
        title: "Scenario",
        steps: [issue.dig("fields", "description", "content")&.map do |c|
          c["content"]&.map do |t|
            t["text"]
          end&.join(" ")
        end&.join(" ") || ""]
      }
    ],
    meta: { tags: [], priority: "", estimate: nil,
            assignee: issue.dig("fields", "assignee", "displayName") || "" }
  }
end