chatty-rs 0.0.1-alpha1

A terminal-based chat client for OpenAI's GPT models.
Documentation
use super::*;
use crate::backend::MockBackend;
use std::sync::Arc;

#[tokio::test]
async fn test_add_connection() {
    let mut mock = MockBackend::new();
    mock.expect_name().times(1).return_const("test".to_string());
    mock.expect_list_models().times(1).returning(|| {
        Box::pin(async {
            Ok(vec![
                Model::new("model1").with_provider("test"),
                Model::new("model2").with_provider("test"),
            ])
        })
    });
    let mut manager = Manager::default();
    let result = manager.add_connection(Arc::new(mock)).await;
    assert!(result.is_ok());
    assert_eq!(manager.models.len(), 2);
    assert_eq!(manager.models.get("model1"), Some(&"test".to_string()));
    assert_eq!(manager.models.get("model2"), Some(&"test".to_string()));

    assert_eq!(manager.connections.len(), 1);
    assert!(manager.connections.contains_key("test"));
}

#[tokio::test]
async fn test_add_connection_with_error() {
    let mut mock = MockBackend::new();
    mock.expect_name().times(1).return_const("test".to_string());
    mock.expect_list_models()
        .times(1)
        .returning(|| Box::pin(async { Err(eyre::eyre!("test error")) }));
    let mut manager = Manager::default();
    let result = manager.add_connection(Arc::new(mock)).await;
    assert!(result.is_err());
    let err = result.unwrap_err();
    assert_eq!(err.to_string(), "listing models backend test");
    let root_cause = err.root_cause();
    assert_eq!(root_cause.to_string(), "test error");
}