wikibase 0.7.6

A library to access Wikibase
Documentation
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());
}