@@ -192,270 +192,3 @@ impl Validate for Vehicle {
192192 }
193193 }
194194}
195-
196- #[ cfg( test) ]
197- mod tests {
198- use super :: * ;
199- use crate :: domain:: enums:: { ConnectorType , Drivetrain , PortKind , RangeCycle , SourceType } ;
200- use crate :: domain:: range:: RangeRated ;
201-
202- fn create_test_vehicle ( ) -> Vehicle {
203- Vehicle {
204- schema_url : None ,
205- schema_version : "1.0.0" . to_string ( ) ,
206- make : SlugName {
207- slug : "tesla" . to_string ( ) ,
208- name : "Tesla" . to_string ( ) ,
209- } ,
210- model : SlugName {
211- slug : "model_3" . to_string ( ) ,
212- name : "Model 3" . to_string ( ) ,
213- } ,
214- year : 2024 ,
215- trim : SlugName {
216- slug : "base" . to_string ( ) ,
217- name : "Base" . to_string ( ) ,
218- } ,
219- vehicle_type : VehicleType :: PassengerCar ,
220- powertrain : Powertrain {
221- drivetrain : Drivetrain :: Rwd ,
222- system_power_kw : Some ( 208.0 ) ,
223- system_torque_nm : Some ( 420.0 ) ,
224- motors : None ,
225- transmission : None ,
226- } ,
227- battery : Battery {
228- pack_capacity_kwh_net : Some ( 60.0 ) ,
229- ..Default :: default ( )
230- } ,
231- charge_ports : vec ! [ ChargePort {
232- kind: PortKind :: Combo ,
233- connector: ConnectorType :: Ccs2 ,
234- location: None ,
235- covers: None ,
236- light: None ,
237- motorized: None ,
238- notes: None ,
239- } ] ,
240- charging : Charging :: default ( ) ,
241- range : Range {
242- rated : vec ! [ RangeRated {
243- cycle: RangeCycle :: Wltp ,
244- range_km: 513.0 ,
245- notes: None ,
246- } ] ,
247- real_world : None ,
248- } ,
249- sources : vec ! [ Source {
250- source_type: SourceType :: Oem ,
251- title: "Tesla Model 3 Specs" . to_string( ) ,
252- url: "https://tesla.com/model3" . to_string( ) ,
253- accessed_at: "2024-12-26T00:00:00Z" . to_string( ) ,
254- publisher: None ,
255- license: None ,
256- notes: None ,
257- } ] ,
258- unique_code : None ,
259- variant : None ,
260- markets : None ,
261- availability : None ,
262- body : None ,
263- dimensions : None ,
264- weights : None ,
265- capacity : None ,
266- v2x : None ,
267- efficiency : None ,
268- performance : None ,
269- wheels_tires : None ,
270- pricing : None ,
271- software : None ,
272- links : None ,
273- images : None ,
274- metadata : None ,
275- }
276- }
277-
278- #[ test]
279- fn test_vehicle_validation_success ( ) {
280- let vehicle = create_test_vehicle ( ) ;
281- assert ! ( vehicle. validate( ) . is_ok( ) ) ;
282- }
283-
284- #[ test]
285- fn test_vehicle_display_name ( ) {
286- let vehicle = create_test_vehicle ( ) ;
287- assert_eq ! ( vehicle. display_name( ) , "2024 Tesla Model 3 Base" ) ;
288- }
289-
290- #[ test]
291- fn test_vehicle_id ( ) {
292- let vehicle = create_test_vehicle ( ) ;
293- let id = vehicle. id ( ) ;
294- assert_eq ! ( id. to_string( ) , "tesla:model_3:2024:base" ) ;
295- }
296-
297- #[ test]
298- fn test_vehicle_missing_battery ( ) {
299- let mut vehicle = create_test_vehicle ( ) ;
300- vehicle. battery = Battery :: default ( ) ;
301- assert ! ( matches!(
302- vehicle. validate( ) ,
303- Err ( ValidationError :: MissingBatteryCapacity )
304- ) ) ;
305- }
306-
307- #[ test]
308- fn test_vehicle_missing_charge_ports ( ) {
309- let mut vehicle = create_test_vehicle ( ) ;
310- vehicle. charge_ports = vec ! [ ] ;
311- assert ! ( matches!(
312- vehicle. validate( ) ,
313- Err ( ValidationError :: MissingChargePort )
314- ) ) ;
315- }
316-
317- #[ test]
318- fn test_vehicle_missing_range ( ) {
319- let mut vehicle = create_test_vehicle ( ) ;
320- vehicle. range . rated = vec ! [ ] ;
321- assert ! ( matches!(
322- vehicle. validate( ) ,
323- Err ( ValidationError :: MissingRatedRange )
324- ) ) ;
325- }
326-
327- #[ test]
328- fn test_vehicle_missing_sources ( ) {
329- let mut vehicle = create_test_vehicle ( ) ;
330- vehicle. sources = vec ! [ ] ;
331- assert ! ( matches!(
332- vehicle. validate( ) ,
333- Err ( ValidationError :: MissingSource )
334- ) ) ;
335- }
336-
337- #[ test]
338- fn test_vehicle_multiple_validation_errors ( ) {
339- let mut vehicle = create_test_vehicle ( ) ;
340- vehicle. battery = Battery :: default ( ) ;
341- vehicle. charge_ports = vec ! [ ] ;
342- vehicle. range . rated = vec ! [ ] ;
343- vehicle. sources = vec ! [ ] ;
344- assert ! ( matches!(
345- vehicle. validate( ) ,
346- Err ( ValidationError :: Multiple ( _) )
347- ) ) ;
348- }
349-
350- #[ test]
351- fn test_vehicle_is_variant_false ( ) {
352- let vehicle = create_test_vehicle ( ) ;
353- assert ! ( !vehicle. is_variant( ) ) ;
354- }
355-
356- #[ test]
357- fn test_vehicle_is_variant_true ( ) {
358- let mut vehicle = create_test_vehicle ( ) ;
359- vehicle. variant = Some ( Variant {
360- slug : "long_range" . to_string ( ) ,
361- name : "Long Range" . to_string ( ) ,
362- kind : None ,
363- notes : None ,
364- } ) ;
365- assert ! ( vehicle. is_variant( ) ) ;
366- }
367-
368- #[ test]
369- fn test_vehicle_usable_battery_kwh ( ) {
370- let vehicle = create_test_vehicle ( ) ;
371- assert_eq ! ( vehicle. usable_battery_kwh( ) , Some ( 60.0 ) ) ;
372- }
373-
374- #[ test]
375- fn test_vehicle_usable_battery_kwh_none ( ) {
376- let mut vehicle = create_test_vehicle ( ) ;
377- vehicle. battery = Battery :: default ( ) ;
378- assert_eq ! ( vehicle. usable_battery_kwh( ) , None ) ;
379- }
380-
381- #[ test]
382- fn test_vehicle_wltp_range_km ( ) {
383- let vehicle = create_test_vehicle ( ) ;
384- assert_eq ! ( vehicle. wltp_range_km( ) , Some ( 513.0 ) ) ;
385- }
386-
387- #[ test]
388- fn test_vehicle_epa_range_km_none ( ) {
389- let vehicle = create_test_vehicle ( ) ;
390- assert_eq ! ( vehicle. epa_range_km( ) , None ) ;
391- }
392-
393- #[ test]
394- fn test_vehicle_epa_range_km_some ( ) {
395- let mut vehicle = create_test_vehicle ( ) ;
396- vehicle. range . rated . push ( RangeRated {
397- cycle : RangeCycle :: Epa ,
398- range_km : 400.0 ,
399- notes : None ,
400- } ) ;
401- assert_eq ! ( vehicle. epa_range_km( ) , Some ( 400.0 ) ) ;
402- }
403-
404- #[ test]
405- fn test_vehicle_max_dc_power_kw_none ( ) {
406- let vehicle = create_test_vehicle ( ) ;
407- assert_eq ! ( vehicle. max_dc_power_kw( ) , None ) ;
408- }
409-
410- #[ test]
411- fn test_vehicle_max_dc_power_kw_some ( ) {
412- use crate :: domain:: charging:: ChargingDc ;
413- let mut vehicle = create_test_vehicle ( ) ;
414- vehicle. charging . dc = Some ( ChargingDc {
415- max_power_kw : 250.0 ,
416- voltage_range_v : None ,
417- max_current_a : None ,
418- architecture_voltage_class : None ,
419- power_limits_by_voltage : None ,
420- notes : None ,
421- } ) ;
422- assert_eq ! ( vehicle. max_dc_power_kw( ) , Some ( 250.0 ) ) ;
423- }
424-
425- #[ test]
426- fn test_vehicle_max_ac_power_kw_none ( ) {
427- let vehicle = create_test_vehicle ( ) ;
428- assert_eq ! ( vehicle. max_ac_power_kw( ) , None ) ;
429- }
430-
431- #[ test]
432- fn test_vehicle_max_ac_power_kw_some ( ) {
433- use crate :: domain:: charging:: ChargingAc ;
434- let mut vehicle = create_test_vehicle ( ) ;
435- vehicle. charging . ac = Some ( ChargingAc {
436- max_power_kw : 11.0 ,
437- supported_power_steps_kw : None ,
438- phases : None ,
439- voltage_range_v : None ,
440- frequency_hz : None ,
441- max_current_a : None ,
442- onboard_charger_count : None ,
443- notes : None ,
444- } ) ;
445- assert_eq ! ( vehicle. max_ac_power_kw( ) , Some ( 11.0 ) ) ;
446- }
447-
448- #[ test]
449- fn test_vehicle_invalid_make_slug ( ) {
450- let mut vehicle = create_test_vehicle ( ) ;
451- vehicle. make . slug = "INVALID" . to_string ( ) ;
452- assert ! ( vehicle. validate( ) . is_err( ) ) ;
453- }
454-
455- #[ test]
456- fn test_vehicle_invalid_year ( ) {
457- let mut vehicle = create_test_vehicle ( ) ;
458- vehicle. year = 1800 ;
459- assert ! ( vehicle. validate( ) . is_err( ) ) ;
460- }
461- }
0 commit comments