use oneclient_core::dev; use oneclient_core::packages::domain::{ContentType, ProviderId}; use oneclient_core::packages::types::SearchFilters; #[test] fn registry_get_unknown_provider_errors() { let registry = oneclient_core::packages::PackageProviderRegistry::new(); let err = match registry.get(ProviderId::Local) { Err(e) => e, Ok(_) => panic!("expected ProviderId::Local to be unregistered"), }; assert!(err.to_string().contains("not registered")); } #[tokio::test] async fn registry_providers_match_ids() { let registry = oneclient_core::packages::PackageProviderRegistry::new(); for id in registry.remote_ids() { assert_eq!(registry.get(id).unwrap().id(), id); } } #[tokio::test] #[ignore = "requires network"] async fn modrinth_search_returns_hits() { let env = dev::ephemeral_services().await.unwrap(); let provider = env.packages.get(ProviderId::Modrinth).unwrap(); let page = provider .search( &SearchFilters { query: Some("sodium".into()), limit: Some(5), content_type: Some(ContentType::Mod), ..Default::default() }, &env, ) .await .unwrap(); assert!(!page.items.is_empty()); assert!( page.items .iter() .any(|p| p.name.to_lowercase().contains("sodium")) ); } #[tokio::test] #[ignore = "requires network"] async fn modrinth_get_project_and_versions() { let env = dev::ephemeral_services().await.unwrap(); let provider = env.packages.get(ProviderId::Modrinth).unwrap(); let project = provider.get_project("AANobbMI", &env).await.unwrap(); assert_eq!(project.slug, "sodium"); assert_eq!(project.provider, ProviderId::Modrinth); let versions = provider .list_versions(&project.id, Some("1.20.1"), None, 0, 5, &env) .await .unwrap(); assert!(!versions.items.is_empty()); } #[tokio::test] #[ignore = "requires network"] async fn curseforge_search_returns_hits() { let env = dev::ephemeral_services().await.unwrap(); let provider = env.packages.get(ProviderId::CurseForge).unwrap(); let page = provider .search( &SearchFilters { query: Some("sodium".into()), limit: Some(5), content_type: Some(ContentType::Mod), ..Default::default() }, &env, ) .await .unwrap(); assert!(!page.items.is_empty()); } #[tokio::test] #[ignore = "requires network"] async fn modrinth_lookup_version_by_sha1() { let env = dev::ephemeral_services().await.unwrap(); let provider = env.packages.get(ProviderId::Modrinth).unwrap(); let versions = provider .list_versions("AANobbMI", Some("1.20.1"), None, 0, 1, &env) .await .unwrap(); let version = provider .get_version("AANobbMI", &versions.items[0].version_id, &env) .await .unwrap(); let sha1 = version .primary_file() .expect("version has a primary file") .sha1 .clone(); let found = env.packages.lookup_version(&sha1, &env).await.unwrap(); assert!(found.is_some()); let (provider_id, _) = found.unwrap(); assert_eq!(provider_id, ProviderId::Modrinth); }