mod common;
use common::*;
use serde_json::json;
const NS: &str = "smoke-ns";
fn ns_headers() -> Vec<(&'static str, &'static str)> {
vec![("X-Namespace-ID", NS)]
}
#[test]
fn full_smoke() {
let server = TestServer::spawn();
let c = server.client();
let b = format!("{}/api", server.url);
let (s, body) = post_json(
&c,
&format!("{}/namespaces", b),
&[],
&json!({"namespace_id": NS, "description": "smoke"}),
);
assert!(body.contains("created"), "create namespace: {}", body);
assert!(s == 200, "create namespace status: {}", s);
let (s, body) = get(&c, &format!("{}/namespaces", b), &[]);
assert!(body.contains(NS), "list shows namespace");
assert_eq!(s, 200);
let s = post_json(
&c,
&format!("{}/intents", b),
&ns_headers(),
&json!({"id":"hello","phrases":["hi","hey","hello there"]}),
)
.0;
assert_eq!(s, 201, "create mono intent");
let s = post_json(&c, &format!("{}/intents", b), &ns_headers(),
&json!({"id":"bye","phrases_by_lang":{"en":["bye","goodbye"],"fr":["au revoir"]},"description":"farewell"})).0;
assert_eq!(s, 201, "create multilingual intent");
let (_, body) = get(&c, &format!("{}/intents", b), &ns_headers());
assert!(body.contains("\"bye\""), "multilingual intent persisted");
assert!(body.contains("farewell"), "description persisted");
assert!(body.contains("\"fr\""), "fr language bucket persisted");
let s = patch_json(
&c,
&format!("{}/intents/hello", b),
&ns_headers(),
&json!({"description":"greeting","persona":"friendly","intent_type":"action"}),
);
assert_eq!(s, 204, "patch intent");
let (_, body) = get(&c, &format!("{}/intents", b), &ns_headers());
assert!(body.contains("greeting"), "patched description");
assert!(body.contains("friendly"), "patched persona");
let (_, body) = post_json(
&c,
&format!("{}/route_multi", b),
&ns_headers(),
&json!({"query":"hi there"}),
);
assert!(body.contains("\"hello\""), "EN routes to hello: {}", body);
let (_, body) = post_json(
&c,
&format!("{}/route_multi", b),
&ns_headers(),
&json!({"query":"au revoir"}),
);
assert!(body.contains("\"bye\""), "FR routes to bye: {}", body);
let (s, _) = post_json(
&c,
&format!("{}/intents/hello/phrases", b),
&ns_headers(),
&json!({"phrase":"howdy","lang":"en"}),
);
assert_eq!(s, 200, "add phrase");
let s = patch_json(
&c,
&format!("{}/namespaces", b),
&[],
&json!({"namespace_id": NS, "name":"Smoke", "default_threshold": 0.4}),
);
assert_eq!(s, 200, "patch namespace");
let (_, body) = get(&c, &format!("{}/namespaces", b), &[]);
assert!(body.contains("Smoke"), "namespace name persisted");
let (s, _) = post_json(
&c,
&format!("{}/namespaces/train_negative", b),
&[],
&json!({"namespace_id": NS, "queries":["unrelated"], "alpha": 0.1}),
);
assert_eq!(s, 200, "train_negative");
let (s, _) = post_json(
&c,
&format!("{}/namespaces/rebuild", b),
&[],
&json!({"namespace_id": NS}),
);
assert_eq!(s, 200, "rebuild");
let (_, body) = get(&c, &format!("{}/layers/info", b), &ns_headers());
assert!(body.contains("terms"), "layer info has terms field");
let s = delete_json(
&c,
&format!("{}/intents/hello", b),
&ns_headers(),
&json!({}),
);
assert_eq!(s, 204, "delete intent");
delete_json(
&c,
&format!("{}/namespaces", b),
&[],
&json!({"namespace_id": NS}),
);
}