Add tests

This commit is contained in:
Mubelotix
2025-07-21 14:39:57 +02:00
parent ab80bfc4ee
commit 8a40be1840
5 changed files with 126 additions and 33 deletions

View File

@ -554,3 +554,101 @@ async fn fields() {
}
"#);
}
#[actix_rt::test]
async fn document_not_found() {
let index = shared_index_for_fragments().await;
let (value, code) = index
.render(json! {{
"template": { "id": "embedders.rest.indexingFragments.basic" },
"input": { "documentId": "9999" }
}})
.await;
snapshot!(code, @"404 Not Found");
snapshot!(value, @r#"
{
"message": "Document with ID `9999` not found.",
"code": "render_document_not_found",
"type": "invalid_request",
"link": "https://docs.meilisearch.com/errors#render_document_not_found"
}
"#);
}
#[actix_rt::test]
async fn bad_template() {
let index = shared_index_for_fragments().await;
let (value, code) = index
.render(json! {{
"template": { "inline": "{{ doc.name" },
"input": { "documentId": "0" }
}})
.await;
snapshot!(code, @"400 Bad Request");
snapshot!(value, @r#"
{
"message": "Error parsing template: error while parsing template: liquid: --> 1:4\n |\n1 | {{ doc.name\n | ^---\n |\n = expected Literal\n",
"code": "template_parsing_error",
"type": "invalid_request",
"link": "https://docs.meilisearch.com/errors#template_parsing_error"
}
"#);
}
#[actix_rt::test]
async fn inline_nested() {
let index = shared_index_for_fragments().await;
let (value, code) = index
.render(json! {{
"template": { "inline": "{{ doc.name }} is a {{ doc.breed.name }} ({{ doc.breed.kind }})" },
"input": { "inline": { "doc": { "name": "iko", "breed": { "name": "jack russell", "kind": "terrier" } } } }
}})
.await;
snapshot!(code, @"200 OK");
snapshot!(value, @r#"
{
"template": "{{ doc.name }} is a {{ doc.breed.name }} ({{ doc.breed.kind }})",
"rendered": "iko is a jack russell (terrier)"
}
"#);
}
#[actix_rt::test]
async fn embedder_document_template() {
let (_mock, setting) = crate::vector::rest::create_mock().await;
let server = Server::new().await;
let index = server.index("doggo");
let (response, code) = index
.update_settings(json!({
"embedders": {
"rest": setting,
},
}))
.await;
snapshot!(code, @"202 Accepted");
server.wait_task(response.uid()).await.succeeded();
let documents = json!([
{"id": 0, "name": "kefir"},
]);
let (value, code) = index.add_documents(documents, None).await;
snapshot!(code, @"202 Accepted");
index.wait_task(value.uid()).await.succeeded();
let (value, code) = index
.render(json! {{
"template": { "id": "embedders.rest.documentTemplate" },
"input": { "documentId": "0" }
}})
.await;
snapshot!(code, @"200 OK");
snapshot!(value, @r#"
{
"template": "{{doc.name}}",
"rendered": "kefir"
}
"#);
}

View File

@ -3,7 +3,7 @@ mod fragments;
#[cfg(feature = "test-ollama")]
mod ollama;
mod openai;
mod rest;
pub mod rest;
mod settings;
use std::str::FromStr;
@ -15,10 +15,6 @@ use crate::common::index::Index;
use crate::common::{default_settings, GetAllDocumentsOptions, Server};
use crate::json;
async fn get_server_vector() -> Server {
Server::new().await
}
#[actix_rt::test]
async fn add_remove_user_provided() {
let server = Server::new().await;

View File

@ -7,9 +7,8 @@ use meili_snap::{json_string, snapshot};
use wiremock::matchers::{method, path};
use wiremock::{Mock, MockServer, Request, ResponseTemplate};
use crate::common::{GetAllDocumentsOptions, Value};
use crate::common::{GetAllDocumentsOptions, Server, Value};
use crate::json;
use crate::vector::get_server_vector;
#[derive(serde::Deserialize)]
struct OpenAiResponses(BTreeMap<String, OpenAiResponse>);
@ -349,7 +348,7 @@ async fn create_slow_mock() -> (&'static MockServer, Value) {
#[actix_rt::test]
async fn it_works() {
let (_mock, setting) = create_mock().await;
let server = get_server_vector().await;
let server = Server::new().await;
let index = server.index("doggo");
let (response, code) = index
@ -583,7 +582,7 @@ async fn it_works() {
#[actix_rt::test]
async fn tokenize_long_text() {
let (_mock, setting) = create_mock_tokenized().await;
let server = get_server_vector().await;
let server = Server::new().await;
let index = server.index("doggo");
let (response, code) = index
@ -646,7 +645,7 @@ async fn tokenize_long_text() {
#[actix_rt::test]
async fn bad_api_key() {
let (_mock, mut setting) = create_mock().await;
let server = get_server_vector().await;
let server = Server::new().await;
let index = server.index("doggo");
let documents = json!([
@ -794,7 +793,7 @@ async fn bad_api_key() {
#[actix_rt::test]
async fn bad_model() {
let (_mock, mut setting) = create_mock().await;
let server = get_server_vector().await;
let server = Server::new().await;
let index = server.index("doggo");
let documents = json!([
@ -872,7 +871,7 @@ async fn bad_model() {
#[actix_rt::test]
async fn bad_dimensions() {
let (_mock, mut setting) = create_mock().await;
let server = get_server_vector().await;
let server = Server::new().await;
let index = server.index("doggo");
let documents = json!([
@ -971,7 +970,7 @@ async fn bad_dimensions() {
#[actix_rt::test]
async fn smaller_dimensions() {
let (_mock, setting) = create_mock_dimensions().await;
let server = get_server_vector().await;
let server = Server::new().await;
let index = server.index("doggo");
let (response, code) = index
@ -1203,7 +1202,7 @@ async fn smaller_dimensions() {
#[actix_rt::test]
async fn small_embedding_model() {
let (_mock, setting) = create_mock_small_embedding_model().await;
let server = get_server_vector().await;
let server = Server::new().await;
let index = server.index("doggo");
let (response, code) = index
@ -1434,7 +1433,7 @@ async fn small_embedding_model() {
#[actix_rt::test]
async fn legacy_embedding_model() {
let (_mock, setting) = create_mock_legacy_embedding_model().await;
let server = get_server_vector().await;
let server = Server::new().await;
let index = server.index("doggo");
let (response, code) = index
@ -1666,7 +1665,7 @@ async fn legacy_embedding_model() {
#[actix_rt::test]
async fn it_still_works() {
let (_mock, setting) = create_fallible_mock().await;
let server = get_server_vector().await;
let server = Server::new().await;
let index = server.index("doggo");
let (response, code) = index
@ -1898,7 +1897,7 @@ async fn it_still_works() {
#[actix_rt::test]
async fn timeout() {
let (_mock, setting) = create_slow_mock().await;
let server = get_server_vector().await;
let server = Server::new().await;
let index = server.index("doggo");
let (response, code) = index

View File

@ -8,11 +8,11 @@ use tokio::sync::mpsc;
use wiremock::matchers::{method, path};
use wiremock::{Mock, MockServer, Request, ResponseTemplate};
use crate::common::Value;
use crate::common::{Server, Value};
use crate::json;
use crate::vector::{get_server_vector, GetAllDocumentsOptions};
use crate::vector::GetAllDocumentsOptions;
async fn create_mock() -> (&'static MockServer, Value) {
pub async fn create_mock() -> (&'static MockServer, Value) {
let mock_server = Box::leak(Box::new(MockServer::start().await));
let text_to_embedding: BTreeMap<_, _> = vec![
@ -395,7 +395,7 @@ async fn dummy_testing_the_mock() {
async fn bad_request() {
let (mock, _setting) = create_mock().await;
let server = get_server_vector().await;
let server = Server::new().await;
let index = server.index("doggo");
// No placeholder string appear in the template
@ -631,7 +631,7 @@ async fn bad_request() {
async fn bad_response() {
let (mock, _setting) = create_mock().await;
let server = get_server_vector().await;
let server = Server::new().await;
let index = server.index("doggo");
// No placeholder string appear in the template
@ -907,7 +907,7 @@ async fn bad_response() {
async fn bad_settings() {
let (mock, _setting) = create_mock().await;
let server = get_server_vector().await;
let server = Server::new().await;
let index = server.index("doggo");
let (response, code) = index
@ -1079,7 +1079,7 @@ async fn bad_settings() {
#[actix_rt::test]
async fn add_vector_and_user_provided() {
let (_mock, setting) = create_mock().await;
let server = get_server_vector().await;
let server = Server::new().await;
let index = server.index("doggo");
let (response, code) = index
@ -1185,7 +1185,7 @@ async fn add_vector_and_user_provided() {
#[actix_rt::test]
async fn server_returns_bad_request() {
let (mock, _setting) = create_mock_multiple().await;
let server = get_server_vector().await;
let server = Server::new().await;
let index = server.index("doggo");
let (response, code) = index
@ -1301,7 +1301,7 @@ async fn server_returns_bad_request() {
#[actix_rt::test]
async fn server_returns_bad_response() {
let (mock, _setting) = create_mock_multiple().await;
let server = get_server_vector().await;
let server = Server::new().await;
let index = server.index("doggo");
let (response, code) = index
@ -1596,7 +1596,7 @@ async fn server_returns_bad_response() {
#[actix_rt::test]
async fn server_returns_multiple() {
let (_mock, setting) = create_mock_multiple().await;
let server = get_server_vector().await;
let server = Server::new().await;
let index = server.index("doggo");
let (response, code) = index
@ -1702,7 +1702,7 @@ async fn server_returns_multiple() {
#[actix_rt::test]
async fn server_single_input_returns_in_array() {
let (_mock, setting) = create_mock_single_response_in_array().await;
let server = get_server_vector().await;
let server = Server::new().await;
let index = server.index("doggo");
let (response, code) = index
@ -1808,7 +1808,7 @@ async fn server_single_input_returns_in_array() {
#[actix_rt::test]
async fn server_raw() {
let (_mock, setting) = create_mock_raw().await;
let server = get_server_vector().await;
let server = Server::new().await;
let index = server.index("doggo");
let (response, code) = index
@ -1915,7 +1915,7 @@ async fn server_raw() {
async fn server_custom_header() {
let (mock, setting) = create_mock_raw_with_custom_header().await;
let server = get_server_vector().await;
let server = Server::new().await;
let index = server.index("doggo");
let (response, code) = index
@ -2044,7 +2044,7 @@ async fn server_custom_header() {
#[actix_rt::test]
async fn searchable_reindex() {
let (_mock, setting) = create_mock_default_template().await;
let server = get_server_vector().await;
let server = Server::new().await;
let index = server.index("doggo");
let (response, code) = index
@ -2154,7 +2154,7 @@ async fn searchable_reindex() {
async fn last_error_stats() {
let (sender, mut receiver) = mpsc::channel(10);
let (_mock, setting) = create_faulty_mock_raw(sender).await;
let server = get_server_vector().await;
let server = Server::new().await;
let index = server.index("doggo");
let (response, code) = index

View File

@ -258,7 +258,7 @@ async fn reset_embedder_documents() {
#[actix_rt::test]
async fn ollama_url_checks() {
let server = super::get_server_vector().await;
let server = Server::new().await;
let index = server.index("doggo");
let (response, code) = index