use gbiz_info_api::{GbizInfoClient, HojinSearchQuery, UpdateInfoQuery};
const TOYOTA: &str = "1180301018771";
fn client() -> Option<GbizInfoClient> {
dotenvy::dotenv().ok();
match std::env::var("API_TOKEN") {
Ok(token) if !token.is_empty() => Some(GbizInfoClient::new(token)),
_ => {
eprintln!("API_TOKEN が未設定のためスキップします");
None
}
}
}
#[tokio::test]
async fn search_by_name() {
let Some(client) = client() else { return };
let query = HojinSearchQuery::new().name("トヨタ自動車").limit(5);
let res = client.search(&query).await.expect("search 失敗");
let infos = res.into_hojin_infos();
assert!(!infos.is_empty());
assert!(infos.iter().all(|i| i.corporate_number.is_some()));
}
#[tokio::test]
async fn hojin_basic_info() {
let Some(client) = client() else { return };
let res = client.hojin(TOYOTA).await.expect("hojin 失敗");
let infos = res.into_hojin_infos();
assert_eq!(infos.len(), 1);
assert_eq!(infos[0].name.as_deref(), Some("トヨタ自動車株式会社"));
let res = client
.hojin(TOYOTA)
.metadata_flg(true)
.await
.expect("hojin(metadata_flg) 失敗");
let infos = res.into_hojin_infos();
assert!(infos[0].meta_data.is_some());
}
#[tokio::test]
async fn finance_by_corporate_number() {
let Some(client) = client() else { return };
let res = client.finance(TOYOTA).await.expect("finance 失敗");
let infos = res.into_hojin_infos();
assert_eq!(infos.len(), 1);
assert!(infos[0].finance.is_some());
}
#[tokio::test]
async fn update_info_with_paging() {
let Some(client) = client() else { return };
let query = UpdateInfoQuery::new("20260701", "20260702");
let res = client.update_info(&query).await.expect("update_info 失敗");
assert!(res.total_count.is_some());
assert!(res.page_number.is_some());
assert!(!res.into_hojin_infos().is_empty());
}
#[tokio::test]
async fn not_found_returns_status_error() {
let Some(client) = client() else { return };
let err = client
.hojin("0000000000000")
.await
.expect_err("存在しない法人番号でエラーにならなかった");
assert!(err.is_not_found(), "404 以外のエラー: {err}");
}