Files
rota/src-tauri/tests/integration.rs

111 lines
3.7 KiB
Rust

mod common;
#[cfg(test)]
mod integration_tests {
use crate::common::validate_all_constraints;
use rota_lib::{
config::UserConfig,
fixtures::{
complex_config, hard_config, manual_shifts_heavy_config, maximal_config, minimal_config,
},
schedule::MonthlySchedule,
scheduler::Scheduler,
workload::WorkloadTracker,
};
use rstest::rstest;
#[ctor::ctor]
fn global_setup() {
env_logger::builder()
.filter_level(log::LevelFilter::Info)
.init();
}
#[rstest]
fn test_minimal_config(minimal_config: UserConfig) -> anyhow::Result<()> {
let mut schedule = MonthlySchedule::new();
let mut tracker = WorkloadTracker::default();
let scheduler = Scheduler::new_with_config(minimal_config.clone());
let solved = scheduler.run(&mut schedule, &mut tracker)?;
println!("{}", schedule.report(&minimal_config, &tracker));
assert!(solved);
validate_all_constraints(&schedule, &tracker, &minimal_config);
Ok(())
}
#[rstest]
fn test_maximal_config(maximal_config: UserConfig) -> anyhow::Result<()> {
let mut schedule = MonthlySchedule::new();
let mut tracker = WorkloadTracker::default();
let scheduler = Scheduler::new_with_config(maximal_config.clone());
let solved = scheduler.run(&mut schedule, &mut tracker)?;
println!("{}", schedule.report(&maximal_config, &tracker));
assert!(solved);
validate_all_constraints(&schedule, &tracker, &maximal_config);
Ok(())
}
#[rstest]
fn test_manual_shifts_heavy_config(
manual_shifts_heavy_config: UserConfig,
) -> anyhow::Result<()> {
let mut schedule = MonthlySchedule::new();
let mut tracker = WorkloadTracker::default();
let scheduler = Scheduler::new_with_config(manual_shifts_heavy_config.clone());
let solved = scheduler.run(&mut schedule, &mut tracker)?;
println!("{}", schedule.report(&manual_shifts_heavy_config, &tracker));
assert!(solved);
validate_all_constraints(&schedule, &tracker, &manual_shifts_heavy_config);
Ok(())
}
#[rstest]
fn test_complex_config(complex_config: UserConfig) -> anyhow::Result<()> {
let mut schedule = MonthlySchedule::new();
let mut tracker = WorkloadTracker::default();
let scheduler = Scheduler::new_with_config(complex_config.clone());
let solved = scheduler.run(&mut schedule, &mut tracker)?;
println!("{}", schedule.report(&complex_config, &tracker));
assert!(solved);
validate_all_constraints(&schedule, &tracker, &complex_config);
Ok(())
}
#[rstest]
fn test_hard_config(hard_config: UserConfig) -> anyhow::Result<()> {
let mut schedule = MonthlySchedule::new();
let mut tracker = WorkloadTracker::default();
let scheduler = Scheduler::new_with_config(hard_config.clone());
let solved = scheduler.run(&mut schedule, &mut tracker)?;
println!("{}", schedule.report(&hard_config, &tracker));
assert!(solved);
validate_all_constraints(&schedule, &tracker, &hard_config);
Ok(())
}
#[rstest]
fn test_export_pipeline(minimal_config: UserConfig) -> anyhow::Result<()> {
let mut schedule = MonthlySchedule::new();
let mut tracker = WorkloadTracker::default();
let scheduler = Scheduler::new_with_config(minimal_config.clone());
assert!(scheduler.run(&mut schedule, &mut tracker)?);
schedule.export_as_docx(&minimal_config)?;
let metadata = std::fs::metadata("rota.docx")?;
assert!(metadata.len() > 0);
std::fs::remove_file("rota.docx")?;
Ok(())
}
}