//! ref: composer/tests/Composer/Test/Util/UrlTest.php use indexmap::IndexMap; use shirabe::config::Config; use shirabe::util::url::Url; use shirabe_php_shim::PhpMixed; fn conf(entries: &[(&str, &[&str])]) -> IndexMap { entries .iter() .map(|(k, vals)| { ( k.to_string(), PhpMixed::List(vals.iter().map(|v| PhpMixed::String(v.to_string())).collect()), ) }) .collect() } #[test] #[ignore = "update_dist_reference uses a regex pattern the regex crate cannot compile"] fn test_update_dist_reference() { for (url, expected_url, c, r#ref) in dist_refs_provider() { let mut config = Config::new(true, None); let mut merged: IndexMap = IndexMap::new(); merged.insert("config".to_string(), PhpMixed::Array(c)); config.merge(&merged, Config::SOURCE_UNKNOWN); assert_eq!( expected_url, Url::update_dist_reference(&config, url.to_string(), r#ref) ); } } fn dist_refs_provider() -> Vec<(&'static str, &'static str, IndexMap, &'static str)> { vec![ // github ("https://github.com/foo/bar/zipball/abcd", "https://api.github.com/repos/foo/bar/zipball/newref", conf(&[]), "newref"), ("https://www.github.com/foo/bar/zipball/abcd", "https://api.github.com/repos/foo/bar/zipball/newref", conf(&[]), "newref"), ("https://github.com/foo/bar/archive/abcd.zip", "https://api.github.com/repos/foo/bar/zipball/newref", conf(&[]), "newref"), ("https://github.com/foo/bar/archive/abcd.tar.gz", "https://api.github.com/repos/foo/bar/tarball/newref", conf(&[]), "newref"), ("https://api.github.com/repos/foo/bar/tarball", "https://api.github.com/repos/foo/bar/tarball/newref", conf(&[]), "newref"), ("https://api.github.com/repos/foo/bar/tarball/abcd", "https://api.github.com/repos/foo/bar/tarball/newref", conf(&[]), "newref"), // github enterprise ("https://mygithub.com/api/v3/repos/foo/bar/tarball/abcd", "https://mygithub.com/api/v3/repos/foo/bar/tarball/newref", conf(&[("github-domains", &["mygithub.com"])]), "newref"), // bitbucket ("https://bitbucket.org/foo/bar/get/abcd.zip", "https://bitbucket.org/foo/bar/get/newref.zip", conf(&[]), "newref"), ("https://www.bitbucket.org/foo/bar/get/abcd.tar.bz2", "https://bitbucket.org/foo/bar/get/newref.tar.bz2", conf(&[]), "newref"), // gitlab ("https://gitlab.com/api/v4/projects/foo%2Fbar/repository/archive.zip?sha=abcd", "https://gitlab.com/api/v4/projects/foo%2Fbar/repository/archive.zip?sha=newref", conf(&[]), "newref"), ("https://www.gitlab.com/api/v4/projects/foo%2Fbar/repository/archive.zip?sha=abcd", "https://gitlab.com/api/v4/projects/foo%2Fbar/repository/archive.zip?sha=newref", conf(&[]), "newref"), ("https://gitlab.com/api/v3/projects/foo%2Fbar/repository/archive.tar.gz?sha=abcd", "https://gitlab.com/api/v4/projects/foo%2Fbar/repository/archive.tar.gz?sha=newref", conf(&[]), "newref"), // gitlab enterprise ("https://mygitlab.com/api/v4/projects/foo%2Fbar/repository/archive.tar.gz?sha=abcd", "https://mygitlab.com/api/v4/projects/foo%2Fbar/repository/archive.tar.gz?sha=newref", conf(&[("gitlab-domains", &["mygitlab.com"])]), "newref"), ("https://mygitlab.com/api/v3/projects/foo%2Fbar/repository/archive.tar.bz2?sha=abcd", "https://mygitlab.com/api/v3/projects/foo%2Fbar/repository/archive.tar.bz2?sha=newref", conf(&[("gitlab-domains", &["mygitlab.com"])]), "newref"), ("https://mygitlab.com/api/v3/projects/foo%2Fbar/repository/archive.tar.bz2?sha=abcd", "https://mygitlab.com/api/v3/projects/foo%2Fbar/repository/archive.tar.bz2?sha=65", conf(&[("gitlab-domains", &["mygitlab.com"])]), "65"), ] } #[test] #[ignore = "Url::sanitize uses a regex pattern the regex crate cannot compile"] fn test_sanitize() { for (expected, url) in sanitize_provider() { assert_eq!(expected, Url::sanitize(url.to_string())); } } fn sanitize_provider() -> Vec<(&'static str, &'static str)> { vec![ // with scheme ("https://foo:***@example.org/", "https://foo:bar@example.org/"), ("https://foo@example.org/", "https://foo@example.org/"), ("https://example.org/", "https://example.org/"), ("http://***:***@example.org", "http://10a8f08e8d7b7b9:foo@example.org"), ("https://foo:***@example.org:123/", "https://foo:bar@example.org:123/"), ("https://example.org/foo/bar?access_token=***", "https://example.org/foo/bar?access_token=abcdef"), ("https://example.org/foo/bar?foo=bar&access_token=***", "https://example.org/foo/bar?foo=bar&access_token=abcdef"), ("https://***:***@github.com/acme/repo", "https://ghp_1234567890abcdefghijklmnopqrstuvwxyzAB:x-oauth-basic@github.com/acme/repo"), ("https://***:***@github.com/acme/repo", "https://github_pat_1234567890abcdefghijkl_1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW:x-oauth-basic@github.com/acme/repo"), // without scheme ("foo:***@example.org/", "foo:bar@example.org/"), ("foo@example.org/", "foo@example.org/"), ("example.org/", "example.org/"), ("***:***@example.org", "10a8f08e8d7b7b9:foo@example.org"), ("foo:***@example.org:123/", "foo:bar@example.org:123/"), ("example.org/foo/bar?access_token=***", "example.org/foo/bar?access_token=abcdef"), ("example.org/foo/bar?foo=bar&access_token=***", "example.org/foo/bar?foo=bar&access_token=abcdef"), ] }