Skip to content
This repository has been archived by the owner on Nov 22, 2023. It is now read-only.

Commit

Permalink
(PC-11034) Fix query to filter already processed application ids
Browse files Browse the repository at this point in the history
  • Loading branch information
dzen committed Oct 14, 2021
1 parent 8ec84ae commit 84496f8
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/pcapi/repository/beneficiary_import_queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,11 @@ def get_existing_applications_id(procedure_id: int) -> set[int]:
return {
beneficiary_import.applicationId
for beneficiary_import in BeneficiaryImport.query.join(BeneficiaryImportStatus)
.filter(BeneficiaryImportStatus.status.in_([ImportStatus.CREATED, ImportStatus.REJECTED]))
.filter(
BeneficiaryImportStatus.status.in_(
[ImportStatus.CREATED, ImportStatus.REJECTED, ImportStatus.DUPLICATE, ImportStatus.ERROR]
)
)
.options(load_only(BeneficiaryImport.applicationId))
.filter(BeneficiaryImport.sourceId == procedure_id)
.all()
Expand Down
53 changes: 53 additions & 0 deletions tests/repository/beneficiary_import_queries_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from pcapi.models import BeneficiaryImportSources
from pcapi.models import ImportStatus
from pcapi.repository.beneficiary_import_queries import find_applications_ids_to_retry
from pcapi.repository.beneficiary_import_queries import get_existing_applications_id
from pcapi.repository.beneficiary_import_queries import is_already_imported
from pcapi.repository.beneficiary_import_queries import save_beneficiary_import_with_status

Expand Down Expand Up @@ -196,3 +197,55 @@ def test_returns_an_empty_list_if_no_retry_imports_exist(self, app):

# then
assert not ids


@pytest.mark.usefixtures("db_session")
class GetExistingApplicationIdTest:
def test_existing_application_id(self):
procedure_id = 123

draft = users_factories.BeneficiaryImportStatusFactory(
beneficiaryImport__sourceId=procedure_id,
status=ImportStatus.DRAFT,
)

ongoing = users_factories.BeneficiaryImportStatusFactory(
beneficiaryImport__sourceId=procedure_id,
status=ImportStatus.ONGOING,
)
duplicate = users_factories.BeneficiaryImportStatusFactory(
beneficiaryImport__sourceId=procedure_id,
status=ImportStatus.DUPLICATE,
)
error = users_factories.BeneficiaryImportStatusFactory(
beneficiaryImport__sourceId=procedure_id,
status=ImportStatus.ERROR,
)
created = users_factories.BeneficiaryImportStatusFactory(
beneficiaryImport__sourceId=procedure_id,
status=ImportStatus.CREATED,
)

rejected = users_factories.BeneficiaryImportStatusFactory(
beneficiaryImport__sourceId=procedure_id,
status=ImportStatus.REJECTED,
)
retry = users_factories.BeneficiaryImportStatusFactory(
beneficiaryImport__sourceId=procedure_id,
status=ImportStatus.RETRY,
)
without_continuation = users_factories.BeneficiaryImportStatusFactory(
beneficiaryImport__sourceId=procedure_id,
status=ImportStatus.WITHOUT_CONTINUATION,
)

application_ids = get_existing_applications_id(procedure_id)
assert draft.beneficiaryImport.applicationId not in application_ids
assert ongoing.beneficiaryImport.applicationId not in application_ids
assert without_continuation.beneficiaryImport.applicationId not in application_ids
assert retry.beneficiaryImport.applicationId not in application_ids

assert rejected.beneficiaryImport.applicationId in application_ids
assert error.beneficiaryImport.applicationId in application_ids
assert created.beneficiaryImport.applicationId in application_ids
assert duplicate.beneficiaryImport.applicationId in application_ids

0 comments on commit 84496f8

Please sign in to comment.