aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-rw-r--r--crates/shirabe/tests/repository/main.rs1
-rw-r--r--crates/shirabe/tests/repository/repository_factory_test.rs70
2 files changed, 71 insertions, 0 deletions
diff --git a/crates/shirabe/tests/repository/main.rs b/crates/shirabe/tests/repository/main.rs
index 9b5b6d7..98b3c68 100644
--- a/crates/shirabe/tests/repository/main.rs
+++ b/crates/shirabe/tests/repository/main.rs
@@ -4,4 +4,5 @@ mod test_case;
mod array_repository_test;
mod composite_repository_test;
mod installed_repository_test;
+mod repository_factory_test;
mod vcs;
diff --git a/crates/shirabe/tests/repository/repository_factory_test.rs b/crates/shirabe/tests/repository/repository_factory_test.rs
index b878449..8871f91 100644
--- a/crates/shirabe/tests/repository/repository_factory_test.rs
+++ b/crates/shirabe/tests/repository/repository_factory_test.rs
@@ -1 +1,71 @@
//! ref: composer/tests/Composer/Test/Repository/RepositoryFactoryTest.php
+
+use indexmap::IndexMap;
+use shirabe::repository::RepositoryFactory;
+use shirabe_php_shim::PhpMixed;
+
+#[test]
+#[ignore = "mocks IO/Config/HttpDownloader/EventDispatcher and reads the private repositoryClasses via reflection; not portable"]
+fn test_manager_with_all_repository_types() {
+ todo!()
+}
+
+fn generate_repository_name_provider() -> Vec<(
+ PhpMixed,
+ Vec<(&'static str, PhpMixed)>,
+ Vec<&'static str>,
+ &'static str,
+)> {
+ vec![
+ (PhpMixed::Int(0), vec![], vec![], "0"),
+ (PhpMixed::Int(0), vec![], vec!["0"], "02"),
+ (
+ PhpMixed::Int(0),
+ vec![("url", PhpMixed::String("https://example.org".to_string()))],
+ vec![],
+ "example.org",
+ ),
+ (
+ PhpMixed::Int(0),
+ vec![("url", PhpMixed::String("https://example.org".to_string()))],
+ vec!["example.org"],
+ "example.org2",
+ ),
+ (
+ PhpMixed::String("example.org".to_string()),
+ vec![(
+ "url",
+ PhpMixed::String("https://example.org/repository".to_string()),
+ )],
+ vec![],
+ "example.org",
+ ),
+ (
+ PhpMixed::String("example.org".to_string()),
+ vec![(
+ "url",
+ PhpMixed::String("https://example.org/repository".to_string()),
+ )],
+ vec!["example.org"],
+ "example.org2",
+ ),
+ ]
+}
+
+#[test]
+#[ignore = "generate_repository_name does not stringify an integer index (PhpMixed::as_string returns None for Int), so a numeric index with no url yields \"\" instead of e.g. \"0\""]
+fn test_generate_repository_name() {
+ for (index, repo_pairs, existing_keys, expected) in generate_repository_name_provider() {
+ let repo: IndexMap<String, PhpMixed> = repo_pairs
+ .into_iter()
+ .map(|(k, v)| (k.to_string(), v))
+ .collect();
+ let existing_repos: IndexMap<String, ()> =
+ existing_keys.into_iter().map(|k| (k.to_string(), ())).collect();
+
+ assert_eq!(
+ expected,
+ RepositoryFactory::generate_repository_name(&index, &repo, &existing_repos)
+ );
+ }
+}