fish-lib 0.2.3

A work-in-progress fishing game library containing the game/storage logic for a discord fishing game I'm working on.
Documentation
use crate::config::{Config, ConfigBuilderInterface, ConfigInterface};
use crate::data::species_data::SpeciesData;
use crate::tests::mock::mock_service_provider;
use std::collections::HashMap;
use std::sync::Arc;

fn mock_config() -> Arc<dyn ConfigInterface> {
    let salmon_data = SpeciesData {
        name: "salmon".to_string(),
        min_size_baby_mm: 40,
        max_size_baby_mm: 50,
        min_size_adult_mm: 400,
        max_size_adult_mm: 500,
        min_weight_baby_g: 20,
        max_weight_baby_g: 35,
        min_weight_adult_g: 220,
        max_weight_adult_g: 350,
        min_lifespan_days: 480,
        max_lifespan_days: 720,
        lifespan_adult_ratio: 0.35,
        ..Default::default()
    };

    let shark_data = SpeciesData {
        name: "shark".to_string(),
        ..Default::default()
    };

    let mut species_data_map = HashMap::new();
    species_data_map.insert(1, salmon_data);
    species_data_map.insert(37, shark_data);

    Config::builder().species(species_data_map).build().unwrap()
}

#[test]
fn test_get_species_names() {
    let sp = mock_service_provider(mock_config());

    let species_names = sp.species_service().get_species_names();
    assert_eq!(species_names.len(), 2);
    assert_eq!(species_names[&1], "salmon");
    assert_eq!(species_names[&37], "shark");
}

#[test]
fn test_get_species_data() {
    let sp = mock_service_provider(mock_config());

    let salmon_data = sp.species_service().get_species_data(1).unwrap();
    assert_eq!(salmon_data.id, 1);
    assert_eq!(salmon_data.name, "salmon");
    assert_eq!(salmon_data.min_size_baby_mm, 40);
    assert_eq!(salmon_data.max_size_baby_mm, 50);
    assert_eq!(salmon_data.min_size_adult_mm, 400);
    assert_eq!(salmon_data.max_size_adult_mm, 500);
    assert_eq!(salmon_data.min_weight_baby_g, 20);
    assert_eq!(salmon_data.max_weight_baby_g, 35);
    assert_eq!(salmon_data.min_weight_adult_g, 220);
    assert_eq!(salmon_data.max_weight_adult_g, 350);
    assert_eq!(salmon_data.min_lifespan_days, 480);
    assert_eq!(salmon_data.max_lifespan_days, 720);
    assert_eq!(salmon_data.lifespan_adult_ratio, 0.35);

    let shark_data = sp.species_service().get_species_data(37).unwrap();
    assert_eq!(shark_data.id, 37);
    assert_eq!(shark_data.name, "shark");
}