Skip to content

Commit 9646366

Browse files
committed
Merge remote-tracking branch 'upstream/main' into context-model
2 parents a0ed311 + 43be039 commit 9646366

34 files changed

+3973
-734
lines changed

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@
44
# https://help.github.com/en/articles/about-code-owners
55

66
* @arkid15r
7+
/cspell/ @arkid15r @kasya
78
/frontend/ @arkid15r @kasya

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ repos:
1010
exclude: (.github|pnpm-lock.yaml)
1111

1212
- repo: https://github.com/astral-sh/ruff-pre-commit
13-
rev: v0.12.8
13+
rev: v0.12.9
1414
hooks:
1515
- id: ruff
1616
args:

backend/poetry.lock

Lines changed: 36 additions & 40 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/tests/apps/github/api/internal/nodes/issue_test.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
"""Test cases for IssueNode."""
22

3+
from unittest.mock import Mock
4+
35
from apps.github.api.internal.nodes.issue import IssueNode
46

57

@@ -22,3 +24,60 @@ def test_issue_node_fields(self):
2224
"repository_name",
2325
}
2426
assert field_names == expected_field_names
27+
28+
def test_author_field(self):
29+
"""Test author field resolution."""
30+
mock_issue = Mock()
31+
mock_author = Mock()
32+
mock_issue.author = mock_author
33+
34+
result = IssueNode.author(mock_issue)
35+
assert result == mock_author
36+
37+
def test_organization_name_with_organization(self):
38+
"""Test organization_name field when organization exists."""
39+
mock_issue = Mock()
40+
mock_repository = Mock()
41+
mock_organization = Mock()
42+
mock_organization.login = "test-org"
43+
mock_repository.organization = mock_organization
44+
mock_issue.repository = mock_repository
45+
46+
result = IssueNode.organization_name(mock_issue)
47+
assert result == "test-org"
48+
49+
def test_organization_name_without_organization(self):
50+
"""Test organization_name field when organization doesn't exist."""
51+
mock_issue = Mock()
52+
mock_repository = Mock()
53+
mock_repository.organization = None
54+
mock_issue.repository = mock_repository
55+
56+
result = IssueNode.organization_name(mock_issue)
57+
assert result is None
58+
59+
def test_organization_name_without_repository(self):
60+
"""Test organization_name field when repository doesn't exist."""
61+
mock_issue = Mock()
62+
mock_issue.repository = None
63+
64+
result = IssueNode.organization_name(mock_issue)
65+
assert result is None
66+
67+
def test_repository_name_with_repository(self):
68+
"""Test repository_name field when repository exists."""
69+
mock_issue = Mock()
70+
mock_repository = Mock()
71+
mock_repository.name = "test-repo"
72+
mock_issue.repository = mock_repository
73+
74+
result = IssueNode.repository_name(mock_issue)
75+
assert result == "test-repo"
76+
77+
def test_repository_name_without_repository(self):
78+
"""Test repository_name field when repository doesn't exist."""
79+
mock_issue = Mock()
80+
mock_issue.repository = None
81+
82+
result = IssueNode.repository_name(mock_issue)
83+
assert result is None

backend/tests/apps/github/api/internal/nodes/milestone_test.py

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
"""Test cases for MilestoneNode."""
22

3+
from unittest.mock import Mock
4+
5+
import pytest
6+
37
from apps.github.api.internal.nodes.milestone import MilestoneNode
48

59

@@ -26,3 +30,78 @@ def test_milestone_node_fields(self):
2630
"url",
2731
}
2832
assert field_names == expected_field_names
33+
34+
def test_author_field(self):
35+
"""Test author field resolution."""
36+
mock_milestone = Mock()
37+
mock_author = Mock()
38+
mock_milestone.author = mock_author
39+
40+
result = MilestoneNode.author(mock_milestone)
41+
assert result == mock_author
42+
43+
def test_organization_name_with_organization(self):
44+
"""Test organization_name field when organization exists."""
45+
mock_milestone = Mock()
46+
mock_repository = Mock()
47+
mock_organization = Mock()
48+
mock_organization.login = "test-org"
49+
mock_repository.organization = mock_organization
50+
mock_milestone.repository = mock_repository
51+
52+
result = MilestoneNode.organization_name(mock_milestone)
53+
assert result == "test-org"
54+
55+
def test_organization_name_without_organization(self):
56+
"""Test organization_name field when organization doesn't exist."""
57+
mock_milestone = Mock()
58+
mock_repository = Mock()
59+
mock_repository.organization = None
60+
mock_milestone.repository = mock_repository
61+
62+
result = MilestoneNode.organization_name(mock_milestone)
63+
assert result is None
64+
65+
def test_organization_name_without_repository(self):
66+
"""Test organization_name field when repository doesn't exist."""
67+
mock_milestone = Mock()
68+
mock_milestone.repository = None
69+
70+
result = MilestoneNode.organization_name(mock_milestone)
71+
assert result is None
72+
73+
def test_progress_with_issues(self):
74+
"""Test progress calculation with issues."""
75+
mock_milestone = Mock()
76+
mock_milestone.closed_issues_count = 7
77+
mock_milestone.open_issues_count = 3
78+
79+
result = MilestoneNode.progress(mock_milestone)
80+
assert result == pytest.approx(70.0)
81+
82+
def test_progress_without_issues(self):
83+
"""Test progress calculation without issues."""
84+
mock_milestone = Mock()
85+
mock_milestone.closed_issues_count = 0
86+
mock_milestone.open_issues_count = 0
87+
88+
result = MilestoneNode.progress(mock_milestone)
89+
assert result == pytest.approx(0.0)
90+
91+
def test_repository_name_with_repository(self):
92+
"""Test repository_name field when repository exists."""
93+
mock_milestone = Mock()
94+
mock_repository = Mock()
95+
mock_repository.name = "test-repo"
96+
mock_milestone.repository = mock_repository
97+
98+
result = MilestoneNode.repository_name(mock_milestone)
99+
assert result == "test-repo"
100+
101+
def test_repository_name_without_repository(self):
102+
"""Test repository_name field when repository doesn't exist."""
103+
mock_milestone = Mock()
104+
mock_milestone.repository = None
105+
106+
result = MilestoneNode.repository_name(mock_milestone)
107+
assert result is None

0 commit comments

Comments
 (0)