Skip to content

Commit 85dd1bd

Browse files
committed
test(unit): migrate all unit tests to test directory
1 parent 8aad585 commit 85dd1bd

16 files changed

Lines changed: 466 additions & 647 deletions

File tree

crates/ev-core/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ repository.workspace = true
88
rust-version.workspace = true
99
version.workspace = true
1010

11+
[lib]
12+
doctest = false
13+
1114
[dependencies]
1215
chrono.workspace = true
1316
regex.workspace = true

crates/ev-core/src/domain/types.rs

Lines changed: 0 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -149,58 +149,3 @@ impl std::fmt::Display for VehicleId {
149149
}
150150
}
151151
}
152-
153-
#[cfg(test)]
154-
mod tests {
155-
use super::*;
156-
157-
#[test]
158-
fn test_slug_name_valid() {
159-
let slug_name = SlugName::new("tesla", "Tesla").unwrap();
160-
assert_eq!(slug_name.slug(), "tesla");
161-
assert_eq!(slug_name.name(), "Tesla");
162-
}
163-
164-
#[test]
165-
fn test_slug_name_invalid_slug() {
166-
assert!(SlugName::new("Tesla", "Tesla").is_err());
167-
assert!(SlugName::new("", "Tesla").is_err());
168-
}
169-
170-
#[test]
171-
fn test_slug_name_empty_name() {
172-
assert!(SlugName::new("tesla", "").is_err());
173-
}
174-
175-
#[test]
176-
fn test_year_valid() {
177-
assert!(Year::new(2024).is_ok());
178-
assert!(Year::new(1900).is_ok());
179-
assert!(Year::new(2100).is_ok());
180-
}
181-
182-
#[test]
183-
fn test_year_invalid() {
184-
assert!(Year::new(1899).is_err());
185-
assert!(Year::new(2101).is_err());
186-
}
187-
188-
#[test]
189-
fn test_vehicle_id_display() {
190-
let id = VehicleId::new("tesla", "model_3", 2024, "base", None).unwrap();
191-
assert_eq!(id.to_string(), "tesla:model_3:2024:base");
192-
193-
let id_with_variant = VehicleId::new(
194-
"tesla",
195-
"model_3",
196-
2024,
197-
"base",
198-
Some("long_range".to_string()),
199-
)
200-
.unwrap();
201-
assert_eq!(
202-
id_with_variant.to_string(),
203-
"tesla:model_3:2024:base:long_range"
204-
);
205-
}
206-
}

crates/ev-core/src/domain/vehicle.rs

Lines changed: 0 additions & 267 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)