@@ -309,4 +309,149 @@ mod tests {
309309 Err ( ValidationError :: MissingChargePort )
310310 ) ) ;
311311 }
312+
313+ #[ test]
314+ fn test_vehicle_missing_range ( ) {
315+ let mut vehicle = create_test_vehicle ( ) ;
316+ vehicle. range . rated = vec ! [ ] ;
317+ assert ! ( matches!(
318+ vehicle. validate( ) ,
319+ Err ( ValidationError :: MissingRatedRange )
320+ ) ) ;
321+ }
322+
323+ #[ test]
324+ fn test_vehicle_missing_sources ( ) {
325+ let mut vehicle = create_test_vehicle ( ) ;
326+ vehicle. sources = vec ! [ ] ;
327+ assert ! ( matches!(
328+ vehicle. validate( ) ,
329+ Err ( ValidationError :: MissingSource )
330+ ) ) ;
331+ }
332+
333+ #[ test]
334+ fn test_vehicle_multiple_validation_errors ( ) {
335+ let mut vehicle = create_test_vehicle ( ) ;
336+ vehicle. battery = Battery :: default ( ) ;
337+ vehicle. charge_ports = vec ! [ ] ;
338+ vehicle. range . rated = vec ! [ ] ;
339+ vehicle. sources = vec ! [ ] ;
340+ assert ! ( matches!(
341+ vehicle. validate( ) ,
342+ Err ( ValidationError :: Multiple ( _) )
343+ ) ) ;
344+ }
345+
346+ #[ test]
347+ fn test_vehicle_is_variant_false ( ) {
348+ let vehicle = create_test_vehicle ( ) ;
349+ assert ! ( !vehicle. is_variant( ) ) ;
350+ }
351+
352+ #[ test]
353+ fn test_vehicle_is_variant_true ( ) {
354+ let mut vehicle = create_test_vehicle ( ) ;
355+ vehicle. variant = Some ( Variant {
356+ slug : "long_range" . to_string ( ) ,
357+ name : "Long Range" . to_string ( ) ,
358+ kind : None ,
359+ notes : None ,
360+ } ) ;
361+ assert ! ( vehicle. is_variant( ) ) ;
362+ }
363+
364+ #[ test]
365+ fn test_vehicle_usable_battery_kwh ( ) {
366+ let vehicle = create_test_vehicle ( ) ;
367+ assert_eq ! ( vehicle. usable_battery_kwh( ) , Some ( 60.0 ) ) ;
368+ }
369+
370+ #[ test]
371+ fn test_vehicle_usable_battery_kwh_none ( ) {
372+ let mut vehicle = create_test_vehicle ( ) ;
373+ vehicle. battery = Battery :: default ( ) ;
374+ assert_eq ! ( vehicle. usable_battery_kwh( ) , None ) ;
375+ }
376+
377+ #[ test]
378+ fn test_vehicle_wltp_range_km ( ) {
379+ let vehicle = create_test_vehicle ( ) ;
380+ assert_eq ! ( vehicle. wltp_range_km( ) , Some ( 513.0 ) ) ;
381+ }
382+
383+ #[ test]
384+ fn test_vehicle_epa_range_km_none ( ) {
385+ let vehicle = create_test_vehicle ( ) ;
386+ assert_eq ! ( vehicle. epa_range_km( ) , None ) ;
387+ }
388+
389+ #[ test]
390+ fn test_vehicle_epa_range_km_some ( ) {
391+ let mut vehicle = create_test_vehicle ( ) ;
392+ vehicle. range . rated . push ( RangeRated {
393+ cycle : RangeCycle :: Epa ,
394+ range_km : 400.0 ,
395+ notes : None ,
396+ } ) ;
397+ assert_eq ! ( vehicle. epa_range_km( ) , Some ( 400.0 ) ) ;
398+ }
399+
400+ #[ test]
401+ fn test_vehicle_max_dc_power_kw_none ( ) {
402+ let vehicle = create_test_vehicle ( ) ;
403+ assert_eq ! ( vehicle. max_dc_power_kw( ) , None ) ;
404+ }
405+
406+ #[ test]
407+ fn test_vehicle_max_dc_power_kw_some ( ) {
408+ use crate :: domain:: charging:: ChargingDc ;
409+ let mut vehicle = create_test_vehicle ( ) ;
410+ vehicle. charging . dc = Some ( ChargingDc {
411+ max_power_kw : 250.0 ,
412+ voltage_range_v : None ,
413+ max_current_a : None ,
414+ architecture_voltage_class : None ,
415+ power_limits_by_voltage : None ,
416+ notes : None ,
417+ } ) ;
418+ assert_eq ! ( vehicle. max_dc_power_kw( ) , Some ( 250.0 ) ) ;
419+ }
420+
421+ #[ test]
422+ fn test_vehicle_max_ac_power_kw_none ( ) {
423+ let vehicle = create_test_vehicle ( ) ;
424+ assert_eq ! ( vehicle. max_ac_power_kw( ) , None ) ;
425+ }
426+
427+ #[ test]
428+ fn test_vehicle_max_ac_power_kw_some ( ) {
429+ use crate :: domain:: charging:: ChargingAc ;
430+ let mut vehicle = create_test_vehicle ( ) ;
431+ vehicle. charging . ac = Some ( ChargingAc {
432+ max_power_kw : 11.0 ,
433+ supported_power_steps_kw : None ,
434+ phases : None ,
435+ voltage_range_v : None ,
436+ frequency_hz : None ,
437+ max_current_a : None ,
438+ onboard_charger_count : None ,
439+ notes : None ,
440+ } ) ;
441+ assert_eq ! ( vehicle. max_ac_power_kw( ) , Some ( 11.0 ) ) ;
442+ }
443+
444+ #[ test]
445+ fn test_vehicle_invalid_make_slug ( ) {
446+ let mut vehicle = create_test_vehicle ( ) ;
447+ vehicle. make . slug = "INVALID" . to_string ( ) ;
448+ assert ! ( vehicle. validate( ) . is_err( ) ) ;
449+ }
450+
451+ #[ test]
452+ fn test_vehicle_invalid_year ( ) {
453+ let mut vehicle = create_test_vehicle ( ) ;
454+ vehicle. year = 1800 ;
455+ assert ! ( vehicle. validate( ) . is_err( ) ) ;
456+ }
312457}
0 commit comments