Add test for database updating program
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				continuous-integration/drone/push Build is passing
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	continuous-integration/drone/push Build is passing
				
			This commit is contained in:
		
							parent
							
								
									a998b3856b
								
							
						
					
					
						commit
						1abdad7113
					
				| @ -157,3 +157,55 @@ VALUES (?1, ?2, ?3, ?4);"; | ||||
|     save.commit()?; | ||||
|     Ok(()) | ||||
| } | ||||
| 
 | ||||
| #[cfg(test)] | ||||
| mod test { | ||||
|     use super::*; | ||||
|     use crate::create_migrations; | ||||
|     use rusqlite::Connection; | ||||
|     use sprinklers_core::schedule::Duration; | ||||
|     use std::sync::Arc; | ||||
|     use tracing::{debug, trace}; | ||||
| 
 | ||||
|     #[test] | ||||
|     fn test_update_program() { | ||||
|         let mut db_conn = Connection::open_in_memory().unwrap(); | ||||
| 
 | ||||
|         let migs = create_migrations(); | ||||
|         migs.apply(&mut db_conn).unwrap(); | ||||
| 
 | ||||
|         let mut programs = query_programs(&db_conn).unwrap(); | ||||
| 
 | ||||
|         // HACK: ideally ordmap would have iter_mut()
 | ||||
|         let program_ids: Vec<_> = programs.keys().cloned().collect(); | ||||
|         let mut trans = db_conn.transaction().unwrap(); | ||||
|         for prog_id in program_ids { | ||||
|             let prog = &mut programs[&prog_id]; | ||||
|             let prog = Arc::make_mut(prog); | ||||
|             debug!(program = debug(&prog), "read program"); | ||||
|             for _ in 0..1000 { | ||||
|                 let mut schedule = prog.schedule.clone(); | ||||
|                 if let Some(time) = schedule.times.get_mut(0) { | ||||
|                     *time += Duration::seconds(5); | ||||
|                 } | ||||
|                 let mut sequence = prog.sequence.clone(); | ||||
|                 for item in &mut sequence { | ||||
|                     item.duration += std::time::Duration::from_secs(1); | ||||
|                 } | ||||
|                 let prog_update = ProgramUpdateData { | ||||
|                     schedule: Some(schedule), | ||||
|                     sequence: Some(sequence), | ||||
|                     ..ProgramUpdateData::default() | ||||
|                 }; | ||||
|                 trace!("about to update"); | ||||
|                 update_program(&mut trans, prog.id, &prog_update).unwrap(); | ||||
|                 trace!("updated, now querying"); | ||||
|                 *prog = query_program_by_id(&*trans, prog.id).unwrap(); | ||||
|                 trace!("updated program: {:?}", &prog); | ||||
|             } | ||||
|             debug!("updated program: {:?}", &prog); | ||||
|         } | ||||
|         trans.commit().unwrap(); | ||||
|         debug!("committed final transaction"); | ||||
|     } | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user