@@ -76,12 +76,38 @@ void main() {
7676 'last_updated' : '2025-01-15T12:00:00.000Z' ,
7777 };
7878
79- final response = FestivalsResponse .fromJson (json);
79+ final response = FestivalsResponse .fromJson (json, 'https://example.com' );
8080
8181 expect (response.festivals.length, 2 );
8282 expect (response.defaultFestivalId, 'cbf2025' );
8383 expect (response.version, '1.0.0' );
8484 expect (response.lastUpdated, isNotNull);
85+ expect (response.baseUrl, 'https://example.com' );
86+ });
87+
88+ test ('fromJson resolves relative URLs to absolute' , () {
89+ final json = {
90+ 'festivals' : [
91+ {
92+ 'id' : 'cbf2025' ,
93+ 'name' : 'Cambridge Beer Festival 2025' ,
94+ 'data_base_url' : '/cbf2025' ,
95+ 'is_active' : true ,
96+ },
97+ {
98+ 'id' : 'cbfw2025' ,
99+ 'name' : 'Cambridge Winter Beer Festival 2025' ,
100+ 'data_base_url' : '/cbfw2025' ,
101+ 'is_active' : false ,
102+ },
103+ ],
104+ 'default_festival_id' : 'cbf2025' ,
105+ };
106+
107+ final response = FestivalsResponse .fromJson (json, 'https://data.cambeerfestival.app' );
108+
109+ expect (response.festivals[0 ].dataBaseUrl, 'https://data.cambeerfestival.app/cbf2025' );
110+ expect (response.festivals[1 ].dataBaseUrl, 'https://data.cambeerfestival.app/cbfw2025' );
85111 });
86112
87113 test ('fromJson handles missing optional fields' , () {
@@ -96,7 +122,7 @@ void main() {
96122 'default_festival_id' : 'test' ,
97123 };
98124
99- final response = FestivalsResponse .fromJson (json);
125+ final response = FestivalsResponse .fromJson (json, 'https://example.com' );
100126
101127 expect (response.festivals.length, 1 );
102128 expect (response.version, '1.0.0' );
@@ -120,7 +146,7 @@ void main() {
120146 'default_festival_id' : 'cbfw2025' ,
121147 };
122148
123- final response = FestivalsResponse .fromJson (json);
149+ final response = FestivalsResponse .fromJson (json, 'https://example.com' );
124150
125151 expect (response.defaultFestival, isNotNull);
126152 expect (response.defaultFestival! .id, 'cbfw2025' );
@@ -138,7 +164,7 @@ void main() {
138164 'default_festival_id' : 'nonexistent' ,
139165 };
140166
141- final response = FestivalsResponse .fromJson (json);
167+ final response = FestivalsResponse .fromJson (json, 'https://example.com' );
142168
143169 expect (response.defaultFestival, isNotNull);
144170 expect (response.defaultFestival! .id, 'cbf2025' );
@@ -150,7 +176,7 @@ void main() {
150176 'default_festival_id' : 'cbf2025' ,
151177 };
152178
153- final response = FestivalsResponse .fromJson (json);
179+ final response = FestivalsResponse .fromJson (json, 'https://example.com' );
154180
155181 expect (response.defaultFestival, isNull);
156182 });
@@ -180,7 +206,7 @@ void main() {
180206 'default_festival_id' : 'cbf2025' ,
181207 };
182208
183- final response = FestivalsResponse .fromJson (json);
209+ final response = FestivalsResponse .fromJson (json, 'https://example.com' );
184210 final activeFestivals = response.activeFestivals;
185211
186212 expect (activeFestivals.length, 2 );
@@ -202,7 +228,7 @@ void main() {
202228 'default_festival_id' : 'cbf2024' ,
203229 };
204230
205- final response = FestivalsResponse .fromJson (json);
231+ final response = FestivalsResponse .fromJson (json, 'https://example.com' );
206232
207233 expect (response.activeFestivals, isEmpty);
208234 });
0 commit comments