Class: GitlabQuality::TestTooling::GitlabClient::IssuesClient

Inherits:
GitlabClient
  • Object
show all
Defined in:
lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb

Overview

The GitLab client is used for API access: https://github.com/NARKOZ/gitlab

Direct Known Subclasses

IssuesDryClient

Constant Summary collapse

REPORTER_ACCESS_LEVEL =
20

Constants inherited from GitlabClient

GitlabClient::MAX_RETRY_ATTEMPTS, GitlabClient::RETRY_BACK_OFF_DELAY

Instance Method Summary collapse

Methods inherited from GitlabClient

#handle_gitlab_client_exceptions, #ignore_gitlab_client_exceptions, #initialize

Constructor Details

This class inherits a constructor from GitlabQuality::TestTooling::GitlabClient::GitlabClient

Instance Method Details

#add_note_to_issue_discussion_as_thread(iid:, discussion_id:, body:) ⇒ Object



96
97
98
99
100
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 96

def add_note_to_issue_discussion_as_thread(iid:, discussion_id:, body:)
  handle_gitlab_client_exceptions do
    client.add_note_to_issue_discussion_as_thread(project, iid, discussion_id, body: body)
  end
end

#assert_user_permission!Object



29
30
31
32
33
34
35
36
37
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 29

def assert_user_permission!
  handle_gitlab_client_exceptions do
    member = client.team_member(project, user.id)

    abort_not_permitted(member.access_level) if member.access_level < REPORTER_ACCESS_LEVEL
  end
rescue Gitlab::Error::NotFound
  abort_member_not_found(user)
end

#create_issue(title:, description:, labels:, issue_type: 'issue', assignee_id: nil, due_date: nil, confidential: false) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 57

def create_issue(title:, description:, labels:, issue_type: 'issue', assignee_id: nil, due_date: nil, confidential: false)
  attrs = {
    issue_type: issue_type,
    description: description,
    labels: labels,
    assignee_id: assignee_id,
    due_date: due_date,
    confidential: confidential
  }.compact

  handle_gitlab_client_exceptions do
    client.create_issue(project, title, attrs)
  end
end

#create_issue_note(iid:, note:) ⇒ Object



84
85
86
87
88
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 84

def create_issue_note(iid:, note:)
  handle_gitlab_client_exceptions do
    client.create_issue_note(project, iid, note)
  end
end

#edit_issue(iid:, options: {}) ⇒ Object



72
73
74
75
76
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 72

def edit_issue(iid:, options: {})
  handle_gitlab_client_exceptions do
    client.edit_issue(project, iid, options)
  end
end

#edit_issue_note(issue_iid:, note_id:, note:) ⇒ Object



90
91
92
93
94
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 90

def edit_issue_note(issue_iid:, note_id:, note:)
  handle_gitlab_client_exceptions do
    client.edit_issue_note(project, issue_iid, note_id, note)
  end
end

#find_issue_discussions(iid:) ⇒ Object



51
52
53
54
55
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 51

def find_issue_discussions(iid:)
  handle_gitlab_client_exceptions do
    client.issue_discussions(project, iid, order_by: 'created_at', sort: 'asc').auto_paginate
  end
end

#find_issue_notes(iid:) ⇒ Object



78
79
80
81
82
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 78

def find_issue_notes(iid:)
  handle_gitlab_client_exceptions do
    client.issue_notes(project, iid, order_by: 'created_at', sort: 'asc')&.auto_paginate
  end
end

#find_issues(iid: nil, options: {}, &select) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 39

def find_issues(iid: nil, options: {}, &select)
  select ||= :itself

  handle_gitlab_client_exceptions do
    break [client.issue(project, iid)].select(&select) if iid

    client.issues(project, options)
          .auto_paginate
          .select(&select)
  end
end

#find_user_id(username:) ⇒ Object



102
103
104
105
106
107
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 102

def find_user_id(username:)
  handle_gitlab_client_exceptions do
    user = client.users(username: username)&.first
    user['id'] unless user.nil?
  end
end

#upload_file(file_fullpath:) ⇒ Object



109
110
111
112
113
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 109

def upload_file(file_fullpath:)
  ignore_gitlab_client_exceptions do
    client.upload_file(project, file_fullpath)
  end
end