Skip to content

Commit 3fa3d9a

Browse files
authored
fix: code references count returns 0 after unchanged rescan (#7599)
1 parent 18230bf commit 3fa3d9a

2 files changed

Lines changed: 29 additions & 5 deletions

File tree

api/projects/code_references/services.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,9 @@ def record_scan(
146146
for feature_name, references in references_by_feature.items()
147147
if (feature := features_by_name.get(feature_name)) is not None
148148
],
149-
ignore_conflicts=True,
149+
update_conflicts=True,
150+
unique_fields=["feature", "repository", "code_references_hash"],
151+
update_fields=["created_at", "revision"],
150152
)
151153

152154
return FeatureFlagCodeReferencesScan(

api/tests/unit/projects/code_references/test_unit_projects_code_references_views.py

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -188,12 +188,13 @@ def test_create_code_reference__file_path_too_long__returns_400(
188188
assert not ScannedCodeReferences.objects.exists()
189189

190190

191-
def test_create_code_reference__duplicate_payload__deduplicates_storage(
191+
@freezegun.freeze_time("2099-06-01T12:00:00+00:00")
192+
def test_create_code_reference__duplicate_payload__deduplicates_storage_and_references_remain_retrievable(
192193
admin_client_new: APIClient,
193194
project: Project,
194195
) -> None:
195196
# Given
196-
Feature.objects.create(project=project, name="feature-1")
197+
feature = Feature.objects.create(project=project, name="feature-1")
197198
payload = {
198199
"repository_url": "https://github.flagsmith.com/",
199200
"revision": "rev-1",
@@ -205,17 +206,38 @@ def test_create_code_reference__duplicate_payload__deduplicates_storage(
205206
},
206207
],
207208
}
208-
209-
# When
210209
admin_client_new.post(
211210
f"/api/v1/projects/{project.pk}/code-references/", data=payload, format="json"
212211
)
212+
213+
# When
213214
admin_client_new.post(
214215
f"/api/v1/projects/{project.pk}/code-references/", data=payload, format="json"
215216
)
216217

217218
# Then
218219
assert ScannedCodeReferences.objects.count() == 1
220+
response = admin_client_new.get(
221+
f"/api/v1/projects/{project.pk}/features/{feature.pk}/code-references/",
222+
)
223+
assert response.status_code == 200
224+
assert response.json() == [
225+
{
226+
"repository_url": "https://github.flagsmith.com/",
227+
"vcs_provider": "github",
228+
"revision": "rev-1",
229+
"last_successful_repository_scanned_at": "2099-06-01T12:00:00+00:00",
230+
"last_feature_found_at": "2099-06-01T12:00:00+00:00",
231+
"code_references": [
232+
{
233+
"feature_name": "feature-1",
234+
"file_path": "path/to/file.py",
235+
"line_number": 1,
236+
"permalink": "https://github.flagsmith.com/blob/rev-1/path/to/file.py#L1",
237+
},
238+
],
239+
},
240+
]
219241

220242

221243
def test_get_feature_code_references__multiple_scans_exist__returns_latest_per_repository(

0 commit comments

Comments
 (0)