Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 24 additions & 12 deletions did/plugins/gitlab.py
Original file line number Diff line number Diff line change
Expand Up @@ -334,9 +334,11 @@ def __init__(self, data: dict, parent: "GitLabStats", set_id=None):
self._body: Optional[str] = None

def iid(self):
target_id = self.data.get('target_id')
if target_id is None:
return "unknown"
issue = self.gitlabapi.get_project_issue(
self.data['project_id'], self.data['target_id'])

self.data['project_id'], target_id)
if issue is not None:
return issue['iid']
return "unknown"
Expand All @@ -345,9 +347,13 @@ def iid(self):
def body(self) -> str:
"""Get full issue description (lazy-loaded)"""
if self._body is None:
issue_data = self.gitlabapi.get_project_issue(
self.data['project_id'], self.data['target_id'])
self._body = issue_data.get('description', '') if issue_data else ''
target_id = self.data.get('target_id')
if target_id is None:
self._body = ''
else:
issue_data = self.gitlabapi.get_project_issue(
self.data['project_id'], target_id)
self._body = issue_data.get('description', '') if issue_data else ''
return self._body

def __str__(self):
Expand Down Expand Up @@ -397,19 +403,25 @@ class MergeRequest(Issue):

def __init__(self, data, parent, set_id=None):
if set_id is None:
merge_request = parent.gitlab.get_project_mr(
data['project_id'], data['target_id'])
if merge_request is not None:
set_id = merge_request['iid']
target_id = data.get('target_id')
if target_id is not None:
merge_request = parent.gitlab.get_project_mr(
data['project_id'], target_id)
if merge_request is not None:
set_id = merge_request['iid']
super().__init__(data, parent, set_id)

@property
def body(self) -> str:
"""Get full MR description (lazy-loaded)"""
if self._body is None:
mr_data = self.gitlabapi.get_project_mr(
self.data['project_id'], self.data['target_id'])
self._body = mr_data.get('description', '') if mr_data else ''
target_id = self.data.get('target_id')
if target_id is None:
self._body = ''
else:
mr_data = self.gitlabapi.get_project_mr(
self.data['project_id'], target_id)
self._body = mr_data.get('description', '') if mr_data else ''
return self._body


Expand Down
57 changes: 57 additions & 0 deletions tests/unit/plugins/test_gitlab.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@

import logging
import os
from unittest.mock import MagicMock

import pytest
from _pytest.logging import LogCaptureFixture

import did.base
import did.cli
from did.plugins.gitlab import Issue, MergedRequest, MergeRequest

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Constants
Expand Down Expand Up @@ -209,3 +211,58 @@ def test_gitlab_config_disabled_ssl_verify():
ssl_verify = False
""")
did.cli.main(INTERVAL)


def _make_parent(full_message=True):
""" Build a minimal mock GitLabStats parent """
parent = MagicMock()
parent.gitlab.url = "https://gitlab.com"
parent.gitlab.get_project.return_value = {
"path_with_namespace": "user/project"}
parent.options.full_message = full_message
parent.options.format = "text"
return parent


def test_issue_str_missing_target_id():
""" Issue.__str__ with full_message should not raise when
target_id is absent """
parent = _make_parent()
data = {
"project_id": 1,
"target_title": "Some issue",
"target_type": "Issue",
}
issue = Issue(data, parent)
result = str(issue)
assert "Some issue" in result


def test_merge_request_str_missing_target_id():
""" MergeRequest.__str__ with full_message should not raise when
target_id is absent """
parent = _make_parent()
data = {
"project_id": 1,
"target_title": "Some MR",
"target_type": "MergeRequest",
}
mr = MergeRequest(data, parent, set_id=42)
result = str(mr)
assert "Some MR" in result


def test_merged_request_str_full_message():
""" MergedRequest.__str__ with full_message should not raise when
target_id is absent from raw MR data """
parent = _make_parent()
data = {
"id": 99,
"iid": 4,
"project_id": 1,
"title": "Update README.md",
"description": "Fixes the readme",
}
mr = MergedRequest(data, parent)
result = str(mr)
assert "Update README.md" in result
Loading