minecraft-data-rs 0.8.1

A wrapper for minecraft-data
use crate::api::tests::{get_api, get_test_versions};
use crate::models::block_collision_shapes::CollisionShapeIds;

#[test]
pub fn test_blocks_array() {
    let versions = get_test_versions();

    for version in versions {
        let api = get_api(version);
        assert_ne!(api.blocks.blocks_array().unwrap().len(), 0)
    }
}

#[test]
pub fn test_blocks_by_state_id() {
    let versions = get_test_versions();

    for version in versions {
        let api = get_api(version);
        let by_state = api.blocks.blocks_by_state_id();
        assert!(by_state.is_ok());
    }
}

#[test]
pub fn test_blocks_by_name() {
    let versions = get_test_versions();

    for version in versions {
        let api = get_api(version);
        let by_name = api.blocks.blocks_by_name().unwrap();
        assert!(by_name.get("dirt").is_some());
        assert!(by_name.get("stone").is_some());
        assert_eq!(by_name.get("grass_block").unwrap().stack_size, 64)
    }
}

#[test]
pub fn test_blocks_by_id() {
    let versions = get_test_versions();

    for version in versions {
        let api = get_api(version);
        let by_id = api.blocks.blocks().unwrap();
        assert!(by_id.get(&1).is_some());
        assert!(by_id.get(&5).is_some());
    }
}

#[test]
pub fn test_block_states() {
    let versions = get_test_versions();

    for version in versions {
        let api = get_api(version);
        let by_name = api.blocks.blocks_by_name().unwrap();

        let air = by_name.get("air").unwrap();
        if let Some(states) = &air.states {
            // Air has no states.
            assert_eq!(states.len(), 0);
        }

        let water = by_name.get("water").unwrap();
        if let Some(states) = &water.states {
            // Water has states.
            assert_ne!(states.len(), 0);
        }
    }
}

#[test]
pub fn test_block_collision_states() {
    for version in get_test_versions() {
        let api = get_api(version);
        let shapes = api.blocks.block_collision_shapes().unwrap();

        for (_block, ids) in shapes.blocks {
            match ids {
                CollisionShapeIds::Value(id) => {
                    assert!(shapes.shapes.get(&id).is_some());
                }
                CollisionShapeIds::Array(ids) => {
                    for id in ids {
                        assert!(shapes.shapes.get(&id).is_some());
                    }
                }
            }
        }
    }
}