use std::env;
use vapi_client::apis::configuration::Configuration;
use vapi_client::apis::phone_numbers_api;
use vapi_client::models::{
self, CreateVapiPhoneNumberDto, PhoneNumberControllerCreateRequest,
PhoneNumberControllerUpdateRequest,
};
#[tokio::test]
#[ignore]
async fn test_create_vapi_phone_number() {
let api_key = env::var("VAPI_API_KEY").expect("VAPI_API_KEY environment variable must be set");
let mut config = Configuration::new();
config.bearer_access_token = Some(api_key);
let mut vapi_phone_number = CreateVapiPhoneNumberDto::new(
models::create_vapi_phone_number_dto::ProviderTrue::Vapi,
);
vapi_phone_number.name = Some("Test Phone Number".to_string());
vapi_phone_number.number_desired_area_code = Some("415".to_string());
let assistant_id = env::var("VAPI_TEST_ASSISTANT_ID").ok();
if let Some(id) = assistant_id {
vapi_phone_number.assistant_id = Some(id);
}
let create_request = PhoneNumberControllerCreateRequest::Vapi(vapi_phone_number);
match phone_numbers_api::phone_number_controller_create(&config, create_request).await {
Ok(response) => {
println!("Phone number created successfully!");
println!("Response: {:?}", response);
let id = match &response {
models::PhoneNumber::Vapi(vapi) => &vapi.id,
models::PhoneNumber::Twilio(twilio) => &twilio.id,
models::PhoneNumber::Vonage(vonage) => &vonage.id,
models::PhoneNumber::ByoPhoneNumber(byo) => &byo.id,
models::PhoneNumber::Telnyx(telnyx) => &telnyx.id,
};
assert!(!id.is_empty());
}
Err(e) => {
eprintln!("Error creating phone number: {:?}", e);
panic!("Failed to create phone number");
}
}
}
#[tokio::test]
#[ignore]
async fn test_list_phone_numbers() {
let api_key = env::var("VAPI_API_KEY").expect("VAPI_API_KEY environment variable must be set");
let mut config = Configuration::new();
config.bearer_access_token = Some(api_key);
match phone_numbers_api::phone_number_controller_find_all(
&config, None, None, None, None, None, None, None, None, None,
)
.await
{
Ok(phone_numbers) => {
println!("Found {} phone numbers", phone_numbers.len());
for phone_number in phone_numbers.iter().take(5) {
match phone_number {
models::PhoneNumber::Vapi(vapi) => {
println!(
"Phone Number ID: {:?}, Name: {:?}, Number: {:?}",
vapi.id, vapi.name, vapi.number
);
}
models::PhoneNumber::Twilio(twilio) => {
println!(
"Phone Number ID: {:?}, Name: {:?}, Number: {:?}",
twilio.id, twilio.name, twilio.number
);
}
models::PhoneNumber::Vonage(vonage) => {
println!(
"Phone Number ID: {:?}, Name: {:?}, Number: {:?}",
vonage.id, vonage.name, vonage.number
);
}
models::PhoneNumber::ByoPhoneNumber(byo) => {
println!(
"Phone Number ID: {:?}, Name: {:?}, Number: {:?}",
byo.id, byo.name, byo.number
);
}
models::PhoneNumber::Telnyx(telnyx) => {
println!(
"Phone Number ID: {:?}, Name: {:?}, Number: {:?}",
telnyx.id, telnyx.name, telnyx.number
);
}
}
}
}
Err(e) => {
eprintln!("Error listing phone numbers: {:?}", e);
panic!("Failed to list phone numbers");
}
}
}
#[tokio::test]
#[ignore]
async fn test_get_phone_number_by_id() {
let api_key = env::var("VAPI_API_KEY").expect("VAPI_API_KEY environment variable must be set");
let phone_number_id = env::var("VAPI_TEST_PHONE_NUMBER_ID").unwrap_or_else(|_| {
println!("VAPI_TEST_PHONE_NUMBER_ID not set, skipping test_get_phone_number_by_id");
return String::new();
});
if phone_number_id.is_empty() {
return;
}
let mut config = Configuration::new();
config.bearer_access_token = Some(api_key);
match phone_numbers_api::phone_number_controller_find_one(&config, &phone_number_id).await {
Ok(phone_number) => {
println!("Retrieved phone number successfully!");
match &phone_number {
models::PhoneNumber::Vapi(vapi) => {
println!("Phone Number ID: {:?}", vapi.id);
println!("Name: {:?}", vapi.name);
println!("Number: {:?}", vapi.number);
println!("Provider: vapi");
println!("Created at: {:?}", vapi.created_at);
}
models::PhoneNumber::Twilio(twilio) => {
println!("Phone Number ID: {:?}", twilio.id);
println!("Name: {:?}", twilio.name);
println!("Number: {:?}", twilio.number);
println!("Provider: twilio");
println!("Created at: {:?}", twilio.created_at);
}
models::PhoneNumber::Vonage(vonage) => {
println!("Phone Number ID: {:?}", vonage.id);
println!("Name: {:?}", vonage.name);
println!("Number: {:?}", vonage.number);
println!("Provider: vonage");
println!("Created at: {:?}", vonage.created_at);
}
models::PhoneNumber::ByoPhoneNumber(byo) => {
println!("Phone Number ID: {:?}", byo.id);
println!("Name: {:?}", byo.name);
println!("Number: {:?}", byo.number);
println!("Provider: byo-phone-number");
println!("Created at: {:?}", byo.created_at);
}
models::PhoneNumber::Telnyx(telnyx) => {
println!("Phone Number ID: {:?}", telnyx.id);
println!("Name: {:?}", telnyx.name);
println!("Number: {:?}", telnyx.number);
println!("Provider: telnyx");
println!("Created at: {:?}", telnyx.created_at);
}
}
}
Err(e) => {
eprintln!("Error getting phone number: {:?}", e);
panic!("Failed to get phone number");
}
}
}
#[tokio::test]
#[ignore]
async fn test_update_phone_number() {
let api_key = env::var("VAPI_API_KEY").expect("VAPI_API_KEY environment variable must be set");
let phone_number_id = env::var("VAPI_TEST_PHONE_NUMBER_ID").unwrap_or_else(|_| {
println!("VAPI_TEST_PHONE_NUMBER_ID not set, skipping test_update_phone_number");
return String::new();
});
if phone_number_id.is_empty() {
return;
}
let mut config = Configuration::new();
config.bearer_access_token = Some(api_key);
let phone_number = match phone_numbers_api::phone_number_controller_find_one(&config, &phone_number_id).await {
Ok(pn) => pn,
Err(e) => {
eprintln!("Error getting phone number: {:?}", e);
panic!("Failed to get phone number for update");
}
};
let update_request = match phone_number {
models::PhoneNumber::Vapi(_) => {
let mut update_dto = models::UpdateVapiPhoneNumberDto::default();
update_dto.name = Some("Updated Test Phone Number".to_string());
PhoneNumberControllerUpdateRequest::Vapi(update_dto)
}
models::PhoneNumber::Twilio(_) => {
let mut update_dto = models::UpdateTwilioPhoneNumberDto::default();
update_dto.name = Some("Updated Test Phone Number".to_string());
PhoneNumberControllerUpdateRequest::Twilio(update_dto)
}
models::PhoneNumber::Vonage(_) => {
let mut update_dto = models::UpdateVonagePhoneNumberDto::default();
update_dto.name = Some("Updated Test Phone Number".to_string());
PhoneNumberControllerUpdateRequest::Vonage(update_dto)
}
models::PhoneNumber::ByoPhoneNumber(_) => {
let mut update_dto = models::UpdateByoPhoneNumberDto::default();
update_dto.name = Some("Updated Test Phone Number".to_string());
PhoneNumberControllerUpdateRequest::ByoPhoneNumber(update_dto)
}
models::PhoneNumber::Telnyx(_) => {
let mut update_dto = models::UpdateTelnyxPhoneNumberDto::default();
update_dto.name = Some("Updated Test Phone Number".to_string());
PhoneNumberControllerUpdateRequest::Telnyx(update_dto)
}
};
match phone_numbers_api::phone_number_controller_update(&config, &phone_number_id, update_request).await {
Ok(updated_phone_number) => {
println!("Phone number updated successfully!");
let updated_name = match &updated_phone_number {
models::PhoneNumber::Vapi(vapi) => &vapi.name,
models::PhoneNumber::Twilio(twilio) => &twilio.name,
models::PhoneNumber::Vonage(vonage) => &vonage.name,
models::PhoneNumber::ByoPhoneNumber(byo) => &byo.name,
models::PhoneNumber::Telnyx(telnyx) => &telnyx.name,
};
println!("Updated Name: {:?}", updated_name);
assert_eq!(
updated_name,
&Some("Updated Test Phone Number".to_string())
);
}
Err(e) => {
eprintln!("Error updating phone number: {:?}", e);
panic!("Failed to update phone number");
}
}
}
#[tokio::test]
#[ignore]
async fn test_delete_phone_number() {
let api_key = env::var("VAPI_API_KEY").expect("VAPI_API_KEY environment variable must be set");
let phone_number_id = env::var("VAPI_TEST_DELETE_PHONE_NUMBER_ID").unwrap_or_else(|_| {
println!("VAPI_TEST_DELETE_PHONE_NUMBER_ID not set, skipping test_delete_phone_number");
println!("This test requires a phone number ID that is safe to delete");
return String::new();
});
if phone_number_id.is_empty() {
return;
}
let mut config = Configuration::new();
config.bearer_access_token = Some(api_key);
match phone_numbers_api::phone_number_controller_remove(&config, &phone_number_id).await {
Ok(deleted_phone_number) => {
println!("Phone number deleted successfully!");
let (id, name) = match &deleted_phone_number {
models::PhoneNumber::Vapi(vapi) => (&vapi.id, &vapi.name),
models::PhoneNumber::Twilio(twilio) => (&twilio.id, &twilio.name),
models::PhoneNumber::Vonage(vonage) => (&vonage.id, &vonage.name),
models::PhoneNumber::ByoPhoneNumber(byo) => (&byo.id, &byo.name),
models::PhoneNumber::Telnyx(telnyx) => (&telnyx.id, &telnyx.name),
};
println!("Deleted Phone Number ID: {:?}", id);
println!("Deleted Phone Number Name: {:?}", name);
}
Err(e) => {
eprintln!("Error deleting phone number: {:?}", e);
panic!("Failed to delete phone number");
}
}
}