extern crate wikibase;
use wikibase::query::{EntityQuery, SearchQuery};
use wiremock::matchers::query_param;
use wiremock::{Mock, MockServer, ResponseTemplate};
async fn start_mock() -> MockServer {
let server = MockServer::start().await;
let siteinfo = serde_json::json!({
"batchcomplete": "",
"query": {
"general": {"sitename": "Wikidata", "dbname": "wikidatawiki"},
"namespaces": {
"0": {"id": 0, "case": "first-letter", "content": "", "*": ""}
},
"namespacealiases": [],
"libraries": [],
"extensions": [],
"statistics": {}
}
});
Mock::given(query_param("meta", "siteinfo"))
.respond_with(ResponseTemplate::new(200).set_body_json(siteinfo))
.mount(&server)
.await;
server
}
#[tokio::test]
async fn test_single_entity_query() {
let server = start_mock().await;
let configuration = wikibase::Configuration::new_with_url("Automatic-Testing/0.1", &server.uri())
.await
.unwrap();
let entity_query = EntityQuery::new(vec!["Q575650".to_string()], "en");
assert_eq!(vec!["Q575650"], entity_query.ids());
assert_eq!("en", entity_query.lang());
assert_eq!(
format!(
"{}?action=wbgetentities&ids=Q575650&languages=en&uselang=en&format=json",
server.uri()
),
entity_query.url(&configuration)
);
}
#[tokio::test]
async fn test_multiple_entity_query() {
let server = start_mock().await;
let configuration = wikibase::Configuration::new_with_url("Automatic-Testing/0.1", &server.uri())
.await
.unwrap();
let entity_query = EntityQuery::new(vec!["Q575650".to_string(), "P4763".to_string()], "cs");
assert_eq!(vec!["Q575650", "P4763"], entity_query.ids());
assert_eq!("cs", entity_query.lang());
assert_eq!(
format!(
"{}?action=wbgetentities&ids=Q575650|P4763&languages=cs&uselang=cs&format=json",
server.uri()
),
entity_query.url(&configuration)
);
}
#[tokio::test]
async fn test_search_query() {
let entity_type = wikibase::EntityType::Item;
let search_query = SearchQuery::new("linux", "es", "it", 20, entity_type);
assert_eq!("linux", search_query.query());
assert_eq!(20u64, *search_query.limit());
assert_eq!(
wikibase::EntityType::Item.string_value(),
search_query.entity_type().string_value()
);
assert_eq!("es", search_query.lang());
assert_eq!("it", search_query.search_lang());
}