use crate::AzureDevOpsPersonalAccessToken;
use cloud_terrastodon_azure_types::prelude::AccessToken;
use cloud_terrastodon_command::CommandBuilder;
use cloud_terrastodon_command::CommandKind;
pub const AZURE_DEVOPS_RESOURCE_ID: &str = "499b84ac-1321-427f-aa17-267ca6975798";
pub async fn fetch_azure_devops_personal_access_token()
-> eyre::Result<AccessToken<AzureDevOpsPersonalAccessToken>> {
let mut cmd = CommandBuilder::new(CommandKind::AzureCLI);
cmd.args([
"account",
"get-access-token",
"--resource",
AZURE_DEVOPS_RESOURCE_ID,
]);
let rtn = cmd.run().await?;
Ok(rtn)
}
#[cfg(test)]
mod test {
use crate::azure_access_token::fetch_azure_devops_personal_access_token;
use crate::create_azure_devops_rest_client;
use serde_json::Value;
#[tokio::test]
pub async fn it_works_profiles() -> eyre::Result<()> {
let url = "https://app.vssps.visualstudio.com/_apis/profile/profiles/me?api-version=6.0";
let pat = fetch_azure_devops_personal_access_token()
.await?
.access_token;
let client = create_azure_devops_rest_client(&pat).await?;
let resp = client.get(url).send().await?;
let status = resp.status();
let content = resp.text().await?;
println!("{:#?}", content);
assert_eq!(200, status.as_u16(), "{:?}", status.canonical_reason());
serde_json::from_str::<Value>(&content)?;
Ok(())
}
#[tokio::test]
pub async fn it_works_projects() -> eyre::Result<()> {
let url = "https://dev.azure.com/aafc/_apis/projects?api-version=7.1";
let pat = fetch_azure_devops_personal_access_token()
.await?
.access_token;
let client = create_azure_devops_rest_client(&pat).await?;
let resp = client.get(url).send().await?;
let status = resp.status();
let content = resp.text().await?;
println!("{:#?}", content);
assert_eq!(200, status.as_u16(), "{:?}", status.canonical_reason());
serde_json::from_str::<Value>(&content)?;
Ok(())
}
}