hexomc-lib 0.1.3

A library for launching Minecraft instances.
Documentation
use hexomc_lib::{
    fetch_ftb_version_manifest, get_ftb_pack,
    fetch_atlauncher_pack_config, fetch_version_manifest, get_atlauncher_pack_versions,
    install::fabric::get_fabric_loader_versions, install::forge::get_forge_versions,
    install::neoforge::get_neoforge_versions, LoaderType,
};

#[tokio::test]
async fn ftb_pack_and_version_manifest() {
    let pack = get_ftb_pack(134).await.unwrap();
    assert_eq!(pack.id, 134);
    assert!(!pack.name.is_empty());
    let manifest = fetch_ftb_version_manifest(134, 100422).await.unwrap();
    let info = manifest.info(&pack.name).unwrap();
    assert_eq!(info.mc_version, "1.21.1");
    assert_eq!(info.loader, LoaderType::NeoForge);
    assert!(!manifest.files.is_empty());
}

#[tokio::test]
async fn ftb_legacy_curseforge_references() {
    let manifest = fetch_ftb_version_manifest(35, 37).await.unwrap();
    let info = manifest.info("FTB Revelation").unwrap();
    assert_eq!(info.loader, LoaderType::Forge);
    assert_eq!(info.loader_version.as_deref(), Some("14.23.5.2846"));
    assert!(manifest.files.iter().any(|f| f.curseforge.is_some()));
}

#[tokio::test]
async fn ftb_missing_pack_and_version() {
    assert!(matches!(get_ftb_pack(999999999).await, Err(hexomc_lib::HexoError::VersionNotFound(_))));
    assert!(matches!(fetch_ftb_version_manifest(134, 999999999).await,
        Err(hexomc_lib::HexoError::VersionNotFound(_))));
}

#[tokio::test]
async fn atlauncher_pack_versions() {
    let versions = get_atlauncher_pack_versions("SkyFactory4").await.unwrap();
    assert!(versions.iter().any(|v| v.version == "4.2.4" && v.minecraft == "1.12.2"));
}

#[tokio::test]
async fn atlauncher_pack_config() {
    let config = fetch_atlauncher_pack_config("SkyFactory4", "4.2.4").await.unwrap();
    let info = config.info("SkyFactory4").unwrap();
    assert_eq!(info.mc_version, "1.12.2");
    assert_eq!(info.loader, LoaderType::Forge);
    assert_eq!(info.loader_version.as_deref(), Some("14.23.5.2860"));
    assert!(config.mods.len() > 100);
}

#[tokio::test]
async fn manifest_has_latest_release() {
    let manifest = fetch_version_manifest().await.unwrap();
    assert!(!manifest.latest.release.is_empty());
    println!("latest release: {}", manifest.latest.release);
    println!("latest snapshot: {}", manifest.latest.snapshot);
    println!("{} versions", manifest.versions.len());
}

#[tokio::test]
async fn manifest_contains_1_21_4() {
    let manifest = fetch_version_manifest().await.unwrap();
    let found = manifest.versions.iter().any(|v| v.id == "1.21.4");
    assert!(found, "1.21.4 not found");
}

#[tokio::test]
async fn fabric_loaders_for_1_21_4() {
    let loaders = get_fabric_loader_versions("1.21.4").await.unwrap();
    assert!(!loaders.is_empty(), "no Fabric loader versions");
    println!("latest Fabric loader: {}", loaders[0].version);
}

#[tokio::test]
async fn forge_versions_for_1_20_1() {
    let versions = get_forge_versions("1.20.1").await.unwrap();
    assert!(!versions.is_empty(), "no Forge versions");
    println!("recommended Forge version: {}", versions[0]);
}

#[tokio::test]
async fn neoforge_versions_for_1_21_1() {
    let versions = get_neoforge_versions("1.21.1").await.unwrap();
    assert!(!versions.is_empty(), "no NeoForge versions");
    println!("latest NeoForge: {}", versions.last().unwrap());
}