use super::utils;
use itertools::Itertools;
use rama::{
Context,
http::{BodyExtractExt, StatusCode},
};
use serde_json::json;
#[tokio::test]
#[ignore]
async fn test_example_http_form() {
utils::init_tracing();
let runner = utils::ExampleRunner::interactive("http_key_value_store", None);
let response = runner
.post("http://127.0.0.1:62006/items")
.json(&json!({
"key1": "value1",
"key2": "value2",
}))
.send(Context::default())
.await
.unwrap();
assert_eq!(StatusCode::OK, response.status());
let keys = runner
.get("http://127.0.0.1:62006/keys")
.send(Context::default())
.await
.unwrap()
.try_into_string()
.await
.unwrap()
.split(',')
.map(str::trim)
.sorted()
.join(", ");
assert_eq!("key1, key2", keys);
let response = runner
.post("http://127.0.0.1:62006/item/key3")
.body("value3")
.send(Context::default())
.await
.unwrap();
assert_eq!(StatusCode::OK, response.status());
let value = runner
.get("http://127.0.0.1:62006/item/key3")
.send(Context::default())
.await
.unwrap()
.try_into_string()
.await
.unwrap();
assert_eq!("value3", value);
let response = runner
.head("http://127.0.0.1:62006/item/key3")
.send(Context::default())
.await
.unwrap();
assert_eq!(StatusCode::OK, response.status());
let response = runner
.delete("http://127.0.0.1:62006/admin/item/key3")
.bearer_auth("secret-token")
.send(Context::default())
.await
.unwrap();
assert_eq!(StatusCode::OK, response.status());
let response = runner
.head("http://127.0.0.1:62006/item/key3")
.send(Context::default())
.await
.unwrap();
assert_eq!(StatusCode::NOT_FOUND, response.status());
}