use serde_json::Value;
use tokio;
use bugzilla_query::*;
fn rh_bugzilla() -> BzInstance {
BzInstance::at("https://bugzilla.redhat.com".to_string())
.unwrap()
.paginate(Pagination::Unlimited)
}
fn moz_bugzilla() -> BzInstance {
BzInstance::at("https://bugzilla.mozilla.org".to_string())
.unwrap()
.paginate(Pagination::Unlimited)
}
#[tokio::test]
async fn access_bug() {
let instance = rh_bugzilla();
let _bug = instance.bug("1906883").await.unwrap();
}
#[tokio::test]
async fn access_missing_bug() {
let instance = rh_bugzilla();
let bug = instance.bug("111111111111111111");
assert!(matches!(bug.await.unwrap_err(), BugzillaQueryError::NoBugs));
}
#[tokio::test]
async fn check_standard_fields() {
let instance = rh_bugzilla();
let bug = instance.bug("1906887").await.unwrap();
assert_eq!(bug.id, 1906887);
assert_eq!(
bug.summary,
"Test the CoRN release notes generator (populated)"
);
assert_eq!(bug.status, "CLOSED");
assert_eq!(bug.resolution, "CURRENTRELEASE");
assert_eq!(bug.is_open, false);
assert_eq!(
bug.component,
Component::Many(vec!["Documentation".to_string()])
);
assert_eq!(bug.priority, "medium");
assert_eq!(bug.assigned_to, "Marek Suchánek");
assert_eq!(bug.assigned_to_detail.email, "msuchane");
assert_eq!(bug.docs_contact, Some("Marek Suchánek".to_string()));
assert_eq!(bug.docs_contact_detail.unwrap().email, "msuchane");
}
#[tokio::test]
async fn check_time() {
let instance = rh_bugzilla();
let bug = instance.bug("1906887").await.unwrap();
let date_created = chrono::NaiveDate::from_ymd_opt(2020, 12, 11).unwrap();
assert_eq!(bug.creation_time.date_naive(), date_created);
}
#[tokio::test]
async fn check_custom_fields() {
let instance = rh_bugzilla();
let bug = instance.bug("1906887").await.unwrap();
let doc_text = bug.extra.get("cf_release_notes").and_then(Value::as_str);
let release_note = ".A test\r\n\
\r\n\
This is a testing release note.\r\n\
\r\n\
It is written in the proper format.\r\n\
\r\n\
The following is a list:\r\n\
\r\n\
* One\r\n\
* Two\r\n\
* Three";
assert_eq!(doc_text, Some(release_note));
}
#[tokio::test]
async fn search_for_bugs() {
let instance = rh_bugzilla();
let query = "component=rust&product=Fedora&version=36";
let bugs = instance.search(query).await.unwrap();
assert!(bugs.len() > 1);
}
#[tokio::test]
async fn check_no_bugs() {
let instance = rh_bugzilla();
let bugs = instance.bugs(&[]).await;
assert_eq!(bugs.ok(), Some(vec![]));
}
#[tokio::test]
async fn check_mozilla_bug() {
let instance = moz_bugzilla();
let id = "1243581";
let _bug = instance.bug(id).await.unwrap();
let id = "1155520";
let _bug = instance.bug(id).await.unwrap();
}
#[tokio::test]
async fn check_aliases() {
let empty: Vec<String> = vec![];
let instance = moz_bugzilla();
let id = "1243581";
let bug = instance.bug(id).await.unwrap();
assert_eq!(bug.alias, OneOrMany::One("stylo".to_string()));
assert_eq!(bug.alias.into_vec(), vec!["stylo".to_string()]);
let id = "1155520";
let bug = instance.bug(id).await.unwrap();
assert_eq!(bug.alias, OneOrMany::None);
assert_eq!(bug.alias.into_vec(), empty.clone());
let instance = rh_bugzilla();
let bug = instance.bug("1906887").await.unwrap();
assert_eq!(bug.alias, OneOrMany::Many(empty.clone()));
assert_eq!(bug.alias.into_vec(), empty.clone());
}