@@ -111,7 +111,6 @@ def test_destroy_returns_method_not_allowed_error_for_member(self) -> None:
111
111
self .assertEqual (res .status_code , status .HTTP_405_METHOD_NOT_ALLOWED )
112
112
113
113
def test_get (self ) -> None :
114
- self .maxDiff = None
115
114
gov = factories .GovernmentFactory (name = "まほろ市" , slug = "mahoro-city" )
116
115
cs = factories .ClassificationSystemFactory (name = "まほろ市2101年一般会計" , slug = "mahoro-city-2101-ippan-kaikei" )
117
116
icon0 = factories .IconImageFactory ()
@@ -281,7 +280,6 @@ def test_get(self) -> None:
281
280
self .assertEqual (actual , expected )
282
281
283
282
def test_get_mapped_budget (self ) -> None :
284
- self .maxDiff = None
285
283
gov = factories .GovernmentFactory ()
286
284
cs0 = factories .ClassificationSystemFactory ()
287
285
bud0 = factories .BasicBudgetFactory (classification_system = cs0 , government_value = gov )
@@ -777,6 +775,84 @@ def test_update_blank_slug_by_slug(self, jp_slugify):
777
775
self .assertEqual (actual , expected )
778
776
779
777
778
+ class MappedBudgetCandidateTestCase (BudgetMapperTestUserAPITestCase ):
779
+ def test_mapped_budget_candidates (self ):
780
+ cs = [factories .ClassificationSystemFactory () for _ in range (4 )]
781
+ gov = factories .GovernmentFactory ()
782
+ bb0_2100 = factories .BasicBudgetFactory (classification_system = cs [0 ], government_value = gov , year_value = 2100 )
783
+ bb0_2101 = factories .BasicBudgetFactory (classification_system = cs [0 ], government_value = gov , year_value = 2101 )
784
+ bb0_2102 = factories .BasicBudgetFactory (classification_system = cs [0 ], government_value = gov , year_value = 2102 )
785
+ factories .BasicBudgetFactory (classification_system = cs [1 ], government_value = gov , year_value = 2100 )
786
+ factories .MappedBudgetFactory (classification_system = cs [2 ], source_budget = bb0_2100 )
787
+ factories .MappedBudgetFactory (classification_system = cs [2 ], source_budget = bb0_2101 )
788
+ expected = sorted (
789
+ [
790
+ {
791
+ "id" : cs [2 ].id ,
792
+ "name" : cs [2 ].name ,
793
+ "slug" : cs [2 ].slug ,
794
+ "levelNames" : cs [2 ].level_names ,
795
+ "createdAt" : cs [2 ].created_at .strftime (datetime_format ),
796
+ "updatedAt" : cs [2 ].updated_at .strftime (datetime_format ),
797
+ },
798
+ {
799
+ "id" : cs [3 ].id ,
800
+ "name" : cs [3 ].name ,
801
+ "slug" : cs [3 ].slug ,
802
+ "levelNames" : cs [3 ].level_names ,
803
+ "createdAt" : cs [3 ].created_at .strftime (datetime_format ),
804
+ "updatedAt" : cs [3 ].updated_at .strftime (datetime_format ),
805
+ },
806
+ ],
807
+ key = lambda d : d ["createdAt" ],
808
+ )
809
+ res = self .client .get (f"/api/v1/budgets/{ bb0_2100 .id } /mapped-budget-candidates/" , format = "json" )
810
+ actual = sorted (res .json ()["results" ], key = lambda d : d ["createdAt" ])
811
+ self .assertEqual (actual , expected )
812
+
813
+ expected = sorted (
814
+ [
815
+ {
816
+ "id" : cs [1 ].id ,
817
+ "name" : cs [1 ].name ,
818
+ "slug" : cs [1 ].slug ,
819
+ "levelNames" : cs [1 ].level_names ,
820
+ "createdAt" : cs [1 ].created_at .strftime (datetime_format ),
821
+ "updatedAt" : cs [1 ].updated_at .strftime (datetime_format ),
822
+ },
823
+ {
824
+ "id" : cs [2 ].id ,
825
+ "name" : cs [2 ].name ,
826
+ "slug" : cs [2 ].slug ,
827
+ "levelNames" : cs [2 ].level_names ,
828
+ "createdAt" : cs [2 ].created_at .strftime (datetime_format ),
829
+ "updatedAt" : cs [2 ].updated_at .strftime (datetime_format ),
830
+ },
831
+ {
832
+ "id" : cs [3 ].id ,
833
+ "name" : cs [3 ].name ,
834
+ "slug" : cs [3 ].slug ,
835
+ "levelNames" : cs [3 ].level_names ,
836
+ "createdAt" : cs [3 ].created_at .strftime (datetime_format ),
837
+ "updatedAt" : cs [3 ].updated_at .strftime (datetime_format ),
838
+ },
839
+ ],
840
+ key = lambda d : d ["createdAt" ],
841
+ )
842
+ res = self .client .get (f"/api/v1/budgets/{ bb0_2102 .id } /mapped-budget-candidates/" , format = "json" )
843
+ actual = sorted (res .json ()["results" ], key = lambda d : d ["createdAt" ])
844
+ self .assertEqual (actual , expected )
845
+
846
+ def test_404_if_no_budget (self ):
847
+ res = self .client .get ("/api/v1/budgets/nonsuch/mapped-budget-candidates/" )
848
+ self .assertEqual (res .status_code , status .HTTP_404_NOT_FOUND )
849
+
850
+ def test_404_if_mapped_budget (self ):
851
+ mb = factories .MappedBudgetFactory ()
852
+ res = self .client .get (f"/api/v1/budgets/{ mb .id } /mapped-budget-candidates/" )
853
+ self .assertEqual (res .status_code , status .HTTP_404_NOT_FOUND )
854
+
855
+
780
856
class ClassificationCrudTestCase (BudgetMapperTestUserAPITestCase ):
781
857
def test_list (self ):
782
858
ordering = CreatedAtPagination .ordering
@@ -815,7 +891,6 @@ def test_list(self):
815
891
self .assertEqual (actual , expected )
816
892
817
893
def test_get (self ):
818
- self .maxDiff = None
819
894
cs = factories .ClassificationSystemFactory ()
820
895
classification_parent_a = factories .ClassificationFactory (classification_system = cs )
821
896
c = factories .ClassificationFactory (classification_system = cs , parent = classification_parent_a )
@@ -1175,6 +1250,82 @@ def test_list_can_filter_by_government_and_year(self):
1175
1250
actual = res_json ["results" ]
1176
1251
self .assertEqual (actual , expected )
1177
1252
1253
+ def test_list_can_filter_by_source_budget (self ) -> None :
1254
+ ordering = CreatedAtPagination .ordering
1255
+ page_size = CreatedAtPagination .page_size
1256
+ gov = factories .GovernmentFactory ()
1257
+ bud0 = factories .BasicBudgetFactory (government_value = gov )
1258
+ bud1 = factories .BasicBudgetFactory (government_value = gov )
1259
+ cs0 = factories .ClassificationSystemFactory ()
1260
+ cs1 = factories .ClassificationSystemFactory ()
1261
+ bud000 = factories .MappedBudgetFactory (source_budget = bud0 , classification_system = cs0 )
1262
+ bud001 = factories .MappedBudgetFactory (source_budget = bud0 , classification_system = cs0 )
1263
+ bud100 = factories .MappedBudgetFactory (source_budget = bud0 , classification_system = cs1 )
1264
+ factories .MappedBudgetFactory (source_budget = bud1 , classification_system = cs0 )
1265
+
1266
+ res = self .client .get (f"/api/v1/budgets/?sourceBudget={ bud0 .id } " , format = "json" )
1267
+ expected = [
1268
+ {
1269
+ "id" : b .id ,
1270
+ "name" : b .name ,
1271
+ "slug" : b .slug ,
1272
+ "year" : b .year ,
1273
+ "subtitle" : b .subtitle ,
1274
+ "classificationSystem" : b .classification_system .id ,
1275
+ "government" : b .government .id ,
1276
+ "createdAt" : b .created_at .strftime (datetime_format ),
1277
+ "updatedAt" : b .updated_at .strftime (datetime_format ),
1278
+ "sourceBudget" : b .source_budget .id ,
1279
+ }
1280
+ for b in sorted (
1281
+ [bud000 , bud001 , bud100 ],
1282
+ key = lambda b : getattr (b , ordering .strip ("-" )),
1283
+ reverse = ordering .startswith ("-" ),
1284
+ )
1285
+ ][:page_size ]
1286
+
1287
+ res_json = res .json ()
1288
+ self .assertIn ("results" , res_json )
1289
+ actual = res_json ["results" ]
1290
+ self .assertEqual (actual , expected )
1291
+
1292
+ def test_list_can_filter_by_source_budget_and_classification_system (self ) -> None :
1293
+ ordering = CreatedAtPagination .ordering
1294
+ page_size = CreatedAtPagination .page_size
1295
+ gov = factories .GovernmentFactory ()
1296
+ bud0 = factories .BasicBudgetFactory (government_value = gov )
1297
+ bud1 = factories .BasicBudgetFactory (government_value = gov )
1298
+ cs0 = factories .ClassificationSystemFactory ()
1299
+ cs1 = factories .ClassificationSystemFactory ()
1300
+ bud000 = factories .MappedBudgetFactory (source_budget = bud0 , classification_system = cs0 )
1301
+ bud001 = factories .MappedBudgetFactory (source_budget = bud0 , classification_system = cs0 )
1302
+ factories .MappedBudgetFactory (source_budget = bud0 , classification_system = cs1 )
1303
+ factories .MappedBudgetFactory (source_budget = bud1 , classification_system = cs0 )
1304
+
1305
+ res = self .client .get (f"/api/v1/budgets/?sourceBudget={ bud0 .id } &classificationSystem={ cs0 .id } " , format = "json" )
1306
+ expected = [
1307
+ {
1308
+ "id" : b .id ,
1309
+ "name" : b .name ,
1310
+ "slug" : b .slug ,
1311
+ "year" : b .year ,
1312
+ "subtitle" : b .subtitle ,
1313
+ "classificationSystem" : b .classification_system .id ,
1314
+ "government" : b .government .id ,
1315
+ "createdAt" : b .created_at .strftime (datetime_format ),
1316
+ "updatedAt" : b .updated_at .strftime (datetime_format ),
1317
+ "sourceBudget" : b .source_budget .id ,
1318
+ }
1319
+ for b in sorted (
1320
+ [bud000 , bud001 ], key = lambda b : getattr (b , ordering .strip ("-" )), reverse = ordering .startswith ("-" )
1321
+ )
1322
+ ][:page_size ]
1323
+
1324
+ res_json = res .json ()
1325
+ self .assertIn ("results" , res_json )
1326
+ actual = res_json ["results" ]
1327
+ self .assertEqual (actual , expected )
1328
+
1178
1329
def test_retrieve_basic (self ):
1179
1330
bs = [factories .BasicBudgetFactory () for i in range (100 )]
1180
1331
b = bs [random .randint (0 , 99 )]
@@ -1211,7 +1362,6 @@ def test_retrieve_basic(self):
1211
1362
self .assertEqual (actual , expected )
1212
1363
1213
1364
def test_retrieve_mapped (self ):
1214
- self .maxDiff = None
1215
1365
bs = [factories .MappedBudgetFactory () for i in range (100 )]
1216
1366
b = random .choice (bs )
1217
1367
res = self .client .get (f"/api/v1/budgets/{ b .id } /" , format = "json" )
0 commit comments