1pub mod config;
2pub mod db;
3pub mod docker;
4pub mod error;
5pub mod output;
6pub mod utils;
7
8#[cfg(test)]
9mod tests {
10 use crate::db::{Database, Postgres};
11 use crate::docker::DockerEngine;
12
13 #[test]
21 fn test_postgres_defaults() {
22 let pg = Postgres::default();
23 assert_eq!(pg.name(), "pg-default");
24 assert_eq!(pg.image(), "postgres:15");
25 assert_eq!(pg.port(), 5432);
26 assert_eq!(
27 pg.connection_url(),
28 "postgres://admin:secret@localhost:5432/mypg"
29 );
30 }
31
32 #[test]
33 fn test_postgres_env_vars() {
34 let pg = Postgres::default();
35
36 let env_vars = pg.env_vars();
37
38 assert!(env_vars.contains(&("POSTGRES_USER".into(), "admin".into())));
39 assert!(env_vars.contains(&("POSTGRES_PASSWORD".into(), "secret".into())));
40 assert!(env_vars.contains(&("POSTGRES_DB".into(), "mypg".into())));
41 }
42
43 #[derive(Clone)]
50 struct MockDatabase {
51 name: String,
52
53 image: String,
54 port: u16,
55 }
56
57 impl Database for MockDatabase {
58 fn name(&self) -> &str {
59 &self.name
60 }
61
62 fn image(&self) -> &str {
63 &self.image
64 }
65
66 fn port(&self) -> u16 {
67 self.port
68 }
69
70 fn env_vars(&self) -> Vec<(String, String)> {
71 let mut env_vars = Vec::new();
72 env_vars.push(("POSTGRES_PASSWORD".to_string(), "secret".to_string()));
73 env_vars
74 }
75
76 fn connection_url(&self) -> String {
77 format!("postgres://user:password@localhost:{}/dbname", self.port())
78 }
79
80 fn default() -> Self {
81 MockDatabase {
82 name: "default-db".to_string(),
83 image: "postgres:latest".to_string(),
84
85 port: 5432,
86 }
87 }
88 }
89
90 #[tokio::test]
92 async fn test_docker_engine_creation() {
93 let engine = DockerEngine::new().await;
94 assert!(engine.docker.ping().await.is_ok()); }
96
97 #[tokio::test]
99 async fn test_start_container() {
100 let engine = DockerEngine::new().await;
101 let db = MockDatabase::default(); let result = engine.start_container(db).await;
103
104 assert!(result.is_ok());
105 }
106}