use vndb::{filter}; use vndb::protocol::message; use serde_json::json; #[test] fn get_type_short() { let vn_type = message::request::get::Type::vn(); assert_eq!(vn_type.short(), "v"); } #[test] fn format_request_login_without_auth() { let login = message::request::Login { protocol: 2, client: "test", clientver: 0.666, creds: None, }; let login = message::Request::Login(login); let result = format!("{}", login); assert_eq!(result, "login {\"protocol\":2,\"client\":\"test\",\"clientver\":0.666}\x04") } #[test] fn format_request_login_with_auth() { let login = message::request::Login { protocol: 2, client: "test", clientver: 0.666, creds: Some(("username", "pass")), }; let login = message::Request::Login(login); let result = format!("{}", login); assert_eq!(result, "login {\"protocol\":2,\"client\":\"test\",\"clientver\":0.666,\"username\":\"username\",\"password\":\"pass\"}\x04") } #[test] fn format_request_get_without_options() { let get = message::Request::Get(message::request::Get { kind: message::request::get::Type::vn(), flags: message::request::get::Flags::new().basic().anime(), filters: message::request::get::Filters::new().filter(filter!(title = "Lolka")).or(filter!(title = "lolka")), options: None }); let result = format!("{}", get); assert_eq!(result, "get vn basic,anime (title = \"Lolka\" or title = \"lolka\")\x04"); } #[test] fn format_request_get_wit_options() { let get = message::Request::Get(message::request::Get { kind: message::request::get::Type::release(), flags: message::request::get::Flags::new().basic().details(), filters: message::request::get::Filters::new().filter(filter!(title = "Lolka")).or(filter!(title = "lolka")), options: Some(message::request::get::Options { page: Some(2), results: None, sort: None, reverse: Some(true) }) }); let result = format!("{}", get); assert_eq!(result, "get release basic,details (title = \"Lolka\" or title = \"lolka\") {\"page\":2,\"reverse\":true}\x04"); } #[test] fn format_request_dbstats() { let dbstats = message::Request::DBstats; let result = format!("{}", dbstats); assert_eq!(result, "dbstats\x04") } #[test] fn parse_response_ok() { let message = "ok"; let result = message::Response::from_str(message).expect("To parse"); match result { message::Response::Ok => assert!(true), _ => assert!(false, "Unexpected type of result") } } #[test] fn parse_response_error() { let message = "error {\"id\":\"parse\", \"msg\":\"Invalid command or argument\"}"; let result = message::Response::from_str(message).expect("To parse"); match result { message::Response::Error(error) => { assert_eq!(error.id, "parse"); assert_eq!(error.msg, "Invalid command or argument"); }, _ => assert!(false, "Unexpected type of result") } } #[test] fn parse_response_dbstats() { let message = "dbstats { \"tags\":1627, \"releases\":28071, \"producers\":3456, \"chars\":14046, \"vn\":13051, \"traits\":1272}"; let result = message::Response::from_str(message).expect("To parse"); match result { message::Response::DBstats(stats) => { assert_eq!(stats.tags, 1627); assert_eq!(stats.producers, 3456); assert_eq!(stats.chars, 14046); assert_eq!(stats.vn, 13051); assert_eq!(stats.traits, 1272); }, _ => assert!(false, "Unexpected type of result") } } #[test] fn parse_response_results() { let message = "results { \"num\":1, \"more\":false, \"items\":[{ \"id\": 17, \"title\": \"Ever17 -the out of infinity-\", \"original\": null, \"released\": \"2002-08-29\", \"languages\": [\"en\",\"ja\",\"ru\",\"zh\"], \"platforms\": [\"drc\",\"ps2\",\"psp\",\"win\"], \"anime\": [] }] }"; let result = message::Response::from_str(message).expect("To parse"); match result { message::Response::Results(results) => { assert_eq!(results["num"], json!(1)); assert_eq!(results["more"], json!(false)); let results = results.vn().unwrap(); assert_eq!(results.num, 1); assert_eq!(results.more, false); assert_eq!(results.len(), 1); assert_eq!(results.items.len(), 1); let item = &results.items[0]; assert_eq!(item.id, 17); assert_eq!(item.title, Some("Ever17 -the out of infinity-".to_owned())); assert_eq!(item.original, None); }, _ => assert!(false, "Unexpected type of result") } }