1+ from datetime import date
2+
13import pytest
24from pytest_django import DjangoAssertNumQueries
35
@@ -94,6 +96,31 @@ def test_date_approbation_quand_event_approbation_manquant(
9496
9597 assert procedure_with_events .date_approbation == "0000-00-00"
9698
99+ @pytest .mark .django_db
100+ def test_date_approbation_ignore_event_apres (
101+ self , django_assert_num_queries : DjangoAssertNumQueries
102+ ) -> None :
103+ procedure = Procedure .objects .create (type_document = TypeDocument .PLUI )
104+ procedure .event_set .create (
105+ type = "Caractère exécutoire" ,
106+ date_evenement_string = "2022-12-01" ,
107+ )
108+ procedure .event_set .create (
109+ type = "Délibération d'approbation" ,
110+ date_evenement_string = "2023-12-01" ,
111+ )
112+
113+ assert [event .impact for event in procedure .event_set .all ()] == [
114+ EventImpact .OPPOSABLE ,
115+ EventImpact .OPPOSABLE ,
116+ ]
117+ with django_assert_num_queries (1 ):
118+ procedure_with_events = Procedure .objects .with_events (
119+ avant = date (2023 , 12 , 1 )
120+ ).get (id = procedure .id )
121+
122+ assert procedure_with_events .date_approbation == "2022-12-01"
123+
97124
98125class TestProcedureStatut :
99126 @pytest .mark .django_db
@@ -111,6 +138,42 @@ def test_principale_opposable(
111138
112139 assert procedure_with_events .statut == EventImpact .OPPOSABLE
113140
141+ @pytest .mark .django_db
142+ @pytest .mark .parametrize (
143+ ("jour_limite" , "impact" ),
144+ [
145+ (3 , None ),
146+ (4 , EventImpact .EN_COURS ),
147+ (5 , EventImpact .EN_COURS ),
148+ (6 , EventImpact .OPPOSABLE ),
149+ ],
150+ )
151+ def test_ignore_event_apres (
152+ self ,
153+ django_assert_num_queries : DjangoAssertNumQueries ,
154+ jour_limite : int ,
155+ impact : EventImpact ,
156+ ) -> None :
157+ procedure = Procedure .objects .create (
158+ is_principale = True , type_document = TypeDocument .PLUI
159+ )
160+ event_prescription = procedure .event_set .create (
161+ type = "Délibération de prescription du conseil municipal ou communautaire" ,
162+ date_evenement_string = "2024-12-03" ,
163+ )
164+ event_approbation = procedure .event_set .create (
165+ type = "Caractère exécutoire" , date_evenement_string = "2024-12-05"
166+ )
167+
168+ assert event_prescription .impact == EventImpact .EN_COURS
169+ assert event_approbation .impact == EventImpact .OPPOSABLE
170+ with django_assert_num_queries (1 ):
171+ procedure_with_events = Procedure .objects .with_events (
172+ avant = date (2024 , 12 , jour_limite )
173+ ).get (id = procedure .id )
174+
175+ assert procedure_with_events .statut == impact
176+
114177 @pytest .mark .django_db
115178 def test_principale_sans_evenement (
116179 self , django_assert_num_queries : DjangoAssertNumQueries
@@ -454,3 +517,46 @@ def test_ignore_procedures_archivees(
454517 perimetres = CommuneProcedure .objects .with_opposabilite ()
455518 with django_assert_num_queries (0 ):
456519 assert perimetres == [commune_procedure_reelle ]
520+
521+ @pytest .mark .django_db
522+ def test_ignore_event_apres (
523+ self , django_assert_num_queries : DjangoAssertNumQueries
524+ ) -> None :
525+ procedure_opposable_fevrier = Procedure .objects .create (
526+ is_principale = True , type_document = TypeDocument .PLUI
527+ )
528+ procedure_opposable_fevrier .event_set .create (
529+ type = "Caractère exécutoire" , date_evenement_string = "2024-02-01"
530+ )
531+ commune_procedure_opposable_fevrier = (
532+ procedure_opposable_fevrier .perimetre .create (collectivite_code = "12345" )
533+ )
534+
535+ procedure_opposable_janvier = Procedure .objects .create (
536+ is_principale = True , type_document = TypeDocument .PLU
537+ )
538+ procedure_opposable_janvier .event_set .create (
539+ type = "Caractère exécutoire" , date_evenement_string = "2024-01-01"
540+ )
541+ commune_procedure_opposable_janvier = (
542+ procedure_opposable_janvier .perimetre .create (collectivite_code = "12345" )
543+ )
544+
545+ with django_assert_num_queries (1 ):
546+ procedures = Procedure .objects .with_events ()
547+
548+ assert all (
549+ procedure .statut == EventImpact .OPPOSABLE for procedure in procedures
550+ )
551+
552+ with django_assert_num_queries (2 ):
553+ perimetres = CommuneProcedure .objects .with_opposabilite (
554+ avant = date (2024 , 2 , 1 )
555+ )
556+ with django_assert_num_queries (0 ):
557+ assert perimetres == [
558+ commune_procedure_opposable_fevrier ,
559+ commune_procedure_opposable_janvier ,
560+ ]
561+ assert not perimetres [0 ].opposable
562+ assert perimetres [1 ].opposable
0 commit comments