use forgejo_api::Forgejo; use eyre::{eyre, ensure}; #[tokio::test] async fn ci() -> eyre::Result<()> { let url = url::Url::parse(&std::env::var("FORGEJO_API_CI_INSTANCE_URL")?)?; let token = std::env::var("FORGEJO_API_CI_TOKEN")?; let api = Forgejo::new(&token, url)?; let mut results = Vec::new(); results.push(user(&api).await.map_err(|e| eyre!("user error: {e}"))); let mut errors = 0; for res in results.into_iter().filter_map(Result::err) { errors += 1; println!("{res}"); } if errors > 0 { eyre::bail!("test failed"); } Ok(()) } async fn user(api: &forgejo_api::Forgejo) -> eyre::Result<()> { let myself = api.myself().await?; ensure!(myself.is_admin, "user should be admin"); ensure!(myself.login == "TestingAdmin", "user should be named \"TestingAdmin\""); let myself_indirect = api .get_user("TestingAdmin") .await? .ok_or_else(|| eyre!("\"TestingAdmin\" not found, but should have been."))?; ensure!(myself == myself_indirect, "result of `myself` does not match result of `get_user`"); let following = api.get_following("TestingAdmin").await?; ensure!(following == Some(Vec::new()), "following list not empty"); let followers = api.get_followers("TestingAdmin").await?; ensure!(followers == Some(Vec::new()), "follower list not empty"); Ok(()) }