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: 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, #post_exception_to_slack

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:, note:) ⇒ Object



144
145
146
147
148
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 144

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

#assert_user_permission!Object



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

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



87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 87

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_discussion(iid:, note:) ⇒ Object



138
139
140
141
142
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 138

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


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

def create_issue_link(project:, issue_iid:, target_project_id:, target_issue_iid:, link_type: 'is_blocked_by')
  handle_gitlab_client_exceptions do
    client.create_issue_link(project, issue_iid, target_project_id, target_issue_iid, link_type)
  end
end

#create_issue_note(iid:, note:) ⇒ Object



120
121
122
123
124
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 120

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



114
115
116
117
118
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 114

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



126
127
128
129
130
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 126

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_commit(project, sha) ⇒ Object



169
170
171
172
173
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 169

def find_commit(project, sha)
  handle_gitlab_client_exceptions do
    client.commit(project, sha)
  end
end

#find_commit_diff(project, sha) ⇒ Object



184
185
186
187
188
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 184

def find_commit_diff(project, sha)
  handle_gitlab_client_exceptions do
    client.commit_diff(project, sha)
  end
end

#find_commit_parent(project, sha) ⇒ Object



175
176
177
178
179
180
181
182
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 175

def find_commit_parent(project, sha)
  handle_gitlab_client_exceptions do
    # In a merged results commit, the first parent is the one from
    # the default branch, and the second parent is from the branch
    # itself (more likely to have caused the issue)
    client.commit(project, sha).parent_ids.last
  end
end

#find_deployments(project, environment:, status:, order_by: 'id', sort: 'desc') ⇒ Object



190
191
192
193
194
195
196
197
198
199
200
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 190

def find_deployments(project, environment:, status:, order_by: 'id', sort: 'desc')
  handle_gitlab_client_exceptions do
    client.deployments(
      project,
      environment: environment,
      status: status,
      order_by: order_by,
      sort: sort
    )
  end
end

#find_issue_discussions(iid:) ⇒ Object



81
82
83
84
85
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 81

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



69
70
71
72
73
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 69

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

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



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

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_pipeline(project, pipeline_id) ⇒ Object



163
164
165
166
167
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 163

def find_pipeline(project, pipeline_id)
  handle_gitlab_client_exceptions do
    client.pipeline(project, pipeline_id)
  end
end

#find_user_id(username:) ⇒ Object



150
151
152
153
154
155
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 150

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

#get_note_award_emojis(issue_iid:, note_id:) ⇒ Object



132
133
134
135
136
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 132

def get_note_award_emojis(issue_iid:, note_id:)
  handle_gitlab_client_exceptions do
    client.issue_note_award_emoji(project, issue_iid, note_id)
  end
end


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

def issue_links(project:, issue_iid:, options: {})
  handle_gitlab_client_exceptions do
    client.issue_links(project, issue_iid, options)
  end
end


75
76
77
78
79
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 75

def related_merge_requests(iid:)
  handle_gitlab_client_exceptions do
    client.related_merge_requests(project, iid).auto_paginate
  end
end

#upload_file(file_fullpath:) ⇒ Object



157
158
159
160
161
# File 'lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb', line 157

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