use cucumber::{given, then, when, World as _}; use genius_core_client::client::{Client, Protocol}; use std::env; use tokio::runtime::Runtime; #[derive(cucumber::World, Debug, Default)] struct ClientWorld { client: Option, } #[given("I have the correct environment variables")] async fn given_env_vars(_w: &mut ClientWorld) { let genius_db_url = env::var("GENIUS_DB_URL"); let genius_db_port = env::var("GENIUS_DB_PORT"); let token = env::var("GENIUS_JWT"); assert!(genius_db_url.is_ok(), "GENIUS_DB_URL not set"); assert!(genius_db_port.is_ok(), "GENIUS_DB_PORT not set"); assert!(token.is_ok(), "GENIUS_JWT not set"); } #[when("I create a new client")] async fn when_create_client(w: &mut ClientWorld) { let genius_db_url = env::var("GENIUS_DB_URL").unwrap(); let genius_db_port = env::var("GENIUS_DB_PORT").unwrap(); let token = env::var("GENIUS_JWT").unwrap(); let rt = Runtime::new().unwrap(); let client_result = rt.block_on(Client::new_with_oauth2_token( Protocol::HTTPS, genius_db_url, genius_db_port, token, None, )); w.client = Some(client_result.unwrap()); } #[then("the client should be created successfully")] async fn then_client_created(w: &mut ClientWorld) { assert!(w.client.is_some(), "Client was not created"); } #[tokio::main] async fn main() { ClientWorld::cucumber() .run("tests/features/client.feature") .await; }