gn-matchmaking-state 0.1.5

Component for shared state-management in the game-night backend
Documentation
pub mod adapters;
pub mod models;

#[cfg(test)]
mod tests {
    use std::error::Error;

    use crate::{
        adapters::{Gettable, Insertable, Removable, Updateable},
        models::{DBGameServer, GameMode, GameServerUpdater},
    };

    #[test]
    #[cfg(feature = "redis")]

    fn test_redis_adapter_insert_game_server() {
        use crate::adapters::redis::RedisAdapter;
        use crate::models::{GameMode, GameServer};

        let adapter = RedisAdapter::connect("redis://0.0.0.0:6379").unwrap();

        let game_server = GameServer {
            name: "Test Server".to_owned(),
            modes: vec![GameMode {
                name: "Test Mode".to_owned(),
                player_count: 2,
                computer_lobby: false,
            }],
            server_pub: "127.0.0.1:3456".to_owned(),
            server_priv: "127.0.0.1:3456".to_owned(),
            token: "test_token".to_owned(),
        };
        adapter.insert(game_server).unwrap();
    }

    #[test]
    #[cfg(feature = "redis")]
    fn test_redis_adapter_all_game_server() {
        use crate::adapters::redis::RedisAdapter;
        use crate::models::GameServer;

        let adapter = RedisAdapter::connect("redis://0.0.0.0:6379").unwrap();

        let game_server = GameServer {
            name: "Test Server".to_owned(),
            modes: vec![GameMode {
                name: "Test Mode".to_owned(),
                player_count: 10,
                computer_lobby: false,
            }],
            server_pub: "127.0.0.1:3456".to_owned(),
            server_priv: "127.0.0.1:3456".to_owned(),
            token: "test_token".to_owned(),
        };
        adapter.insert(game_server.clone()).unwrap();

        let found_server = adapter.all().unwrap().collect::<Vec<DBGameServer>>();

        for game in &found_server {
            println!("{:?}", game);
        }

        assert!(found_server.len() > 0);
        assert!(found_server.iter().any(|x| x.name == game_server.name));
    }

    #[test]
    #[cfg(feature = "redis")]
    fn test_redis_adapter_remove_game_server() {
        use crate::adapters::redis::RedisAdapter;
        use crate::models::GameServer;

        let adapter = RedisAdapter::connect("redis://0.0.0.0:6379").unwrap();

        let game_server = GameServer {
            name: "Test Server".to_owned(),
            modes: vec![GameMode {
                name: "Test Mode".to_owned(),
                player_count: 10,
                computer_lobby: false,
            }],
            server_pub: "127.0.0.1:3456".to_owned(),
            server_priv: "127.0.0.1:3456".to_owned(),
            token: "test_token".to_owned(),
        };
        let uuid = adapter.insert(game_server.clone()).unwrap();

        adapter.remove(&uuid).unwrap();

        let game: Result<DBGameServer, Box<dyn Error>> = adapter.get(&uuid);
        assert!(game.is_err());
    }

    #[test]
    #[cfg(feature = "redis")]
    fn test_redis_adapter_update_game_server() {
        use crate::adapters::redis::RedisAdapter;
        use crate::models::{GameMode, GameServer};

        let adapter = RedisAdapter::connect("redis://0.0.0.0:6379").unwrap();

        let game_server = GameServer {
            name: "Test Server".to_owned(),
            modes: vec![GameMode {
                name: "Test Mode".to_owned(),
                player_count: 2,
                computer_lobby: false,
            }],
            server_pub: "127.0.0.1:3456".to_owned(),
            server_priv: "127.0.0.1:3456".to_owned(),
            token: "test_token".to_owned(),
        };
        let uuid = adapter.insert(game_server.clone()).unwrap();

        let mut update = GameServerUpdater::default();
        update.name = Some("CSS Battle (Cum Sum Sus Battle)".to_owned());
        adapter.update(&uuid, update).unwrap();

        let result: DBGameServer = adapter.get(&uuid).unwrap();

        assert!(result.name == "CSS Battle (Cum Sum Sus Battle)");
    }
}