2020-01-17 00:44:34 +08:00
|
|
|
use async_std::io::prelude::*;
|
2020-01-23 18:30:18 +08:00
|
|
|
use async_std::task::block_on;
|
2020-01-17 00:44:34 +08:00
|
|
|
use http_service::Body;
|
|
|
|
use serde_json::json;
|
|
|
|
use serde_json::Value;
|
2020-01-23 18:30:18 +08:00
|
|
|
use std::convert::Into;
|
2020-01-17 00:44:34 +08:00
|
|
|
|
|
|
|
mod common;
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn create_index_with_name() {
|
|
|
|
let mut server = common::setup_server().unwrap();
|
|
|
|
|
|
|
|
// 1 - Create a new index
|
|
|
|
// Index with only a name "movies"
|
|
|
|
// POST: /indexes
|
|
|
|
|
|
|
|
let body = json!({
|
|
|
|
"name": "movies",
|
2020-01-23 18:30:18 +08:00
|
|
|
})
|
|
|
|
.to_string()
|
|
|
|
.into_bytes();
|
2020-01-17 00:44:34 +08:00
|
|
|
|
2020-01-23 18:30:18 +08:00
|
|
|
let req = http::Request::post("/indexes")
|
|
|
|
.body(Body::from(body))
|
|
|
|
.unwrap();
|
2020-01-17 00:44:34 +08:00
|
|
|
let res = server.simulate(req).unwrap();
|
|
|
|
assert_eq!(res.status(), 201);
|
|
|
|
|
|
|
|
let mut buf = Vec::new();
|
|
|
|
block_on(res.into_body().read_to_end(&mut buf)).unwrap();
|
|
|
|
let res1_value: Value = serde_json::from_slice(&buf).unwrap();
|
|
|
|
|
|
|
|
assert_eq!(res1_value.as_object().unwrap().len(), 4);
|
|
|
|
let r1_name = res1_value["name"].as_str().unwrap();
|
|
|
|
let r1_uid = res1_value["uid"].as_str().unwrap();
|
|
|
|
let r1_created_at = res1_value["createdAt"].as_str().unwrap();
|
|
|
|
let r1_updated_at = res1_value["updatedAt"].as_str().unwrap();
|
|
|
|
|
|
|
|
assert_eq!(r1_name, "movies");
|
|
|
|
assert_eq!(r1_uid.len(), 8);
|
|
|
|
assert_eq!(r1_created_at.len(), 27);
|
|
|
|
assert_eq!(r1_updated_at.len(), 27);
|
|
|
|
|
|
|
|
// 2 - Check the list of indexes
|
|
|
|
// Must have 1 index with the exact same content that the request 1
|
|
|
|
// GET: /indexes
|
|
|
|
|
|
|
|
let req = http::Request::get("/indexes").body(Body::empty()).unwrap();
|
|
|
|
let res = server.simulate(req).unwrap();
|
|
|
|
assert_eq!(res.status(), 200);
|
|
|
|
|
|
|
|
let mut buf = Vec::new();
|
|
|
|
block_on(res.into_body().read_to_end(&mut buf)).unwrap();
|
|
|
|
let res2_value: Value = serde_json::from_slice(&buf).unwrap();
|
|
|
|
|
|
|
|
assert_eq!(res2_value.as_array().unwrap().len(), 1);
|
|
|
|
assert_eq!(res2_value[0].as_object().unwrap().len(), 4);
|
|
|
|
let r2_name = res2_value[0]["name"].as_str().unwrap();
|
|
|
|
let r2_uid = res2_value[0]["uid"].as_str().unwrap();
|
|
|
|
let r2_created_at = res2_value[0]["createdAt"].as_str().unwrap();
|
|
|
|
let r2_updated_at = res2_value[0]["updatedAt"].as_str().unwrap();
|
|
|
|
|
|
|
|
assert_eq!(r2_name, r1_name);
|
|
|
|
assert_eq!(r2_uid.len(), r1_uid.len());
|
|
|
|
assert_eq!(r2_created_at.len(), r1_created_at.len());
|
|
|
|
assert_eq!(r2_updated_at.len(), r1_updated_at.len());
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn create_index_with_uid() {
|
|
|
|
let mut server = common::setup_server().unwrap();
|
|
|
|
|
|
|
|
// 1 - Create a new index
|
|
|
|
// Index with only an uid "movies"
|
|
|
|
// POST: /indexes
|
|
|
|
|
|
|
|
let body = json!({
|
|
|
|
"uid": "movies",
|
2020-01-23 18:30:18 +08:00
|
|
|
})
|
|
|
|
.to_string()
|
|
|
|
.into_bytes();
|
2020-01-17 00:44:34 +08:00
|
|
|
|
2020-01-23 18:30:18 +08:00
|
|
|
let req = http::Request::post("/indexes")
|
|
|
|
.body(Body::from(body))
|
|
|
|
.unwrap();
|
2020-01-17 00:44:34 +08:00
|
|
|
let res = server.simulate(req).unwrap();
|
|
|
|
assert_eq!(res.status(), 201);
|
|
|
|
|
|
|
|
let mut buf = Vec::new();
|
|
|
|
block_on(res.into_body().read_to_end(&mut buf)).unwrap();
|
|
|
|
let res1_value: Value = serde_json::from_slice(&buf).unwrap();
|
|
|
|
|
|
|
|
assert_eq!(res1_value.as_object().unwrap().len(), 4);
|
|
|
|
let r1_name = res1_value["name"].as_str().unwrap();
|
|
|
|
let r1_uid = res1_value["uid"].as_str().unwrap();
|
|
|
|
let r1_created_at = res1_value["createdAt"].as_str().unwrap();
|
|
|
|
let r1_updated_at = res1_value["updatedAt"].as_str().unwrap();
|
|
|
|
|
|
|
|
assert_eq!(r1_name, "movies");
|
|
|
|
assert_eq!(r1_uid, "movies");
|
|
|
|
assert_eq!(r1_created_at.len(), 27);
|
|
|
|
assert_eq!(r1_updated_at.len(), 27);
|
|
|
|
|
|
|
|
// 2 - Check the list of indexes
|
|
|
|
// Must have 1 index with the exact same content that the request 1
|
|
|
|
// GET: /indexes
|
|
|
|
|
|
|
|
let req = http::Request::get("/indexes").body(Body::empty()).unwrap();
|
|
|
|
let res = server.simulate(req).unwrap();
|
|
|
|
assert_eq!(res.status(), 200);
|
|
|
|
|
|
|
|
let mut buf = Vec::new();
|
|
|
|
block_on(res.into_body().read_to_end(&mut buf)).unwrap();
|
|
|
|
let res2_value: Value = serde_json::from_slice(&buf).unwrap();
|
|
|
|
|
|
|
|
assert_eq!(res2_value.as_array().unwrap().len(), 1);
|
|
|
|
assert_eq!(res2_value[0].as_object().unwrap().len(), 4);
|
|
|
|
let r2_name = res2_value[0]["name"].as_str().unwrap();
|
|
|
|
let r2_uid = res2_value[0]["uid"].as_str().unwrap();
|
|
|
|
let r2_created_at = res2_value[0]["createdAt"].as_str().unwrap();
|
|
|
|
let r2_updated_at = res2_value[0]["updatedAt"].as_str().unwrap();
|
|
|
|
|
|
|
|
assert_eq!(r2_name, r1_name);
|
|
|
|
assert_eq!(r2_uid, r1_uid);
|
|
|
|
assert_eq!(r2_created_at.len(), r1_created_at.len());
|
|
|
|
assert_eq!(r2_updated_at.len(), r1_updated_at.len());
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn create_index_with_name_and_uid() {
|
|
|
|
let mut server = common::setup_server().unwrap();
|
|
|
|
|
|
|
|
// 1 - Create a new index
|
|
|
|
// Index with a name "Films" and an uid "fn_movies"
|
|
|
|
// POST: /indexes
|
|
|
|
|
|
|
|
let body = json!({
|
|
|
|
"name": "Films",
|
|
|
|
"uid": "fr_movies",
|
2020-01-23 18:30:18 +08:00
|
|
|
})
|
|
|
|
.to_string()
|
|
|
|
.into_bytes();
|
2020-01-17 00:44:34 +08:00
|
|
|
|
2020-01-23 18:30:18 +08:00
|
|
|
let req = http::Request::post("/indexes")
|
|
|
|
.body(Body::from(body))
|
|
|
|
.unwrap();
|
2020-01-17 00:44:34 +08:00
|
|
|
let res = server.simulate(req).unwrap();
|
|
|
|
assert_eq!(res.status(), 201);
|
|
|
|
|
|
|
|
let mut buf = Vec::new();
|
|
|
|
block_on(res.into_body().read_to_end(&mut buf)).unwrap();
|
|
|
|
let res1_value: Value = serde_json::from_slice(&buf).unwrap();
|
|
|
|
|
|
|
|
assert_eq!(res1_value.as_object().unwrap().len(), 4);
|
|
|
|
let r1_name = res1_value["name"].as_str().unwrap();
|
|
|
|
let r1_uid = res1_value["uid"].as_str().unwrap();
|
|
|
|
let r1_created_at = res1_value["createdAt"].as_str().unwrap();
|
|
|
|
let r1_updated_at = res1_value["updatedAt"].as_str().unwrap();
|
|
|
|
|
|
|
|
assert_eq!(r1_name, "Films");
|
|
|
|
assert_eq!(r1_uid, "fr_movies");
|
|
|
|
assert_eq!(r1_created_at.len(), 27);
|
|
|
|
assert_eq!(r1_updated_at.len(), 27);
|
|
|
|
|
|
|
|
// 2 - Check the list of indexes
|
|
|
|
// Must have 1 index with the exact same content that the request 1
|
|
|
|
// GET: /indexes
|
|
|
|
|
|
|
|
let req = http::Request::get("/indexes").body(Body::empty()).unwrap();
|
|
|
|
let res = server.simulate(req).unwrap();
|
|
|
|
assert_eq!(res.status(), 200);
|
|
|
|
|
|
|
|
let mut buf = Vec::new();
|
|
|
|
block_on(res.into_body().read_to_end(&mut buf)).unwrap();
|
|
|
|
let res2_value: Value = serde_json::from_slice(&buf).unwrap();
|
|
|
|
|
|
|
|
assert_eq!(res2_value.as_array().unwrap().len(), 1);
|
|
|
|
assert_eq!(res2_value[0].as_object().unwrap().len(), 4);
|
|
|
|
let r2_name = res2_value[0]["name"].as_str().unwrap();
|
|
|
|
let r2_uid = res2_value[0]["uid"].as_str().unwrap();
|
|
|
|
let r2_created_at = res2_value[0]["createdAt"].as_str().unwrap();
|
|
|
|
let r2_updated_at = res2_value[0]["updatedAt"].as_str().unwrap();
|
|
|
|
|
|
|
|
assert_eq!(r2_name, r1_name);
|
|
|
|
assert_eq!(r2_uid, r1_uid);
|
|
|
|
assert_eq!(r2_created_at.len(), r1_created_at.len());
|
|
|
|
assert_eq!(r2_updated_at.len(), r1_updated_at.len());
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn rename_index() {
|
|
|
|
let mut server = common::setup_server().unwrap();
|
|
|
|
// 1 - Create a new index
|
|
|
|
// Index with only a name "movies"
|
|
|
|
// POST: /indexes
|
|
|
|
|
|
|
|
let body = json!({
|
|
|
|
"name": "movies",
|
2020-01-23 18:30:18 +08:00
|
|
|
})
|
|
|
|
.to_string()
|
|
|
|
.into_bytes();
|
2020-01-17 00:44:34 +08:00
|
|
|
|
2020-01-23 18:30:18 +08:00
|
|
|
let req = http::Request::post("/indexes")
|
|
|
|
.body(Body::from(body))
|
|
|
|
.unwrap();
|
2020-01-17 00:44:34 +08:00
|
|
|
let res = server.simulate(req).unwrap();
|
|
|
|
assert_eq!(res.status(), 201);
|
|
|
|
|
|
|
|
let mut buf = Vec::new();
|
|
|
|
block_on(res.into_body().read_to_end(&mut buf)).unwrap();
|
|
|
|
let res1_value: Value = serde_json::from_slice(&buf).unwrap();
|
|
|
|
|
|
|
|
assert_eq!(res1_value.as_object().unwrap().len(), 4);
|
|
|
|
let r1_name = res1_value["name"].as_str().unwrap();
|
|
|
|
let r1_uid = res1_value["uid"].as_str().unwrap();
|
|
|
|
let r1_created_at = res1_value["createdAt"].as_str().unwrap();
|
|
|
|
let r1_updated_at = res1_value["updatedAt"].as_str().unwrap();
|
|
|
|
|
|
|
|
assert_eq!(r1_name, "movies");
|
|
|
|
assert_eq!(r1_uid.len(), 8);
|
|
|
|
assert_eq!(r1_created_at.len(), 27);
|
|
|
|
assert_eq!(r1_updated_at.len(), 27);
|
|
|
|
|
|
|
|
// 2 - Update an index name
|
|
|
|
// Update "movies" to "TV Shows"
|
|
|
|
// PUT: /indexes/:uid
|
|
|
|
|
|
|
|
let body = json!({
|
|
|
|
"name": "TV Shows",
|
2020-01-23 18:30:18 +08:00
|
|
|
})
|
|
|
|
.to_string()
|
|
|
|
.into_bytes();
|
2020-01-17 00:44:34 +08:00
|
|
|
|
2020-01-23 18:30:18 +08:00
|
|
|
let req = http::Request::put(format!("/indexes/{}", r1_uid))
|
|
|
|
.body(Body::from(body))
|
|
|
|
.unwrap();
|
2020-01-17 00:44:34 +08:00
|
|
|
let res = server.simulate(req).unwrap();
|
|
|
|
assert_eq!(res.status(), 200);
|
|
|
|
|
|
|
|
let mut buf = Vec::new();
|
|
|
|
block_on(res.into_body().read_to_end(&mut buf)).unwrap();
|
|
|
|
let res2_value: Value = serde_json::from_slice(&buf).unwrap();
|
|
|
|
|
|
|
|
assert_eq!(res2_value.as_object().unwrap().len(), 4);
|
|
|
|
let r2_name = res2_value["name"].as_str().unwrap();
|
|
|
|
let r2_uid = res2_value["uid"].as_str().unwrap();
|
|
|
|
let r2_created_at = res2_value["createdAt"].as_str().unwrap();
|
|
|
|
let r2_updated_at = res2_value["updatedAt"].as_str().unwrap();
|
|
|
|
|
|
|
|
assert_eq!(r2_name, "TV Shows");
|
|
|
|
assert_eq!(r2_uid, r1_uid);
|
|
|
|
assert_eq!(r2_created_at, r1_created_at);
|
|
|
|
assert_eq!(r2_updated_at.len(), 27);
|
|
|
|
|
|
|
|
// 3 - Check the list of indexes
|
|
|
|
// Must have 1 index with the exact same content that the request 2
|
|
|
|
// GET: /indexes
|
|
|
|
|
|
|
|
let req = http::Request::get("/indexes").body(Body::empty()).unwrap();
|
|
|
|
let res = server.simulate(req).unwrap();
|
|
|
|
assert_eq!(res.status(), 200);
|
|
|
|
|
|
|
|
let mut buf = Vec::new();
|
|
|
|
block_on(res.into_body().read_to_end(&mut buf)).unwrap();
|
|
|
|
let res3_value: Value = serde_json::from_slice(&buf).unwrap();
|
|
|
|
|
|
|
|
assert_eq!(res3_value.as_array().unwrap().len(), 1);
|
|
|
|
assert_eq!(res3_value[0].as_object().unwrap().len(), 4);
|
|
|
|
let r3_name = res3_value[0]["name"].as_str().unwrap();
|
|
|
|
let r3_uid = res3_value[0]["uid"].as_str().unwrap();
|
|
|
|
let r3_created_at = res3_value[0]["createdAt"].as_str().unwrap();
|
|
|
|
let r3_updated_at = res3_value[0]["updatedAt"].as_str().unwrap();
|
|
|
|
|
|
|
|
assert_eq!(r3_name, r2_name);
|
|
|
|
assert_eq!(r3_uid.len(), r1_uid.len());
|
|
|
|
assert_eq!(r3_created_at.len(), r1_created_at.len());
|
|
|
|
assert_eq!(r3_updated_at.len(), r2_updated_at.len());
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn delete_index_and_recreate_it() {
|
|
|
|
let mut server = common::setup_server().unwrap();
|
|
|
|
|
|
|
|
// 1 - Create a new index
|
|
|
|
// Index with only a name "movies"
|
|
|
|
// POST: /indexes
|
|
|
|
|
|
|
|
let body = json!({
|
|
|
|
"name": "movies",
|
2020-01-23 18:30:18 +08:00
|
|
|
})
|
|
|
|
.to_string()
|
|
|
|
.into_bytes();
|
2020-01-17 00:44:34 +08:00
|
|
|
|
2020-01-23 18:30:18 +08:00
|
|
|
let req = http::Request::post("/indexes")
|
|
|
|
.body(Body::from(body))
|
|
|
|
.unwrap();
|
2020-01-17 00:44:34 +08:00
|
|
|
let res = server.simulate(req).unwrap();
|
|
|
|
assert_eq!(res.status(), 201);
|
|
|
|
|
|
|
|
let mut buf = Vec::new();
|
|
|
|
block_on(res.into_body().read_to_end(&mut buf)).unwrap();
|
|
|
|
let res1_value: Value = serde_json::from_slice(&buf).unwrap();
|
|
|
|
|
|
|
|
assert_eq!(res1_value.as_object().unwrap().len(), 4);
|
|
|
|
let r1_name = res1_value["name"].as_str().unwrap();
|
|
|
|
let r1_uid = res1_value["uid"].as_str().unwrap();
|
|
|
|
let r1_created_at = res1_value["createdAt"].as_str().unwrap();
|
|
|
|
let r1_updated_at = res1_value["updatedAt"].as_str().unwrap();
|
|
|
|
|
|
|
|
assert_eq!(r1_name, "movies");
|
|
|
|
assert_eq!(r1_uid.len(), 8);
|
|
|
|
assert_eq!(r1_created_at.len(), 27);
|
|
|
|
assert_eq!(r1_updated_at.len(), 27);
|
|
|
|
|
|
|
|
// 2 - Check the list of indexes
|
|
|
|
// Must have 1 index with the exact same content that the request 1
|
|
|
|
// GET: /indexes
|
|
|
|
|
|
|
|
let req = http::Request::get("/indexes").body(Body::empty()).unwrap();
|
|
|
|
let res = server.simulate(req).unwrap();
|
|
|
|
assert_eq!(res.status(), 200);
|
|
|
|
|
|
|
|
let mut buf = Vec::new();
|
|
|
|
block_on(res.into_body().read_to_end(&mut buf)).unwrap();
|
|
|
|
let res2_value: Value = serde_json::from_slice(&buf).unwrap();
|
|
|
|
|
|
|
|
assert_eq!(res2_value.as_array().unwrap().len(), 1);
|
|
|
|
assert_eq!(res2_value[0].as_object().unwrap().len(), 4);
|
|
|
|
let r2_name = res2_value[0]["name"].as_str().unwrap();
|
|
|
|
let r2_uid = res2_value[0]["uid"].as_str().unwrap();
|
|
|
|
let r2_created_at = res2_value[0]["createdAt"].as_str().unwrap();
|
|
|
|
let r2_updated_at = res2_value[0]["updatedAt"].as_str().unwrap();
|
|
|
|
|
|
|
|
assert_eq!(r2_name, r1_name);
|
|
|
|
assert_eq!(r2_uid.len(), r1_uid.len());
|
|
|
|
assert_eq!(r2_created_at.len(), r1_created_at.len());
|
|
|
|
assert_eq!(r2_updated_at.len(), r1_updated_at.len());
|
|
|
|
|
|
|
|
// 3- Delete an index
|
|
|
|
// Update "movies" to "TV Shows"
|
|
|
|
// DELETE: /indexes/:uid
|
|
|
|
|
2020-01-23 18:30:18 +08:00
|
|
|
let req = http::Request::delete(format!("/indexes/{}", r1_uid))
|
|
|
|
.body(Body::empty())
|
|
|
|
.unwrap();
|
2020-01-17 00:44:34 +08:00
|
|
|
let res = server.simulate(req).unwrap();
|
|
|
|
assert_eq!(res.status(), 204);
|
|
|
|
|
|
|
|
let mut buf = Vec::new();
|
|
|
|
block_on(res.into_body().read_to_end(&mut buf)).unwrap();
|
|
|
|
assert_eq!(buf.len(), 0);
|
|
|
|
|
|
|
|
// 4 - Check the list of indexes
|
|
|
|
// Must have 0 index
|
|
|
|
// GET: /indexes
|
|
|
|
|
|
|
|
let req = http::Request::get("/indexes").body(Body::empty()).unwrap();
|
|
|
|
let res = server.simulate(req).unwrap();
|
|
|
|
assert_eq!(res.status(), 200);
|
|
|
|
|
|
|
|
let mut buf = Vec::new();
|
|
|
|
block_on(res.into_body().read_to_end(&mut buf)).unwrap();
|
|
|
|
let res2_value: Value = serde_json::from_slice(&buf).unwrap();
|
|
|
|
|
|
|
|
assert_eq!(res2_value.as_array().unwrap().len(), 0);
|
|
|
|
|
|
|
|
// 5 - Create a new index
|
|
|
|
// Index with only a name "movies"
|
|
|
|
// POST: /indexes
|
|
|
|
|
|
|
|
let body = json!({
|
|
|
|
"name": "movies",
|
2020-01-23 18:30:18 +08:00
|
|
|
})
|
|
|
|
.to_string()
|
|
|
|
.into_bytes();
|
2020-01-17 00:44:34 +08:00
|
|
|
|
2020-01-23 18:30:18 +08:00
|
|
|
let req = http::Request::post("/indexes")
|
|
|
|
.body(Body::from(body))
|
|
|
|
.unwrap();
|
2020-01-17 00:44:34 +08:00
|
|
|
let res = server.simulate(req).unwrap();
|
|
|
|
assert_eq!(res.status(), 201);
|
|
|
|
|
|
|
|
let mut buf = Vec::new();
|
|
|
|
block_on(res.into_body().read_to_end(&mut buf)).unwrap();
|
|
|
|
let res1_value: Value = serde_json::from_slice(&buf).unwrap();
|
|
|
|
|
|
|
|
assert_eq!(res1_value.as_object().unwrap().len(), 4);
|
|
|
|
let r1_name = res1_value["name"].as_str().unwrap();
|
|
|
|
let r1_uid = res1_value["uid"].as_str().unwrap();
|
|
|
|
let r1_created_at = res1_value["createdAt"].as_str().unwrap();
|
|
|
|
let r1_updated_at = res1_value["updatedAt"].as_str().unwrap();
|
|
|
|
|
|
|
|
assert_eq!(r1_name, "movies");
|
|
|
|
assert_eq!(r1_uid.len(), 8);
|
|
|
|
assert_eq!(r1_created_at.len(), 27);
|
|
|
|
assert_eq!(r1_updated_at.len(), 27);
|
|
|
|
|
|
|
|
// 6 - Check the list of indexes
|
|
|
|
// Must have 1 index with the exact same content that the request 1
|
|
|
|
// GET: /indexes
|
|
|
|
|
|
|
|
let req = http::Request::get("/indexes").body(Body::empty()).unwrap();
|
|
|
|
let res = server.simulate(req).unwrap();
|
|
|
|
assert_eq!(res.status(), 200);
|
|
|
|
|
|
|
|
let mut buf = Vec::new();
|
|
|
|
block_on(res.into_body().read_to_end(&mut buf)).unwrap();
|
|
|
|
let res2_value: Value = serde_json::from_slice(&buf).unwrap();
|
|
|
|
|
|
|
|
assert_eq!(res2_value.as_array().unwrap().len(), 1);
|
|
|
|
assert_eq!(res2_value[0].as_object().unwrap().len(), 4);
|
|
|
|
let r2_name = res2_value[0]["name"].as_str().unwrap();
|
|
|
|
let r2_uid = res2_value[0]["uid"].as_str().unwrap();
|
|
|
|
let r2_created_at = res2_value[0]["createdAt"].as_str().unwrap();
|
|
|
|
let r2_updated_at = res2_value[0]["updatedAt"].as_str().unwrap();
|
|
|
|
|
|
|
|
assert_eq!(r2_name, r1_name);
|
|
|
|
assert_eq!(r2_uid.len(), r1_uid.len());
|
|
|
|
assert_eq!(r2_created_at.len(), r1_created_at.len());
|
|
|
|
assert_eq!(r2_updated_at.len(), r1_updated_at.len());
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_multiples_indexes() {
|
|
|
|
let mut server = common::setup_server().unwrap();
|
|
|
|
|
|
|
|
// 1 - Create a new index
|
|
|
|
// Index with only a name "movies"
|
|
|
|
// POST: /indexes
|
|
|
|
|
|
|
|
let body = json!({
|
|
|
|
"name": "movies",
|
2020-01-23 18:30:18 +08:00
|
|
|
})
|
|
|
|
.to_string()
|
|
|
|
.into_bytes();
|
2020-01-17 00:44:34 +08:00
|
|
|
|
2020-01-23 18:30:18 +08:00
|
|
|
let req = http::Request::post("/indexes")
|
|
|
|
.body(Body::from(body))
|
|
|
|
.unwrap();
|
2020-01-17 00:44:34 +08:00
|
|
|
let res = server.simulate(req).unwrap();
|
|
|
|
assert_eq!(res.status(), 201);
|
|
|
|
|
|
|
|
let mut buf = Vec::new();
|
|
|
|
block_on(res.into_body().read_to_end(&mut buf)).unwrap();
|
|
|
|
let res1_value: Value = serde_json::from_slice(&buf).unwrap();
|
|
|
|
|
|
|
|
assert_eq!(res1_value.as_object().unwrap().len(), 4);
|
|
|
|
let r1_name = res1_value["name"].as_str().unwrap();
|
|
|
|
let r1_uid = res1_value["uid"].as_str().unwrap();
|
|
|
|
let r1_created_at = res1_value["createdAt"].as_str().unwrap();
|
|
|
|
let r1_updated_at = res1_value["updatedAt"].as_str().unwrap();
|
|
|
|
|
|
|
|
assert_eq!(r1_name, "movies");
|
|
|
|
assert_eq!(r1_uid.len(), 8);
|
|
|
|
assert_eq!(r1_created_at.len(), 27);
|
|
|
|
assert_eq!(r1_updated_at.len(), 27);
|
|
|
|
|
|
|
|
// 2 - Check the list of indexes
|
|
|
|
// Must have 1 index with the exact same content that the request 1
|
|
|
|
// GET: /indexes
|
|
|
|
|
|
|
|
let req = http::Request::get("/indexes").body(Body::empty()).unwrap();
|
|
|
|
let res = server.simulate(req).unwrap();
|
|
|
|
assert_eq!(res.status(), 200);
|
|
|
|
|
|
|
|
let mut buf = Vec::new();
|
|
|
|
block_on(res.into_body().read_to_end(&mut buf)).unwrap();
|
|
|
|
let res2_value: Value = serde_json::from_slice(&buf).unwrap();
|
|
|
|
|
|
|
|
assert_eq!(res2_value.as_array().unwrap().len(), 1);
|
|
|
|
assert_eq!(res2_value[0].as_object().unwrap().len(), 4);
|
|
|
|
let r2_0_name = res2_value[0]["name"].as_str().unwrap();
|
|
|
|
let r2_0_uid = res2_value[0]["uid"].as_str().unwrap();
|
|
|
|
let r2_0_created_at = res2_value[0]["createdAt"].as_str().unwrap();
|
|
|
|
let r2_0_updated_at = res2_value[0]["updatedAt"].as_str().unwrap();
|
|
|
|
|
|
|
|
assert_eq!(r2_0_name, r1_name);
|
|
|
|
assert_eq!(r2_0_uid.len(), r1_uid.len());
|
|
|
|
assert_eq!(r2_0_created_at.len(), r1_created_at.len());
|
|
|
|
assert_eq!(r2_0_updated_at.len(), r1_updated_at.len());
|
|
|
|
|
|
|
|
// 3 - Create a new index
|
|
|
|
// Index with only a name "films"
|
|
|
|
// POST: /indexes
|
|
|
|
|
|
|
|
let body = json!({
|
|
|
|
"name": "films",
|
2020-01-23 18:30:18 +08:00
|
|
|
})
|
|
|
|
.to_string()
|
|
|
|
.into_bytes();
|
2020-01-17 00:44:34 +08:00
|
|
|
|
2020-01-23 18:30:18 +08:00
|
|
|
let req = http::Request::post("/indexes")
|
|
|
|
.body(Body::from(body))
|
|
|
|
.unwrap();
|
2020-01-17 00:44:34 +08:00
|
|
|
let res = server.simulate(req).unwrap();
|
|
|
|
assert_eq!(res.status(), 201);
|
|
|
|
|
|
|
|
let mut buf = Vec::new();
|
|
|
|
block_on(res.into_body().read_to_end(&mut buf)).unwrap();
|
|
|
|
let res3_value: Value = serde_json::from_slice(&buf).unwrap();
|
|
|
|
|
|
|
|
assert_eq!(res3_value.as_object().unwrap().len(), 4);
|
|
|
|
let r3_name = res3_value["name"].as_str().unwrap();
|
|
|
|
let r3_uid = res3_value["uid"].as_str().unwrap();
|
|
|
|
let r3_created_at = res3_value["createdAt"].as_str().unwrap();
|
|
|
|
let r3_updated_at = res3_value["updatedAt"].as_str().unwrap();
|
|
|
|
|
|
|
|
assert_eq!(r3_name, "films");
|
|
|
|
assert_eq!(r3_uid.len(), 8);
|
|
|
|
assert_eq!(r3_created_at.len(), 27);
|
|
|
|
assert_eq!(r3_updated_at.len(), 27);
|
|
|
|
|
|
|
|
// 4 - Check the list of indexes
|
|
|
|
// Must have 2 index with the exact same content that the request 1 and 3
|
|
|
|
// GET: /indexes
|
|
|
|
|
|
|
|
let req = http::Request::get("/indexes").body(Body::empty()).unwrap();
|
|
|
|
let res = server.simulate(req).unwrap();
|
|
|
|
assert_eq!(res.status(), 200);
|
|
|
|
|
|
|
|
let mut buf = Vec::new();
|
|
|
|
block_on(res.into_body().read_to_end(&mut buf)).unwrap();
|
|
|
|
let res4_value: Value = serde_json::from_slice(&buf).unwrap();
|
|
|
|
|
|
|
|
assert_eq!(res4_value.as_array().unwrap().len(), 2);
|
|
|
|
|
|
|
|
assert_eq!(res4_value[0].as_object().unwrap().len(), 4);
|
|
|
|
let r4_0_name = res4_value[0]["name"].as_str().unwrap();
|
|
|
|
let r4_0_uid = res4_value[0]["uid"].as_str().unwrap();
|
|
|
|
let r4_0_created_at = res4_value[0]["createdAt"].as_str().unwrap();
|
|
|
|
let r4_0_updated_at = res4_value[0]["updatedAt"].as_str().unwrap();
|
|
|
|
|
|
|
|
assert_eq!(res4_value[1].as_object().unwrap().len(), 4);
|
|
|
|
let r4_1_name = res4_value[1]["name"].as_str().unwrap();
|
|
|
|
let r4_1_uid = res4_value[1]["uid"].as_str().unwrap();
|
|
|
|
let r4_1_created_at = res4_value[1]["createdAt"].as_str().unwrap();
|
|
|
|
let r4_1_updated_at = res4_value[1]["updatedAt"].as_str().unwrap();
|
|
|
|
|
|
|
|
if r4_0_name == r1_name {
|
|
|
|
assert_eq!(r4_0_name, r1_name);
|
|
|
|
assert_eq!(r4_0_uid.len(), r1_uid.len());
|
|
|
|
assert_eq!(r4_0_created_at.len(), r1_created_at.len());
|
|
|
|
assert_eq!(r4_0_updated_at.len(), r1_updated_at.len());
|
|
|
|
} else {
|
|
|
|
assert_eq!(r4_0_name, r3_name);
|
|
|
|
assert_eq!(r4_0_uid.len(), r3_uid.len());
|
|
|
|
assert_eq!(r4_0_created_at.len(), r3_created_at.len());
|
|
|
|
assert_eq!(r4_0_updated_at.len(), r3_updated_at.len());
|
|
|
|
}
|
|
|
|
|
|
|
|
if r4_1_name == r1_name {
|
|
|
|
assert_eq!(r4_1_name, r1_name);
|
|
|
|
assert_eq!(r4_1_uid.len(), r1_uid.len());
|
|
|
|
assert_eq!(r4_1_created_at.len(), r1_created_at.len());
|
|
|
|
assert_eq!(r4_1_updated_at.len(), r1_updated_at.len());
|
|
|
|
} else {
|
|
|
|
assert_eq!(r4_1_name, r3_name);
|
|
|
|
assert_eq!(r4_1_uid.len(), r3_uid.len());
|
|
|
|
assert_eq!(r4_1_created_at.len(), r3_created_at.len());
|
|
|
|
assert_eq!(r4_1_updated_at.len(), r3_updated_at.len());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn create_index_failed() {
|
|
|
|
let mut server = common::setup_server().unwrap();
|
|
|
|
|
|
|
|
// 1 - Push index creation with empty body
|
|
|
|
// POST: /indexes
|
|
|
|
|
|
|
|
let req = http::Request::post("/indexes").body(Body::empty()).unwrap();
|
|
|
|
let res = server.simulate(req).unwrap();
|
|
|
|
assert_eq!(res.status(), 400);
|
|
|
|
|
|
|
|
let mut buf = Vec::new();
|
|
|
|
block_on(res.into_body().read_to_end(&mut buf)).unwrap();
|
|
|
|
let res_value: Value = serde_json::from_slice(&buf).unwrap();
|
|
|
|
|
|
|
|
let message = res_value["message"].as_str().unwrap();
|
|
|
|
assert_eq!(res_value.as_object().unwrap().len(), 1);
|
|
|
|
assert_eq!(message, "invalid data");
|
|
|
|
|
|
|
|
// 2 - Push index creation with empty json body
|
|
|
|
// POST: /indexes
|
|
|
|
|
|
|
|
let body = json!({}).to_string().into_bytes();
|
|
|
|
|
2020-01-23 18:30:18 +08:00
|
|
|
let req = http::Request::post("/indexes")
|
|
|
|
.body(Body::from(body))
|
|
|
|
.unwrap();
|
2020-01-17 00:44:34 +08:00
|
|
|
let res = server.simulate(req).unwrap();
|
|
|
|
assert_eq!(res.status(), 400);
|
|
|
|
|
|
|
|
let mut buf = Vec::new();
|
|
|
|
block_on(res.into_body().read_to_end(&mut buf)).unwrap();
|
|
|
|
let res_value: Value = serde_json::from_slice(&buf).unwrap();
|
|
|
|
|
|
|
|
let message = res_value["message"].as_str().unwrap();
|
|
|
|
assert_eq!(res_value.as_object().unwrap().len(), 1);
|
|
|
|
assert_eq!(message, "Index creation must have an uid");
|
|
|
|
|
|
|
|
// 3 - Create a index with extra data
|
|
|
|
// POST: /indexes
|
|
|
|
|
|
|
|
let body = json!({
|
|
|
|
"name": "movies",
|
|
|
|
"active": true
|
2020-01-23 18:30:18 +08:00
|
|
|
})
|
|
|
|
.to_string()
|
|
|
|
.into_bytes();
|
2020-01-17 00:44:34 +08:00
|
|
|
|
2020-01-23 18:30:18 +08:00
|
|
|
let req = http::Request::post("/indexes")
|
|
|
|
.body(Body::from(body))
|
|
|
|
.unwrap();
|
2020-01-17 00:44:34 +08:00
|
|
|
let res = server.simulate(req).unwrap();
|
|
|
|
assert_eq!(res.status(), 400);
|
|
|
|
|
|
|
|
let mut buf = Vec::new();
|
|
|
|
block_on(res.into_body().read_to_end(&mut buf)).unwrap();
|
|
|
|
let res_value: Value = serde_json::from_slice(&buf).unwrap();
|
|
|
|
|
|
|
|
let message = res_value["message"].as_str().unwrap();
|
|
|
|
assert_eq!(res_value.as_object().unwrap().len(), 1);
|
|
|
|
assert_eq!(message, "invalid data");
|
|
|
|
|
|
|
|
// 3 - Create a index with wrong data type
|
|
|
|
// POST: /indexes
|
|
|
|
|
|
|
|
let body = json!({
|
|
|
|
"name": "movies",
|
|
|
|
"uid": 0
|
2020-01-23 18:30:18 +08:00
|
|
|
})
|
|
|
|
.to_string()
|
|
|
|
.into_bytes();
|
2020-01-17 00:44:34 +08:00
|
|
|
|
2020-01-23 18:30:18 +08:00
|
|
|
let req = http::Request::post("/indexes")
|
|
|
|
.body(Body::from(body))
|
|
|
|
.unwrap();
|
2020-01-17 00:44:34 +08:00
|
|
|
let res = server.simulate(req).unwrap();
|
|
|
|
assert_eq!(res.status(), 400);
|
|
|
|
|
|
|
|
let mut buf = Vec::new();
|
|
|
|
block_on(res.into_body().read_to_end(&mut buf)).unwrap();
|
|
|
|
let res_value: Value = serde_json::from_slice(&buf).unwrap();
|
|
|
|
|
|
|
|
let message = res_value["message"].as_str().unwrap();
|
|
|
|
assert_eq!(res_value.as_object().unwrap().len(), 1);
|
|
|
|
assert_eq!(message, "invalid data");
|
|
|
|
}
|