Add test scenario
This commit is contained in:
		@@ -378,6 +378,7 @@ mod test {
 | 
			
		||||
    use crate::energy::consumption::EnergyConsumption;
 | 
			
		||||
    use crate::energy::engine::EnergyEngine;
 | 
			
		||||
    use crate::utils::time_utils::time_secs;
 | 
			
		||||
    use rust_embed::Embed;
 | 
			
		||||
 | 
			
		||||
    #[derive(serde::Deserialize)]
 | 
			
		||||
    struct TestRelayState {
 | 
			
		||||
@@ -442,22 +443,38 @@ mod test {
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn run_test(conf: &str) {
 | 
			
		||||
    fn run_test(name: &str, conf: &str) {
 | 
			
		||||
        let (devices, mut energy_engine, consumption, states) = parse_test_config(conf);
 | 
			
		||||
 | 
			
		||||
        energy_engine.refresh(consumption, &devices);
 | 
			
		||||
 | 
			
		||||
        for d in states {
 | 
			
		||||
            for r in d.relays {
 | 
			
		||||
                assert_eq!(energy_engine.relay_state(r.id).on, r.should_be_on);
 | 
			
		||||
        for (device_s, device) in states.iter().zip(&devices) {
 | 
			
		||||
            for (relay_s, relay) in device_s.relays.iter().zip(&device.relays) {
 | 
			
		||||
                let is_on = energy_engine.relay_state(relay_s.id).on;
 | 
			
		||||
 | 
			
		||||
                assert_eq!(
 | 
			
		||||
                    energy_engine.relay_state(relay_s.id).on,
 | 
			
		||||
                    relay_s.should_be_on,
 | 
			
		||||
                    "For test {name} on relay {} got state {is_on} instead of {}",
 | 
			
		||||
                    relay.name,
 | 
			
		||||
                    relay_s.should_be_on
 | 
			
		||||
                );
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn test_basic_conf() {
 | 
			
		||||
        run_test(include_str!("../../engine_test/test_basic_conf.yaml"))
 | 
			
		||||
    }
 | 
			
		||||
    #[derive(Embed)]
 | 
			
		||||
    #[folder = "engine_test/"]
 | 
			
		||||
    struct Asset;
 | 
			
		||||
 | 
			
		||||
    // TODO : test more scenarios
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn test_confs() {
 | 
			
		||||
        for file in Asset::iter() {
 | 
			
		||||
            let content = Asset::get(&file).unwrap();
 | 
			
		||||
 | 
			
		||||
            log::info!("Testing {file}");
 | 
			
		||||
 | 
			
		||||
            run_test(&file, &String::from_utf8(content.data.to_vec()).unwrap())
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user