From 601ebdb9d93e9a5b76424b2b8f24ed5064a1a262 Mon Sep 17 00:00:00 2001 From: Dan Davison Date: Fri, 20 Aug 2021 17:55:15 -0700 Subject: Add failing test that gitconfig insteadOf is honored See #693 --- src/features/hyperlinks.rs | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'src') diff --git a/src/features/hyperlinks.rs b/src/features/hyperlinks.rs index 2d3ad3b0..2dad4a9d 100644 --- a/src/features/hyperlinks.rs +++ b/src/features/hyperlinks.rs @@ -110,3 +110,44 @@ fn format_commit_line_captures_with_osc8_commit_hyperlink( fn format_github_commit_url(commit: &str, github_repo: &str) -> String { format!("https://github.com/{}/commit/{}", github_repo, commit) } + +#[cfg(test)] +mod tests { + use std::fs::remove_file; + + use super::format_commit_line_with_osc8_commit_hyperlink; + use crate::tests::integration_test_utils; + + #[test] + fn test_commit_hyperlink_honors_insteadof() { + let git_config_contents = br#" +[remote "origin"] + url = github:dandavison/delta + fetch = +refs/heads/*:refs/remotes/origin/* +[url "https://github.com/"] + insteadOf = github: +[url "ssh://git@github.com/"] + pushInsteadOf = github: + insteadOf = githubpriv: +"#; + let git_config_path = "delta__test_commit_hyperlink_honors_insteadof"; + let config = integration_test_utils::make_config_from_args_and_git_config( + &[], + Some(git_config_contents), + Some(git_config_path), + ); + let hash = "342016d0a69d8361dc17396d9a441704416eb7bb"; + let line = format!("commit {}", hash); + // TODO: This doesn't work because a git2::Repository is needed in order + // to compute the remote URL but we do not actually have a repositoty + // since the utility make_config_from_args_and_git_config creates a + // GitConfig struct with a null Repository. + let formatted = format_commit_line_with_osc8_commit_hyperlink(&line, &config); + assert!(formatted.contains(&format!( + "https://github.com/dandavison/delta/commit/{}", + hash + ))); + + remove_file(git_config_path).unwrap(); + } +} -- cgit v1.2.3