Skip to content

Commit 9972b8c

Browse files
committed
Add test with filters
1 parent bbf0b27 commit 9972b8c

File tree

1 file changed

+84
-38
lines changed

1 file changed

+84
-38
lines changed

backend/tests/apps/owasp/graphql/queries/project_health_metrics_test.py

Lines changed: 84 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
from unittest.mock import Mock, patch
1+
from unittest.mock import MagicMock, patch
22

33
import pytest
44

55
from apps.owasp.graphql.nodes.project_health_metrics import ProjectHealthMetricsNode
66
from apps.owasp.graphql.queries.project_health_metrics import ProjectHealthMetricsQuery
7+
from apps.owasp.models.project import Project
8+
from apps.owasp.models.project_health_metrics import ProjectHealthMetrics
79

810

911
class TestProjectHealthMetricsQuery:
@@ -57,12 +59,12 @@ def _setup(self):
5759

5860
def test_resolve_unhealthy_projects_without_filters(self):
5961
"""Test the resolution of unhealthy projects."""
60-
# Mock the queryset
61-
mock_queryset = Mock()
62+
# MagicMock the queryset
63+
mock_queryset = MagicMock()
6264
self.mocked_objects.select_related.return_value = mock_queryset
6365
mock_queryset.order_by.return_value.distinct.return_value = mock_queryset
6466
# Filters
65-
mock_filter = Mock()
67+
mock_filter = MagicMock()
6668
mock_queryset.filter.return_value = mock_filter
6769
mock_filter.select_related.return_value = [mock_filter]
6870
# Create an instance of the query class
@@ -78,37 +80,81 @@ def test_resolve_unhealthy_projects_without_filters(self):
7880
assert isinstance(result, list)
7981
mock_filter.select_related.assert_called_with("project")
8082

81-
# def test_resolve_unhealthy_projects_with_filters(self):
82-
# """Test the resolution of unhealthy projects with filters."""
83-
# # Mock the queryset
84-
# mock_queryset = Mock()
85-
# self.mocked_objects.select_related.return_value = mock_queryset
86-
# mock_queryset.order_by.return_value.distinct.return_value = mock_queryset
87-
# # Filters
88-
# mock_filter = Mock()
89-
# mock_queryset.filter.return_value = mock_filter
90-
# mock_filter.select_related.return_value = [mock_filter]
91-
92-
# # Create an instance of the query class
93-
# query_instance = ProjectHealthMetricsQuery()
94-
95-
# # Call the method with filters
96-
# result = query_instance.unhealthy_projects(
97-
# is_contributors_requirement_compliant=True,
98-
# is_funding_requirements_compliant=False,
99-
# has_recent_commits=True,
100-
# has_recent_releases=False,
101-
# is_leaders_requirement_compliant=True,
102-
# limit=10,
103-
# has_long_open_issues=False,
104-
# has_long_unanswered_issues=True,
105-
# has_long_unassigned_issues=False,
106-
# has_low_score=True,
107-
# )
108-
109-
# # Assert that the mocked queryset was called correctly with filters
110-
# self.mocked_objects.select_related.assert_called_with("project")
111-
# mock_queryset.order_by.assert_called_with("project__key", "-nest_created_at")
112-
113-
# assert isinstance(result, list)
114-
# mock_filter.select_related.assert_called_with("project")
83+
def test_resolve_unhealthy_projects_with_filters(self):
84+
"""Test the resolution of unhealthy projects with filters."""
85+
# MagicMock the queryset
86+
mock_queryset = MagicMock()
87+
mock_metrics = MagicMock(spec=ProjectHealthMetrics)
88+
mock_metrics.project = MagicMock(spec=Project)
89+
mock_metrics.project.key = "test_project_key"
90+
mock_metrics.nest_created_at = "2023-10-01T00:00:00Z"
91+
mock_metrics.score = 45.0
92+
mock_metrics.contributors_count = 3
93+
mock_metrics.is_funding_requirements_compliant = False
94+
mock_metrics.is_leader_requirements_compliant = True
95+
mock_metrics.has_recent_commits = True
96+
mock_metrics.has_long_open_issues = True
97+
mock_metrics.has_long_unanswered_issues = True
98+
mock_metrics.has_long_unassigned_issues = True
99+
mock_metrics.recent_releases_count = 2
100+
101+
mock_metrics_filtered_same_project = MagicMock(spec=ProjectHealthMetrics)
102+
mock_metrics_filtered_same_project.project = mock_metrics.project
103+
mock_metrics_filtered_same_project.nest_created_at = "2023-09-01T00:00:00Z"
104+
105+
mock_metrics_filtered_different_project = MagicMock(spec=ProjectHealthMetrics)
106+
mock_metrics_filtered_different_project.project = MagicMock(spec=Project)
107+
mock_metrics_filtered_different_project.project.key = "different_project_key"
108+
mock_metrics_filtered_different_project.has_recent_commits = False
109+
110+
self.mocked_objects.select_related.return_value = mock_queryset
111+
mock_queryset.__iter__.return_value = iter(
112+
[
113+
mock_metrics,
114+
mock_metrics_filtered_same_project,
115+
mock_metrics_filtered_different_project,
116+
]
117+
)
118+
mock_queryset.order_by.return_value.distinct.return_value = mock_queryset
119+
120+
# Filters
121+
mock_filter = MagicMock()
122+
mock_queryset.filter.return_value = mock_filter
123+
mock_filter.select_related.return_value = [mock_metrics]
124+
125+
# Create an instance of the query class
126+
query_instance = ProjectHealthMetricsQuery()
127+
128+
# Call the method with filters
129+
result = query_instance.unhealthy_projects(
130+
is_contributors_requirement_compliant=True,
131+
is_funding_requirements_compliant=False,
132+
has_recent_commits=True,
133+
has_recent_releases=True,
134+
is_leader_requirements_compliant=True,
135+
limit=10,
136+
has_long_open_issues=True,
137+
has_long_unanswered_issues=True,
138+
has_long_unassigned_issues=True,
139+
has_low_score=True,
140+
)
141+
142+
# Assert that the mocked queryset was called correctly with filters
143+
self.mocked_objects.select_related.assert_called_with("project")
144+
mock_queryset.order_by.assert_called_with("project__key", "-nest_created_at")
145+
mock_queryset.filter.assert_called_with(
146+
contributors_count__gte=2,
147+
has_recent_commits=True,
148+
has_long_open_issues=True,
149+
has_long_unanswered_issues=True,
150+
has_long_unassigned_issues=True,
151+
is_funding_requirements_compliant=False,
152+
is_leader_requirements_compliant=True,
153+
recent_releases_count__gt=0,
154+
score__lt=50,
155+
)
156+
mock_filter.select_related.assert_called_with("project")
157+
assert len(result) == 1
158+
assert result[0].project.key == "test_project_key"
159+
assert result[0].score == mock_metrics.score
160+
assert result[0].contributors_count == mock_metrics.contributors_count

0 commit comments

Comments
 (0)