@@ -77,6 +77,30 @@ defmodule Transport.IRVE.DeduplicatorTest do
7777 "date_maj" => ~D[ 2025-10-01] ,
7878 "deduplication_status" => "removed_because_non_concerne" ,
7979 "id_pdc_itinerance" => "Non concerné"
80+ } ,
81+ % {
82+ "datagouv_resource_id" => "with-exact-duplicates-resource" ,
83+ "date_maj" => ~D[ 2025-10-01] ,
84+ "deduplication_status" => "kept_because_exact_duplicate_in_same_file" ,
85+ "id_pdc_itinerance" => "FRS31DUPLICATE5"
86+ } ,
87+ % {
88+ "datagouv_resource_id" => "with-exact-duplicates-resource" ,
89+ "date_maj" => ~D[ 2025-10-01] ,
90+ "deduplication_status" => "removed_because_exact_duplicate_in_same_file" ,
91+ "id_pdc_itinerance" => "FRS31DUPLICATE5"
92+ } ,
93+ % {
94+ "datagouv_resource_id" => "similar-resource-1" ,
95+ "date_maj" => ~D[ 2025-10-01] ,
96+ "deduplication_status" => "removed_because_no_rule_applies" ,
97+ "id_pdc_itinerance" => "FRS31DUPLICATE5"
98+ } ,
99+ % {
100+ "datagouv_resource_id" => "similar-resource-2" ,
101+ "date_maj" => ~D[ 2025-10-01] ,
102+ "deduplication_status" => "removed_because_no_rule_applies" ,
103+ "id_pdc_itinerance" => "FRS31DUPLICATE5"
80104 }
81105 ]
82106 end
@@ -110,6 +134,10 @@ defmodule Transport.IRVE.DeduplicatorTest do
110134 % {
111135 "datagouv_resource_id" => "gireve-resource" ,
112136 "id_pdc_itinerance" => "FRS31DUPLICATE3"
137+ } ,
138+ % {
139+ "datagouv_resource_id" => "with-exact-duplicates-resource" ,
140+ "id_pdc_itinerance" => "FRS31DUPLICATE5"
113141 }
114142 ]
115143 end
@@ -247,15 +275,67 @@ defmodule Transport.IRVE.DeduplicatorTest do
247275 ]
248276 |> Enum . map ( & Map . merge ( & 1 , non_itinerance_resource ) )
249277
278+ resource_with_exact_duplicates = % {
279+ "datagouv_dataset_id" => "with-exact-duplicates-dataset" ,
280+ "datagouv_resource_id" => "with-exact-duplicates-resource" ,
281+ "datagouv_last_modified" => DateTime . new! ( ~D[ 2025-11-01] , ~T[ 12:00:00.000] , "Etc/UTC" )
282+ }
283+
284+ resource_with_exact_duplicates_content =
285+ [
286+ % {
287+ "id_pdc_itinerance" => "FRS31DUPLICATE5" ,
288+ "date_maj" => ~D[ 2025-10-01]
289+ } ,
290+ % {
291+ "id_pdc_itinerance" => "FRS31DUPLICATE5" ,
292+ "date_maj" => ~D[ 2025-10-01]
293+ }
294+ ]
295+ |> Enum . map ( & Map . merge ( & 1 , resource_with_exact_duplicates ) )
296+
297+ similar_resource_published_at_same_timestamp_1 = % {
298+ "datagouv_dataset_id" => "similar-resource-dataset-1" ,
299+ "datagouv_resource_id" => "similar-resource-1" ,
300+ "datagouv_last_modified" => DateTime . new! ( ~D[ 2025-11-01] , ~T[ 12:00:00.000] , "Etc/UTC" )
301+ }
302+
303+ similar_resource_published_at_same_timestamp_2 = % {
304+ "datagouv_dataset_id" => "similar-resource-dataset-2" ,
305+ "datagouv_resource_id" => "similar-resource-2" ,
306+ "datagouv_last_modified" => DateTime . new! ( ~D[ 2025-11-01] , ~T[ 12:00:00.000] , "Etc/UTC" )
307+ }
308+
309+ similar_resource_content =
310+ [
311+ % {
312+ "id_pdc_itinerance" => "FRS31DUPLICATE5" ,
313+ "date_maj" => ~D[ 2025-10-01]
314+ }
315+ ]
316+
250317 data =
251318 resource_2026_02_15_content ++
252319 resource_2026_02_17_content ++
253320 resource_2026_02_01_content ++
254321 reource_2026_02_18_content ++
255322 gireve_resource_content ++
256323 qualicharge_resource_content ++
257- non_itinerance_resource_content
324+ non_itinerance_resource_content ++
325+ resource_with_exact_duplicates_content ++
326+ Enum . map ( similar_resource_content , & Map . merge ( & 1 , similar_resource_published_at_same_timestamp_1 ) ) ++
327+ Enum . map ( similar_resource_content , & Map . merge ( & 1 , similar_resource_published_at_same_timestamp_2 ) )
328+
329+ data
330+ |> add_dummy_missing_columns ( )
331+ |> Explorer.DataFrame . new ( )
332+ end
333+
334+ defp add_dummy_missing_columns ( data ) do
335+ dummy_columns =
336+ Transport.IRVE.DatabaseExporter . export_field_list ( )
337+ |> Map . new ( & { & 1 , nil } )
258338
259- Explorer.DataFrame . new ( data )
339+ Enum . map ( data , & Map . merge ( dummy_columns , & 1 ) )
260340 end
261341end
0 commit comments