1
- from unittest .mock import Mock , patch
1
+ from unittest .mock import MagicMock , patch
2
2
3
3
import pytest
4
4
5
5
from apps .owasp .graphql .nodes .project_health_metrics import ProjectHealthMetricsNode
6
6
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
7
9
8
10
9
11
class TestProjectHealthMetricsQuery :
@@ -57,12 +59,12 @@ def _setup(self):
57
59
58
60
def test_resolve_unhealthy_projects_without_filters (self ):
59
61
"""Test the resolution of unhealthy projects."""
60
- # Mock the queryset
61
- mock_queryset = Mock ()
62
+ # MagicMock the queryset
63
+ mock_queryset = MagicMock ()
62
64
self .mocked_objects .select_related .return_value = mock_queryset
63
65
mock_queryset .order_by .return_value .distinct .return_value = mock_queryset
64
66
# Filters
65
- mock_filter = Mock ()
67
+ mock_filter = MagicMock ()
66
68
mock_queryset .filter .return_value = mock_filter
67
69
mock_filter .select_related .return_value = [mock_filter ]
68
70
# Create an instance of the query class
@@ -78,37 +80,81 @@ def test_resolve_unhealthy_projects_without_filters(self):
78
80
assert isinstance (result , list )
79
81
mock_filter .select_related .assert_called_with ("project" )
80
82
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