mirror of
https://github.com/meilisearch/meilisearch.git
synced 2024-11-26 20:15:07 +08:00
index UID format; fix #497
This commit is contained in:
parent
041eed2a06
commit
c5b6e641a4
@ -22,6 +22,7 @@ pub enum ResponseError {
|
|||||||
BadParameter(String, String),
|
BadParameter(String, String),
|
||||||
OpenIndex(String),
|
OpenIndex(String),
|
||||||
CreateIndex(String),
|
CreateIndex(String),
|
||||||
|
InvalidIndexUid,
|
||||||
Maintenance,
|
Maintenance,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,6 +109,10 @@ impl IntoResponse for ResponseError {
|
|||||||
format!("Impossible to open index; {}", err),
|
format!("Impossible to open index; {}", err),
|
||||||
StatusCode::BAD_REQUEST,
|
StatusCode::BAD_REQUEST,
|
||||||
),
|
),
|
||||||
|
ResponseError::InvalidIndexUid => error(
|
||||||
|
"Index must have a valid uid; Index uid can be of type integer or string only composed of alphanumeric characters, hyphens (-) and underscores (_).".to_string(),
|
||||||
|
StatusCode::BAD_REQUEST,
|
||||||
|
),
|
||||||
ResponseError::Maintenance => error(
|
ResponseError::Maintenance => error(
|
||||||
String::from("Server is in maintenance, please try again later"),
|
String::from("Server is in maintenance, please try again later"),
|
||||||
StatusCode::SERVICE_UNAVAILABLE,
|
StatusCode::SERVICE_UNAVAILABLE,
|
||||||
|
@ -138,7 +138,13 @@ pub async fn create_index(mut ctx: Request<Data>) -> SResult<Response> {
|
|||||||
let db = &ctx.state().db;
|
let db = &ctx.state().db;
|
||||||
|
|
||||||
let uid = match body.uid {
|
let uid = match body.uid {
|
||||||
Some(uid) => uid,
|
Some(uid) => {
|
||||||
|
if uid.chars().all(|x| x.is_ascii_alphanumeric() || x == '-' || x == '_') {
|
||||||
|
uid
|
||||||
|
} else {
|
||||||
|
return Err(ResponseError::InvalidIndexUid)
|
||||||
|
}
|
||||||
|
},
|
||||||
None => loop {
|
None => loop {
|
||||||
let uid = generate_uid();
|
let uid = generate_uid();
|
||||||
if db.open_index(&uid).is_none() {
|
if db.open_index(&uid).is_none() {
|
||||||
|
@ -14,6 +14,8 @@ fn delete() {
|
|||||||
assert_eq!(status_code, 404);
|
assert_eq!(status_code, 404);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Resolve teh issue https://github.com/meilisearch/MeiliSearch/issues/493
|
||||||
#[test]
|
#[test]
|
||||||
fn delete_batch() {
|
fn delete_batch() {
|
||||||
let mut server = common::Server::with_uid("movies");
|
let mut server = common::Server::with_uid("movies");
|
||||||
|
@ -470,8 +470,10 @@ fn create_index_failed() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Resolve issue https://github.com/meilisearch/MeiliSearch/issues/492
|
||||||
#[test]
|
#[test]
|
||||||
fn create_index_with_identifier() {
|
fn create_index_with_identifier_and_index() {
|
||||||
let mut server = common::Server::with_uid("movies");
|
let mut server = common::Server::with_uid("movies");
|
||||||
|
|
||||||
let body = json!({
|
let body = json!({
|
||||||
@ -498,3 +500,53 @@ fn create_index_with_identifier() {
|
|||||||
|
|
||||||
assert_json_eq!(response, expect, ordered: false);
|
assert_json_eq!(response, expect, ordered: false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Resolve issue https://github.com/meilisearch/MeiliSearch/issues/497
|
||||||
|
#[test]
|
||||||
|
fn create_index_with_invalid_uid() {
|
||||||
|
let mut server = common::Server::with_uid("");
|
||||||
|
|
||||||
|
let body = json!({
|
||||||
|
"uid": "the movies"
|
||||||
|
});
|
||||||
|
|
||||||
|
let (response, status_code) = server.create_index(body);
|
||||||
|
assert_eq!(status_code, 400);
|
||||||
|
|
||||||
|
let message = response["message"].as_str().unwrap();
|
||||||
|
assert_eq!(response.as_object().unwrap().len(), 1);
|
||||||
|
assert_eq!(message, "Index must have a valid uid; Index uid can be of type integer or string only composed of alphanumeric characters, hyphens (-) and underscores (_).");
|
||||||
|
|
||||||
|
let body = json!({
|
||||||
|
"uid": "%$#"
|
||||||
|
});
|
||||||
|
|
||||||
|
let (response, status_code) = server.create_index(body);
|
||||||
|
assert_eq!(status_code, 400);
|
||||||
|
|
||||||
|
let message = response["message"].as_str().unwrap();
|
||||||
|
assert_eq!(response.as_object().unwrap().len(), 1);
|
||||||
|
assert_eq!(message, "Index must have a valid uid; Index uid can be of type integer or string only composed of alphanumeric characters, hyphens (-) and underscores (_).");
|
||||||
|
|
||||||
|
let body = json!({
|
||||||
|
"uid": "the~movies"
|
||||||
|
});
|
||||||
|
|
||||||
|
let (response, status_code) = server.create_index(body);
|
||||||
|
assert_eq!(status_code, 400);
|
||||||
|
|
||||||
|
let message = response["message"].as_str().unwrap();
|
||||||
|
assert_eq!(response.as_object().unwrap().len(), 1);
|
||||||
|
assert_eq!(message, "Index must have a valid uid; Index uid can be of type integer or string only composed of alphanumeric characters, hyphens (-) and underscores (_).");
|
||||||
|
|
||||||
|
let body = json!({
|
||||||
|
"uid": "🎉"
|
||||||
|
});
|
||||||
|
|
||||||
|
let (response, status_code) = server.create_index(body);
|
||||||
|
assert_eq!(status_code, 400);
|
||||||
|
|
||||||
|
let message = response["message"].as_str().unwrap();
|
||||||
|
assert_eq!(response.as_object().unwrap().len(), 1);
|
||||||
|
assert_eq!(message, "Index must have a valid uid; Index uid can be of type integer or string only composed of alphanumeric characters, hyphens (-) and underscores (_).");
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user