1- import copy
21import unittest
32from datetime import datetime
43from zoneinfo import ZoneInfo
@@ -49,13 +48,47 @@ def create_test_notice(notice_code: str, total_notices: int, severity: str):
4948 )
5049
5150
51+ gtfs_dataset_orm = Gtfsdataset (
52+ id = "id" ,
53+ stable_id = "dataset_stable_id" ,
54+ feed_id = "feed_id" ,
55+ hosted_url = "hosted_url" ,
56+ note = "note" ,
57+ downloaded_at = datetime (year = 2022 , month = 12 , day = 31 , hour = 13 , minute = 45 , second = 56 ),
58+ hash = "hash" ,
59+ service_date_range_start = datetime (2024 , 1 , 1 , 0 , 0 , 0 , tzinfo = ZoneInfo ("Canada/Atlantic" )),
60+ service_date_range_end = datetime (2025 , 1 , 1 , 0 , 0 , 0 , tzinfo = ZoneInfo ("Canada/Atlantic" )),
61+ agency_timezone = "Canada/Atlantic" ,
62+ bounding_box = WKTElement (POLYGON , srid = 4326 ),
63+ validation_reports = [
64+ Validationreport (
65+ id = "id" ,
66+ validator_version = "validator_version" ,
67+ validated_at = datetime (year = 2022 , month = 12 , day = 31 , hour = 13 , minute = 45 , second = 56 ),
68+ html_report = "html_report" ,
69+ json_report = "json_report" ,
70+ features = [Feature (name = "feature" )],
71+ notices = [
72+ create_test_notice ("notice_code1" , 1 , "INFO" ),
73+ create_test_notice ("notice_code2" , 3 , "INFO" ),
74+ create_test_notice ("notice_code3" , 7 , "ERROR" ),
75+ create_test_notice ("notice_code4" , 9 , "ERROR" ),
76+ create_test_notice ("notice_code5" , 11 , "ERROR" ),
77+ create_test_notice ("notice_code6" , 13 , "WARNING" ),
78+ create_test_notice ("notice_code7" , 15 , "WARNING" ),
79+ create_test_notice ("notice_code8" , 17 , "WARNING" ),
80+ create_test_notice ("notice_code9" , 19 , "WARNING" ),
81+ ],
82+ )
83+ ],
84+ )
5285gtfs_feed_orm = Gtfsfeed (
5386 id = "id" ,
5487 data_type = "gtfs" ,
5588 feed_name = "feed_name" ,
5689 note = "note" ,
5790 producer_url = "producer_url" ,
58- authentication_type = 1 ,
91+ authentication_type = "1" ,
5992 authentication_info_url = "authentication_info_url" ,
6093 api_key_parameter_name = "api_key_parameter_name" ,
6194 license_url = "license_url" ,
@@ -79,43 +112,8 @@ def create_test_notice(notice_code: str, total_notices: int, severity: str):
79112 source = "source" ,
80113 )
81114 ],
82- gtfsdatasets = [
83- Gtfsdataset (
84- id = "id" ,
85- stable_id = "dataset_stable_id" ,
86- feed_id = "feed_id" ,
87- hosted_url = "hosted_url" ,
88- note = "note" ,
89- downloaded_at = datetime (year = 2022 , month = 12 , day = 31 , hour = 13 , minute = 45 , second = 56 ),
90- hash = "hash" ,
91- service_date_range_start = datetime (2024 , 1 , 1 , 0 , 0 , 0 , tzinfo = ZoneInfo ("Canada/Atlantic" )),
92- service_date_range_end = datetime (2025 , 1 , 1 , 0 , 0 , 0 , tzinfo = ZoneInfo ("Canada/Atlantic" )),
93- agency_timezone = "Canada/Atlantic" ,
94- bounding_box = WKTElement (POLYGON , srid = 4326 ),
95- latest = True ,
96- validation_reports = [
97- Validationreport (
98- id = "id" ,
99- validator_version = "validator_version" ,
100- validated_at = datetime (year = 2022 , month = 12 , day = 31 , hour = 13 , minute = 45 , second = 56 ),
101- html_report = "html_report" ,
102- json_report = "json_report" ,
103- features = [Feature (name = "feature" )],
104- notices = [
105- create_test_notice ("notice_code1" , 1 , "INFO" ),
106- create_test_notice ("notice_code2" , 3 , "INFO" ),
107- create_test_notice ("notice_code3" , 7 , "ERROR" ),
108- create_test_notice ("notice_code4" , 9 , "ERROR" ),
109- create_test_notice ("notice_code5" , 11 , "ERROR" ),
110- create_test_notice ("notice_code6" , 13 , "WARNING" ),
111- create_test_notice ("notice_code7" , 15 , "WARNING" ),
112- create_test_notice ("notice_code8" , 17 , "WARNING" ),
113- create_test_notice ("notice_code9" , 19 , "WARNING" ),
114- ],
115- )
116- ],
117- )
118- ],
115+ latest_dataset = gtfs_dataset_orm ,
116+ gtfsdatasets = [gtfs_dataset_orm ],
119117 redirectingids = [
120118 Redirectingid (source_id = "source_id" , target_id = "id1" , redirect_comment = "redirect_comment" , target = targetFeed )
121119 ],
@@ -198,24 +196,47 @@ def test_from_orm_all_fields(self):
198196
199197 def test_from_orm_empty_fields (self ):
200198 """Test the `from_orm` method with not provided fields."""
201- # Test with empty fields and None values
202- # No error should be raised
203- # Target is set to None as deep copy is failing for unknown reasons
204- # At the end of the test, the target is set back to the original value
205- gtfs_feed_orm .redirectingids [0 ].target = None
206- target_feed_orm = copy .deepcopy (gtfs_feed_orm )
207- target_feed_orm .feed_name = ""
208- target_feed_orm .provider = None
209- target_feed_orm .externalids = []
210- target_feed_orm .redirectingids = []
211-
212- target_expected_gtfs_feed_result = copy .deepcopy (expected_gtfs_feed_result )
213- target_expected_gtfs_feed_result .feed_name = ""
214- target_expected_gtfs_feed_result .provider = None
215- target_expected_gtfs_feed_result .external_ids = []
216- target_expected_gtfs_feed_result .redirects = []
217-
218- result = GtfsFeedImpl .from_orm (target_feed_orm )
219- assert result == target_expected_gtfs_feed_result
220- # Set the target back to the original value
221- gtfs_feed_orm .redirectingids [0 ].target = targetFeed
199+ # Manually construct a minimal Gtfsfeed ORM object with empty/None fields
200+ minimal_feed_orm = Gtfsfeed (
201+ id = "id" ,
202+ data_type = "gtfs" ,
203+ feed_name = "" ,
204+ note = None ,
205+ producer_url = None ,
206+ authentication_type = None ,
207+ authentication_info_url = None ,
208+ api_key_parameter_name = None ,
209+ license_url = None ,
210+ stable_id = "stable_id" ,
211+ status = None ,
212+ feed_contact_email = None ,
213+ provider = None ,
214+ locations = [],
215+ externalids = [],
216+ latest_dataset = None ,
217+ gtfsdatasets = [],
218+ redirectingids = [],
219+ gtfs_rt_feeds = [],
220+ )
221+ minimal_expected_result = GtfsFeedImpl (
222+ id = "stable_id" ,
223+ data_type = "gtfs" ,
224+ status = None ,
225+ external_ids = [],
226+ provider = None ,
227+ feed_name = "" ,
228+ note = None ,
229+ feed_contact_email = None ,
230+ source_info = SourceInfo (
231+ producer_url = None ,
232+ authentication_type = None ,
233+ authentication_info_url = None ,
234+ api_key_parameter_name = None ,
235+ license_url = None ,
236+ ),
237+ redirects = [],
238+ locations = [],
239+ latest_dataset = None ,
240+ )
241+ result = GtfsFeedImpl .from_orm (minimal_feed_orm )
242+ assert result == minimal_expected_result
0 commit comments