summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas O'Donnell <andytom@users.noreply.github.com>2021-01-26 22:46:17 +0100
committerGitHub <noreply@github.com>2021-01-26 22:46:17 +0100
commit762ad12698a6e94c6ee87ef6eb5ac9f08d25b40f (patch)
tree7e4da2125f80bfd1f6185f48b4d3bca7f15cf370
parente23f0f7605710391c72eb937037c7d64796c4d76 (diff)
test(docker_context): Add basic tests to module (#2205)
* test(docker_context): Add basic tests to module This adds some basic tests to the docker_context module. * PR suggestion
-rw-r--r--docs/config/README.md4
-rw-r--r--src/modules/docker_context.rs185
2 files changed, 187 insertions, 2 deletions
diff --git a/docs/config/README.md b/docs/config/README.md
index c9c0adb1a..533de1e31 100644
--- a/docs/config/README.md
+++ b/docs/config/README.md
@@ -716,8 +716,8 @@ The `docker_context` module shows the currently active
| `format` | `"via [$symbol$context]($style) "` | The format for the module. |
| `symbol` | `"🐳 "` | The symbol used before displaying the Docker context. |
| `style` | `"blue bold"` | The style for the module. |
-| `only_with_files` | `false` | Only show when there's a `docker-compose.yml`, `docker-compose.yaml`, or `Dockerfile` in the current directory. |
-| `disabled` | `true` | Disables the `docker_context` module. |
+| `only_with_files` | `true` | Only show when there's a `docker-compose.yml`, `docker-compose.yaml`, or `Dockerfile` in the current directory. |
+| `disabled` | `false` | Disables the `docker_context` module. |
### Variables
diff --git a/src/modules/docker_context.rs b/src/modules/docker_context.rs
index c30a6bdf5..23840888b 100644
--- a/src/modules/docker_context.rs
+++ b/src/modules/docker_context.rs
@@ -77,3 +77,188 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
_ => None,
}
}
+
+#[cfg(test)]
+mod tests {
+ use crate::test::ModuleRenderer;
+ use ansi_term::Color;
+ use std::fs::File;
+ use std::io::{self, Write};
+
+ #[test]
+ fn only_trigger_when_docker_config_exists() -> io::Result<()> {
+ let cfg_dir = tempfile::tempdir()?;
+ let actual = ModuleRenderer::new("docker_context")
+ .env("DOCKER_CONFIG", cfg_dir.path().to_string_lossy())
+ .collect();
+ let expected = None;
+
+ assert_eq!(expected, actual);
+ cfg_dir.close()
+ }
+
+ #[test]
+ fn test_with_docker_compose_yml() -> io::Result<()> {
+ let cfg_dir = tempfile::tempdir()?;
+ let cfg_file = cfg_dir.path().join("config.json");
+
+ let pwd = tempfile::tempdir()?;
+ File::create(pwd.path().join("docker-compose.yml"))?.sync_all()?;
+
+ let config_content = serde_json::json!({
+ "currentContext": "starship"
+ });
+
+ let mut docker_config = File::create(&cfg_file)?;
+ docker_config.write_all(config_content.to_string().as_bytes())?;
+ docker_config.sync_all()?;
+
+ let actual = ModuleRenderer::new("docker_context")
+ .env("DOCKER_CONFIG", cfg_dir.path().to_string_lossy())
+ .path(pwd.path())
+ .collect();
+
+ let expected = Some(format!("via {} ", Color::Blue.bold().paint("🐳 starship")));
+
+ assert_eq!(expected, actual);
+
+ cfg_dir.close()?;
+ pwd.close()
+ }
+
+ #[test]
+ fn test_with_docker_compose_yaml() -> io::Result<()> {
+ let cfg_dir = tempfile::tempdir()?;
+ let cfg_file = cfg_dir.path().join("config.json");
+
+ let pwd = tempfile::tempdir()?;
+ File::create(pwd.path().join("docker-compose.yaml"))?.sync_all()?;
+
+ let config_content = serde_json::json!({
+ "currentContext": "starship"
+ });
+
+ let mut docker_config = File::create(&cfg_file)?;
+ docker_config.write_all(config_content.to_string().as_bytes())?;
+ docker_config.sync_all()?;
+
+ let actual = ModuleRenderer::new("docker_context")
+ .env("DOCKER_CONFIG", cfg_dir.path().to_string_lossy())
+ .path(pwd.path())
+ .collect();
+
+ let expected = Some(format!("via {} ", Color::Blue.bold().paint("🐳 starship")));
+
+ assert_eq!(expected, actual);
+
+ cfg_dir.close()?;
+ pwd.close()
+ }
+
+ #[test]
+ fn test_with_dockerfile() -> io::Result<()> {
+ let cfg_dir = tempfile::tempdir()?;
+ let cfg_file = cfg_dir.path().join("config.json");
+
+ let pwd = tempfile::tempdir()?;
+ File::create(pwd.path().join("Dockerfile"))?.sync_all()?;
+
+ let config_content = serde_json::json!({
+ "currentContext": "starship"
+ });
+
+ let mut docker_config = File::create(&cfg_file)?;
+ docker_config.write_all(config_content.to_string().as_bytes())?;
+ docker_config.sync_all()?;
+
+ let actual = ModuleRenderer::new("docker_context")
+ .env("DOCKER_CONFIG", cfg_dir.path().to_string_lossy())
+ .path(pwd.path())
+ .collect();
+
+ let expected = Some(format!("via {} ", Color::Blue.bold().paint("🐳 starship")));
+
+ assert_eq!(expected, actual);
+
+ cfg_dir.close()?;
+ pwd.close()
+ }
+
+ #[test]
+ fn test_no_docker_files() -> io::Result<()> {
+ let cfg_dir = tempfile::tempdir()?;
+ let cfg_file = cfg_dir.path().join("config.json");
+
+ let config_content = serde_json::json!({
+ "currentContext": "starship"
+ });
+
+ let mut docker_config = File::create(&cfg_file)?;
+ docker_config.write_all(config_content.to_string().as_bytes())?;
+ docker_config.sync_all()?;
+
+ let actual = ModuleRenderer::new("docker_context")
+ .env("DOCKER_CONFIG", cfg_dir.path().to_string_lossy())
+ .collect();
+
+ let expected = None;
+
+ assert_eq!(expected, actual);
+
+ cfg_dir.close()
+ }
+
+ #[test]
+ fn test_no_scan_for_docker_files() -> io::Result<()> {
+ let cfg_dir = tempfile::tempdir()?;
+ let cfg_file = cfg_dir.path().join("config.json");
+
+ let config_content = serde_json::json!({
+ "currentContext": "starship"
+ });
+
+ let mut docker_config = File::create(&cfg_file)?;
+ docker_config.write_all(config_content.to_string().as_bytes())?;
+ docker_config.sync_all()?;
+
+ let actual = ModuleRenderer::new("docker_context")
+ .env("DOCKER_CONFIG", cfg_dir.path().to_string_lossy())
+ .config(toml::toml! {
+ [docker_context]
+ only_with_files = false
+ })
+ .collect();
+
+ let expected = Some(format!("via {} ", Color::Blue.bold().paint("🐳 starship")));
+
+ assert_eq!(expected, actual);
+
+ cfg_dir.close()
+ }
+
+ #[test]
+ fn test_invalid_json() -> io::Result<()> {
+ let cfg_dir = tempfile::tempdir()?;
+ let cfg_file = cfg_dir.path().join("config.json");
+
+ let config_content = "not valid json";
+
+ let mut docker_config = File::create(&cfg_file)?;
+ docker_config.write_all(config_content.to_string().as_bytes())?;
+ docker_config.sync_all()?;
+
+ let actual = ModuleRenderer::new("docker_context")
+ .env("DOCKER_CONFIG", cfg_dir.path().to_string_lossy())
+ .config(toml::toml! {
+ [docker_context]
+ only_with_files = false
+ })
+ .collect();
+
+ let expected = None;
+
+ assert_eq!(expected, actual);
+
+ cfg_dir.close()
+ }
+}