diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6251041..c1dcef1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -43,6 +43,20 @@ jobs: toolchain: stable override: true + - name: Prep environment to test compiled-in paths + run: | + mkdir /tmp/cheats-dir + touch /tmp/config-file + + - name: Run cargo test (with compiled-in paths) + uses: actions-rs/cargo@v1 + continue-on-error: false + env: + NAVI_CHEATS_DIRECTORY: /tmp/cheats-dir + NAVI_CONFIG_FILE: /tmp/config-file + with: + command: test + - name: Run cargo test uses: actions-rs/cargo@v1 continue-on-error: false diff --git a/src/filesystem.rs b/src/filesystem.rs index de669d8..407942d 100644 --- a/src/filesystem.rs +++ b/src/filesystem.rs @@ -26,12 +26,30 @@ fn paths_from_path_param(env_var: &str) -> impl Iterator { env_var.split(':').filter(|folder| folder != &"") } +fn compiled_default_path(path: Option<&str>) -> Option { + match path { + Some(path) => { + let path = Path::new(path); + if path.exists() { + Some(path.to_path_buf()) + } else { + None + } + } + None => None, + } +} + pub fn default_cheat_pathbuf() -> Result { let base_dirs = BaseDirs::new().ok_or_else(|| anyhow!("Unable to get base dirs"))?; - let mut pathbuf = PathBuf::from(base_dirs.data_dir()); pathbuf.push("navi"); pathbuf.push("cheats"); + if !pathbuf.exists() { + if let Some(path) = compiled_default_path(option_env!("NAVI_CHEATS_DIRECTORY")) { + pathbuf = path; + } + } Ok(pathbuf) } @@ -41,6 +59,11 @@ pub fn default_config_pathbuf() -> Result { let mut pathbuf = PathBuf::from(base_dirs.config_dir()); pathbuf.push("navi"); pathbuf.push("config.yaml"); + if !pathbuf.exists() { + if let Some(path) = compiled_default_path(option_env!("NAVI_CONFIG_FILE")) { + pathbuf = path; + } + } Ok(pathbuf) } @@ -247,4 +270,38 @@ mod tests { assert_eq!(found, expected) } } + + #[test] + fn test_default_config_pathbuf() { + let base_dirs = BaseDirs::new() + .ok_or(anyhow!("bad")) + .expect("could not determine base directories"); + let mut expect = base_dirs.config_dir().to_path_buf(); + expect.push("navi"); + expect.push("config.yaml"); + let expect = match option_env!("NAVI_CONFIG_FILE") { + Some(path) => path.to_string(), + None => expect.to_string_lossy().to_string(), + }; + let config = default_config_pathbuf().expect("could not find default config path"); + + assert_eq!(expect, config.to_string_lossy().to_string()) + } + + #[test] + fn test_default_cheat_pathbuf() { + let base_dirs = BaseDirs::new() + .ok_or(anyhow!("bad")) + .expect("could not determine base directories"); + let mut expect = base_dirs.data_dir().to_path_buf(); + expect.push("navi"); + expect.push("cheats"); + let expect = match option_env!("NAVI_CHEATS_DIRECTORY") { + Some(path) => path.to_string(), + None => expect.to_string_lossy().to_string(), + }; + let cheats = default_cheat_pathbuf().expect("could not find default config path"); + + assert_eq!(expect, cheats.to_string_lossy().to_string()) + } }