2022-10-20 18:00:07 +02:00
use std ::{ thread , time } ;
2023-09-11 16:50:53 +02:00
use crate ::common ::{ Server , Value } ;
use crate ::json ;
2021-11-08 18:31:27 +01:00
#[ actix_rt::test ]
async fn add_valid_api_key ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
let content = json! ( {
2022-05-23 17:03:28 +02:00
" name " : " indexing-key " ,
2021-11-08 18:31:27 +01:00
" description " : " Indexing API key " ,
2022-05-23 17:03:28 +02:00
" uid " : " 4bc0887a-0e41-4f3b-935d-0c451dcee9c8 " ,
2021-11-08 18:31:27 +01:00
" indexes " : [ " products " ] ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
2021-12-06 15:45:41 +01:00
" indexes.create " ,
2021-11-08 18:31:27 +01:00
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" tasks.get " ,
" settings.get " ,
" settings.update " ,
" stats.get " ,
" dumps.create " ,
] ,
" expiresAt " : " 2050-11-13T00:00:00Z "
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 201 Created " ) ;
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" name " : " indexing-key " ,
" description " : " Indexing API key " ,
" key " : " d9e776b8412f1db6974c9a5556b961c3559440b6588216f4ea5d9ed49f7c8f3c " ,
" uid " : " 4bc0887a-0e41-4f3b-935d-0c451dcee9c8 " ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
" indexes.create " ,
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" tasks.get " ,
" settings.get " ,
" settings.update " ,
" stats.get " ,
" dumps.create "
] ,
" indexes " : [
" products "
] ,
" expiresAt " : " 2050-11-13T00:00:00Z " ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
}
" ###);
2021-12-20 14:44:34 +01:00
}
#[ actix_rt::test ]
async fn add_valid_api_key_expired_at ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
let content = json! ( {
" description " : " Indexing API key " ,
" indexes " : [ " products " ] ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
" indexes.create " ,
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" tasks.get " ,
" settings.get " ,
" settings.update " ,
" stats.get " ,
" dumps.create " ,
] ,
" expiresAt " : " 2050-11-13 "
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 201 Created " ) ;
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " , " .uid " = > " [ignored] " , " .key " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" name " : null ,
" description " : " Indexing API key " ,
" key " : " [ignored] " ,
" uid " : " [ignored] " ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
" indexes.create " ,
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" tasks.get " ,
" settings.get " ,
" settings.update " ,
" stats.get " ,
" dumps.create "
] ,
" indexes " : [
" products "
] ,
" expiresAt " : " 2050-11-13T00:00:00Z " ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
}
" ###);
2021-11-08 18:31:27 +01:00
}
#[ actix_rt::test ]
async fn add_valid_api_key_no_description ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
let content = json! ( {
" indexes " : [ " products " ] ,
2022-05-23 17:03:28 +02:00
" actions " : [ " documents.add " ] ,
2021-12-06 15:45:41 +01:00
" expiresAt " : " 2050-11-13T00:00:00 "
2021-11-08 18:31:27 +01:00
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 201 Created " ) ;
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " , " .uid " = > " [ignored] " , " .key " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" name " : null ,
" description " : null ,
" key " : " [ignored] " ,
" uid " : " [ignored] " ,
" actions " : [
" documents.add "
] ,
" indexes " : [
" products "
] ,
" expiresAt " : " 2050-11-13T00:00:00Z " ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
}
" ###);
2021-11-08 18:31:27 +01:00
}
2022-02-02 18:18:17 +01:00
#[ actix_rt::test ]
async fn add_valid_api_key_null_description ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
let content = json! ( {
2023-09-11 16:50:53 +02:00
" description " : json ! ( null ) ,
2022-02-02 18:18:17 +01:00
" indexes " : [ " products " ] ,
2022-05-23 17:03:28 +02:00
" actions " : [ " documents.add " ] ,
2022-02-02 18:18:17 +01:00
" expiresAt " : " 2050-11-13T00:00:00 "
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 201 Created " ) ;
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " , " .uid " = > " [ignored] " , " .key " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" name " : null ,
" description " : null ,
" key " : " [ignored] " ,
" uid " : " [ignored] " ,
" actions " : [
" documents.add "
] ,
" indexes " : [
" products "
] ,
" expiresAt " : " 2050-11-13T00:00:00Z " ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
}
" ###);
2022-02-02 18:18:17 +01:00
}
2021-11-08 18:31:27 +01:00
#[ actix_rt::test ]
async fn error_add_api_key_no_header ( ) {
let server = Server ::new_auth ( ) . await ;
let content = json! ( {
" description " : " Indexing API key " ,
" indexes " : [ " products " ] ,
2022-05-23 17:03:28 +02:00
" actions " : [ " documents.add " ] ,
2021-11-08 18:31:27 +01:00
" expiresAt " : " 2050-11-13T00:00:00Z "
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 401 Unauthorized " ) ;
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" message " : " The Authorization header is missing. It must use the bearer authorization method. " ,
" code " : " missing_authorization_header " ,
" type " : " auth " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#missing_authorization_header "
2023-01-11 12:33:56 +01:00
}
" ###);
2021-11-08 18:31:27 +01:00
}
#[ actix_rt::test ]
async fn error_add_api_key_bad_key ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " d4000bd7225f77d1eb22cc706ed36772bbc36767c016a27f76def7537b68600d " ) ;
let content = json! ( {
" description " : " Indexing API key " ,
" indexes " : [ " products " ] ,
2022-05-23 17:03:28 +02:00
" actions " : [ " documents.add " ] ,
2021-11-08 18:31:27 +01:00
" expiresAt " : " 2050-11-13T00:00:00Z "
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 403 Forbidden " ) ;
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" message " : " The provided API key is invalid. " ,
" code " : " invalid_api_key " ,
" type " : " auth " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#invalid_api_key "
2023-01-11 12:33:56 +01:00
}
" ###);
2021-11-08 18:31:27 +01:00
}
#[ actix_rt::test ]
async fn error_add_api_key_missing_parameter ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
// missing indexes
let content = json! ( {
" description " : " Indexing API key " ,
2021-12-06 15:45:41 +01:00
" actions " : [ " documents.add " ] ,
2021-11-08 18:31:27 +01:00
" expiresAt " : " 2050-11-13T00:00:00Z "
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 400 Bad Request " ) ;
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
2023-01-12 13:55:53 +01:00
" message " : " Missing field `indexes` " ,
2023-01-12 15:35:03 +01:00
" code " : " missing_api_key_indexes " ,
2023-01-11 12:33:56 +01:00
" type " : " invalid_request " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#missing_api_key_indexes "
2023-01-11 12:33:56 +01:00
}
" ###);
2021-11-08 18:31:27 +01:00
// missing actions
let content = json! ( {
" description " : " Indexing API key " ,
" indexes " : [ " products " ] ,
" expiresAt " : " 2050-11-13T00:00:00Z "
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 400 Bad Request " ) ;
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
2023-01-12 13:55:53 +01:00
" message " : " Missing field `actions` " ,
2023-01-12 15:35:03 +01:00
" code " : " missing_api_key_actions " ,
2023-01-11 12:33:56 +01:00
" type " : " invalid_request " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#missing_api_key_actions "
2023-01-11 12:33:56 +01:00
}
" ###);
2021-12-06 15:45:41 +01:00
// missing expiration date
let content = json! ( {
" description " : " Indexing API key " ,
" indexes " : [ " products " ] ,
" actions " : [ " documents.add " ] ,
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-12 15:35:03 +01:00
meili_snap ::snapshot! ( code , @ " 400 Bad Request " ) ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " , " .uid " = > " [ignored] " , " .key " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
2023-01-12 15:35:03 +01:00
" message " : " Missing field `expiresAt` " ,
" code " : " missing_api_key_expires_at " ,
" type " : " invalid_request " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#missing_api_key_expires_at "
2023-01-11 12:33:56 +01:00
}
" ###);
2021-11-08 18:31:27 +01:00
}
#[ actix_rt::test ]
async fn error_add_api_key_invalid_parameters_description ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
let content = json! ( {
" description " : { " name " :" products " } ,
" indexes " : [ " products " ] ,
2022-05-23 17:03:28 +02:00
" actions " : [ " documents.add " ] ,
2021-11-08 18:31:27 +01:00
" expiresAt " : " 2050-11-13T00:00:00Z "
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 400 Bad Request " ) ;
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
2023-01-12 13:55:53 +01:00
" message " : " Invalid value type at `.description`: expected a string, but found an object: `{ \" name \" : \" products \" }` " ,
2023-01-11 12:33:56 +01:00
" code " : " invalid_api_key_description " ,
" type " : " invalid_request " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#invalid_api_key_description "
2023-01-11 12:33:56 +01:00
}
" ###);
2022-05-23 17:03:28 +02:00
}
#[ actix_rt::test ]
async fn error_add_api_key_invalid_parameters_name ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
let content = json! ( {
" name " : { " name " :" products " } ,
" indexes " : [ " products " ] ,
" actions " : [ " documents.add " ] ,
" expiresAt " : " 2050-11-13T00:00:00Z "
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 400 Bad Request " ) ;
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
2023-01-12 13:55:53 +01:00
" message " : " Invalid value type at `.name`: expected a string, but found an object: `{ \" name \" : \" products \" }` " ,
2023-01-11 12:33:56 +01:00
" code " : " invalid_api_key_name " ,
" type " : " invalid_request " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#invalid_api_key_name "
2023-01-11 12:33:56 +01:00
}
" ###);
2021-11-08 18:31:27 +01:00
}
#[ actix_rt::test ]
async fn error_add_api_key_invalid_parameters_indexes ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
let content = json! ( {
" description " : " Indexing API key " ,
" indexes " : { " name " :" products " } ,
2022-05-23 17:03:28 +02:00
" actions " : [ " documents.add " ] ,
2021-11-08 18:31:27 +01:00
" expiresAt " : " 2050-11-13T00:00:00Z "
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 400 Bad Request " ) ;
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
2023-01-12 13:55:53 +01:00
" message " : " Invalid value type at `.indexes`: expected an array, but found an object: `{ \" name \" : \" products \" }` " ,
2023-01-11 12:33:56 +01:00
" code " : " invalid_api_key_indexes " ,
" type " : " invalid_request " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#invalid_api_key_indexes "
2023-01-11 12:33:56 +01:00
}
" ###);
2021-11-08 18:31:27 +01:00
}
2022-06-06 12:45:52 +02:00
#[ actix_rt::test ]
async fn error_add_api_key_invalid_index_uids ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
let content = json! ( {
2023-09-11 16:50:53 +02:00
" description " : json ! ( null ) ,
2022-06-06 12:45:52 +02:00
" indexes " : [ " invalid index # / \\ name with spaces " ] ,
" actions " : [
" documents.add "
] ,
" expiresAt " : " 2050-11-13T00:00:00 "
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 400 Bad Request " ) ;
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
2023-02-09 13:14:05 +01:00
" message " : " Invalid value at `.indexes[0]`: `invalid index # / \\ name with spaces` is not a valid index uid pattern. Index uid patterns can be an integer or a string containing only alphanumeric characters, hyphens (-), underscores (_), and optionally end with a star (*). " ,
2023-01-11 12:33:56 +01:00
" code " : " invalid_api_key_indexes " ,
" type " : " invalid_request " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#invalid_api_key_indexes "
2023-01-11 12:33:56 +01:00
}
" ###);
2022-06-06 12:45:52 +02:00
}
2021-11-08 18:31:27 +01:00
#[ actix_rt::test ]
async fn error_add_api_key_invalid_parameters_actions ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
let content = json! ( {
" description " : " Indexing API key " ,
" indexes " : [ " products " ] ,
" actions " : { " name " :" products " } ,
" expiresAt " : " 2050-11-13T00:00:00Z "
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2022-05-23 17:03:28 +02:00
assert_eq! ( 400 , code , " {:?} " , & response ) ;
2021-11-08 18:31:27 +01:00
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 400 Bad Request " ) ;
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
2023-01-12 13:55:53 +01:00
" message " : " Invalid value type at `.actions`: expected an array, but found an object: `{ \" name \" : \" products \" }` " ,
2023-01-11 12:33:56 +01:00
" code " : " invalid_api_key_actions " ,
" type " : " invalid_request " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#invalid_api_key_actions "
2023-01-11 12:33:56 +01:00
}
" ###);
2021-11-08 18:31:27 +01:00
let content = json! ( {
" description " : " Indexing API key " ,
" indexes " : [ " products " ] ,
" actions " : [
" doc.add "
] ,
" expiresAt " : " 2050-11-13T00:00:00Z "
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 400 Bad Request " ) ;
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
2023-09-11 13:52:07 +02:00
" message " : " Unknown value `doc.add` at `.actions[0]`: expected one of `*`, `search`, `documents.*`, `documents.add`, `documents.get`, `documents.delete`, `indexes.*`, `indexes.create`, `indexes.get`, `indexes.update`, `indexes.delete`, `indexes.swap`, `tasks.*`, `tasks.cancel`, `tasks.delete`, `tasks.get`, `settings.*`, `settings.get`, `settings.update`, `stats.*`, `stats.get`, `metrics.*`, `metrics.get`, `dumps.*`, `dumps.create`, `snapshots.*`, `snapshots.create`, `version`, `keys.create`, `keys.get`, `keys.update`, `keys.delete`, `experimental.get`, `experimental.update` " ,
2023-01-11 12:33:56 +01:00
" code " : " invalid_api_key_actions " ,
" type " : " invalid_request " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#invalid_api_key_actions "
2023-01-11 12:33:56 +01:00
}
" ###);
2021-11-08 18:31:27 +01:00
}
#[ actix_rt::test ]
async fn error_add_api_key_invalid_parameters_expires_at ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
let content = json! ( {
" description " : " Indexing API key " ,
" indexes " : [ " products " ] ,
2022-05-23 17:03:28 +02:00
" actions " : [ " documents.add " ] ,
2021-11-08 18:31:27 +01:00
" expiresAt " : { " name " :" products " }
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 400 Bad Request " ) ;
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
2023-01-12 13:55:53 +01:00
" message " : " Invalid value type at `.expiresAt`: expected a string, but found an object: `{ \" name \" : \" products \" }` " ,
2023-01-11 12:33:56 +01:00
" code " : " invalid_api_key_expires_at " ,
" type " : " invalid_request " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#invalid_api_key_expires_at "
2023-01-11 12:33:56 +01:00
}
" ###);
2021-11-08 18:31:27 +01:00
}
2021-12-06 15:45:41 +01:00
#[ actix_rt::test ]
async fn error_add_api_key_invalid_parameters_expires_at_in_the_past ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
let content = json! ( {
" description " : " Indexing API key " ,
" indexes " : [ " products " ] ,
2022-05-23 17:03:28 +02:00
" actions " : [ " documents.add " ] ,
2021-12-06 15:45:41 +01:00
" expiresAt " : " 2010-11-13T00:00:00Z "
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
2023-01-12 13:55:53 +01:00
" message " : " Invalid value at `.expiresAt`: `2010-11-13T00:00:00Z` is not a valid date. It should follow the RFC 3339 format to represents a date or datetime in the future or specified as a null value. e.g. 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS'. \n " ,
2023-01-11 12:33:56 +01:00
" code " : " invalid_api_key_expires_at " ,
" type " : " invalid_request " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#invalid_api_key_expires_at "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 400 Bad Request " ) ;
2022-05-23 17:03:28 +02:00
}
#[ actix_rt::test ]
async fn error_add_api_key_invalid_parameters_uid ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
let content = json! ( {
" description " : " Indexing API key " ,
" uid " : " aaaaabbbbbccc " ,
" indexes " : [ " products " ] ,
" actions " : [ " documents.add " ] ,
" expiresAt " : " 2050-11-13T00:00:00Z "
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
2023-01-12 13:55:53 +01:00
" message " : " Invalid value at `.uid`: invalid length: expected length 32 for simple format, found 13 " ,
2023-01-11 12:33:56 +01:00
" code " : " invalid_api_key_uid " ,
" type " : " invalid_request " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#invalid_api_key_uid "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 400 Bad Request " ) ;
2022-05-23 17:03:28 +02:00
}
#[ actix_rt::test ]
async fn error_add_api_key_parameters_uid_already_exist ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
2023-09-11 16:50:53 +02:00
let content : Value = json! ( {
2022-05-23 17:03:28 +02:00
" uid " : " 4bc0887a-0e41-4f3b-935d-0c451dcee9c8 " ,
" indexes " : [ " products " ] ,
" actions " : [ " search " ] ,
" expiresAt " : " 2050-11-13T00:00:00Z "
} ) ;
// first creation is valid.
let ( response , code ) = s erver . add_api_key ( content . clone ( ) ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" name " : null ,
" description " : null ,
" key " : " d9e776b8412f1db6974c9a5556b961c3559440b6588216f4ea5d9ed49f7c8f3c " ,
" uid " : " 4bc0887a-0e41-4f3b-935d-0c451dcee9c8 " ,
" actions " : [
" search "
] ,
" indexes " : [
" products "
] ,
" expiresAt " : " 2050-11-13T00:00:00Z " ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 201 Created " ) ;
2022-05-23 17:03:28 +02:00
// uid already exist.
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" message " : " `uid` field value `4bc0887a-0e41-4f3b-935d-0c451dcee9c8` is already an existing API key. " ,
" code " : " api_key_already_exists " ,
" type " : " invalid_request " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#api_key_already_exists "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 409 Conflict " ) ;
2021-12-06 15:45:41 +01:00
}
2021-11-08 18:31:27 +01:00
#[ actix_rt::test ]
async fn get_api_key ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
2022-05-23 17:03:28 +02:00
let uid = " 4bc0887a-0e41-4f3b-935d-0c451dcee9c8 " ;
2021-11-08 18:31:27 +01:00
let content = json! ( {
" description " : " Indexing API key " ,
" indexes " : [ " products " ] ,
2022-05-23 17:03:28 +02:00
" uid " : uid . to_string ( ) ,
2021-11-08 18:31:27 +01:00
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
2021-12-06 15:45:41 +01:00
" indexes.create " ,
2021-11-08 18:31:27 +01:00
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" tasks.get " ,
" settings.get " ,
" settings.update " ,
" stats.get " ,
" dumps.create " ,
] ,
" expiresAt " : " 2050-11-13T00:00:00Z "
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" name " : null ,
" description " : " Indexing API key " ,
" key " : " d9e776b8412f1db6974c9a5556b961c3559440b6588216f4ea5d9ed49f7c8f3c " ,
" uid " : " 4bc0887a-0e41-4f3b-935d-0c451dcee9c8 " ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
" indexes.create " ,
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" tasks.get " ,
" settings.get " ,
" settings.update " ,
" stats.get " ,
" dumps.create "
] ,
" indexes " : [
" products "
] ,
" expiresAt " : " 2050-11-13T00:00:00Z " ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 201 Created " ) ;
2021-11-08 18:31:27 +01:00
let key = response [ " key " ] . as_str ( ) . unwrap ( ) ;
2022-05-23 17:03:28 +02:00
// get with uid
let ( response , code ) = server . get_api_key ( & uid ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" name " : null ,
" description " : " Indexing API key " ,
" key " : " d9e776b8412f1db6974c9a5556b961c3559440b6588216f4ea5d9ed49f7c8f3c " ,
" uid " : " 4bc0887a-0e41-4f3b-935d-0c451dcee9c8 " ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
" indexes.create " ,
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" tasks.get " ,
" settings.get " ,
" settings.update " ,
" stats.get " ,
" dumps.create "
] ,
" indexes " : [
" products "
] ,
" expiresAt " : " 2050-11-13T00:00:00Z " ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 200 OK " ) ;
2022-05-23 17:03:28 +02:00
// get with key
let ( response , code ) = server . get_api_key ( & key ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" name " : null ,
" description " : " Indexing API key " ,
" key " : " d9e776b8412f1db6974c9a5556b961c3559440b6588216f4ea5d9ed49f7c8f3c " ,
" uid " : " 4bc0887a-0e41-4f3b-935d-0c451dcee9c8 " ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
" indexes.create " ,
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" tasks.get " ,
" settings.get " ,
" settings.update " ,
" stats.get " ,
" dumps.create "
] ,
" indexes " : [
" products "
] ,
" expiresAt " : " 2050-11-13T00:00:00Z " ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 200 OK " ) ;
2021-11-08 18:31:27 +01:00
}
#[ actix_rt::test ]
async fn error_get_api_key_no_header ( ) {
let server = Server ::new_auth ( ) . await ;
let ( response , code ) = server
. get_api_key ( " d0552b41536279a0ad88bd595327b96f01176a60c2243e906c52ac02375f9bc4 " )
. await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" message " : " The Authorization header is missing. It must use the bearer authorization method. " ,
" code " : " missing_authorization_header " ,
" type " : " auth " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#missing_authorization_header "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 401 Unauthorized " ) ;
2021-11-08 18:31:27 +01:00
}
#[ actix_rt::test ]
async fn error_get_api_key_bad_key ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " d4000bd7225f77d1eb22cc706ed36772bbc36767c016a27f76def7537b68600d " ) ;
let ( response , code ) = server
. get_api_key ( " d0552b41536279a0ad88bd595327b96f01176a60c2243e906c52ac02375f9bc4 " )
. await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" message " : " The provided API key is invalid. " ,
" code " : " invalid_api_key " ,
" type " : " auth " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#invalid_api_key "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 403 Forbidden " ) ;
2021-11-08 18:31:27 +01:00
}
#[ actix_rt::test ]
async fn error_get_api_key_not_found ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
let ( response , code ) = server
. get_api_key ( " d0552b41d0552b41536279a0ad88bd595327b96f01176a60c2243e906c52ac02375f9bc4 " )
. await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" message " : " API key `d0552b41d0552b41536279a0ad88bd595327b96f01176a60c2243e906c52ac02375f9bc4` not found. " ,
" code " : " api_key_not_found " ,
" type " : " invalid_request " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#api_key_not_found "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 404 Not Found " ) ;
2021-11-08 18:31:27 +01:00
}
#[ actix_rt::test ]
async fn list_api_keys ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
let content = json! ( {
" description " : " Indexing API key " ,
" indexes " : [ " products " ] ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
2021-12-06 15:45:41 +01:00
" indexes.create " ,
2021-11-08 18:31:27 +01:00
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" tasks.get " ,
" settings.get " ,
" settings.update " ,
" stats.get " ,
" dumps.create " ,
] ,
" expiresAt " : " 2050-11-13T00:00:00Z "
} ) ;
2022-05-23 17:03:28 +02:00
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " , " .uid " = > " [ignored] " , " .key " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" name " : null ,
" description " : " Indexing API key " ,
" key " : " [ignored] " ,
" uid " : " [ignored] " ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
" indexes.create " ,
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" tasks.get " ,
" settings.get " ,
" settings.update " ,
" stats.get " ,
" dumps.create "
] ,
" indexes " : [
" products "
] ,
" expiresAt " : " 2050-11-13T00:00:00Z " ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 201 Created " ) ;
2021-11-08 18:31:27 +01:00
2023-01-24 17:30:35 +01:00
let ( response , code ) = server . list_api_keys ( " " ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .results[].createdAt " = > " [ignored] " , " .results[].updatedAt " = > " [ignored] " , " .results[].uid " = > " [ignored] " , " .results[].key " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" results " : [
{
" name " : null ,
" description " : " Indexing API key " ,
" key " : " [ignored] " ,
" uid " : " [ignored] " ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
" indexes.create " ,
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" tasks.get " ,
" settings.get " ,
" settings.update " ,
" stats.get " ,
" dumps.create "
] ,
" indexes " : [
" products "
] ,
" expiresAt " : " 2050-11-13T00:00:00Z " ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
} ,
{
" name " : " Default Search API Key " ,
" description " : " Use it to search from the frontend " ,
" key " : " [ignored] " ,
" uid " : " [ignored] " ,
" actions " : [
" search "
] ,
" indexes " : [
" * "
] ,
" expiresAt " : null ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
} ,
{
" name " : " Default Admin API Key " ,
" description " : " Use it for anything that is not a search operation. Caution! Do not expose it on a public frontend " ,
" key " : " [ignored] " ,
" uid " : " [ignored] " ,
" actions " : [
" * "
] ,
" indexes " : [
" * "
] ,
" expiresAt " : null ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
}
] ,
" offset " : 0 ,
" limit " : 20 ,
" total " : 3
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 200 OK " ) ;
2021-11-08 18:31:27 +01:00
}
#[ actix_rt::test ]
async fn error_list_api_keys_no_header ( ) {
let server = Server ::new_auth ( ) . await ;
2023-01-24 17:30:35 +01:00
let ( response , code ) = server . list_api_keys ( " " ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" message " : " The Authorization header is missing. It must use the bearer authorization method. " ,
" code " : " missing_authorization_header " ,
" type " : " auth " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#missing_authorization_header "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 401 Unauthorized " ) ;
2021-11-08 18:31:27 +01:00
}
#[ actix_rt::test ]
async fn error_list_api_keys_bad_key ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " d4000bd7225f77d1eb22cc706ed36772bbc36767c016a27f76def7537b68600d " ) ;
2023-01-24 17:30:35 +01:00
let ( response , code ) = server . list_api_keys ( " " ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" message " : " The provided API key is invalid. " ,
" code " : " invalid_api_key " ,
" type " : " auth " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#invalid_api_key "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 403 Forbidden " ) ;
2021-11-08 18:31:27 +01:00
}
#[ actix_rt::test ]
async fn delete_api_key ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
let content = json! ( {
" description " : " Indexing API key " ,
" indexes " : [ " products " ] ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
2021-12-06 15:45:41 +01:00
" indexes.create " ,
2021-11-08 18:31:27 +01:00
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" tasks.get " ,
" settings.get " ,
" settings.update " ,
" stats.get " ,
" dumps.create " ,
] ,
" expiresAt " : " 2050-11-13T00:00:00Z "
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " , " .uid " = > " [ignored] " , " .key " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" name " : null ,
" description " : " Indexing API key " ,
" key " : " [ignored] " ,
" uid " : " [ignored] " ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
" indexes.create " ,
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" tasks.get " ,
" settings.get " ,
" settings.update " ,
" stats.get " ,
" dumps.create "
] ,
" indexes " : [
" products "
] ,
" expiresAt " : " 2050-11-13T00:00:00Z " ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 201 Created " ) ;
2021-11-08 18:31:27 +01:00
2022-05-23 17:03:28 +02:00
let uid = response [ " uid " ] . as_str ( ) . unwrap ( ) ;
2021-11-08 18:31:27 +01:00
2022-05-23 17:03:28 +02:00
let ( response , code ) = server . delete_api_key ( & uid ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ " null " ) ;
meili_snap ::snapshot! ( code , @ " 204 No Content " ) ;
2021-11-08 18:31:27 +01:00
// check if API key no longer exist.
2022-05-31 15:31:16 +02:00
let ( response , code ) = server . get_api_key ( & uid ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " , " .message " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" message " : " [ignored] " ,
" code " : " api_key_not_found " ,
" type " : " invalid_request " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#api_key_not_found "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 404 Not Found " ) ;
2021-11-08 18:31:27 +01:00
}
#[ actix_rt::test ]
async fn error_delete_api_key_no_header ( ) {
let server = Server ::new_auth ( ) . await ;
let ( response , code ) = server
. delete_api_key ( " d0552b41536279a0ad88bd595327b96f01176a60c2243e906c52ac02375f9bc4 " )
. await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" message " : " The Authorization header is missing. It must use the bearer authorization method. " ,
" code " : " missing_authorization_header " ,
" type " : " auth " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#missing_authorization_header "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 401 Unauthorized " ) ;
2021-11-08 18:31:27 +01:00
}
#[ actix_rt::test ]
async fn error_delete_api_key_bad_key ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " d4000bd7225f77d1eb22cc706ed36772bbc36767c016a27f76def7537b68600d " ) ;
let ( response , code ) = server
. delete_api_key ( " d0552b41536279a0ad88bd595327b96f01176a60c2243e906c52ac02375f9bc4 " )
. await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" message " : " The provided API key is invalid. " ,
" code " : " invalid_api_key " ,
" type " : " auth " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#invalid_api_key "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 403 Forbidden " ) ;
2021-11-08 18:31:27 +01:00
}
#[ actix_rt::test ]
async fn error_delete_api_key_not_found ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
let ( response , code ) = server
. delete_api_key ( " d0552b41d0552b41536279a0ad88bd595327b96f01176a60c2243e906c52ac02375f9bc4 " )
. await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" message " : " API key `d0552b41d0552b41536279a0ad88bd595327b96f01176a60c2243e906c52ac02375f9bc4` not found. " ,
" code " : " api_key_not_found " ,
" type " : " invalid_request " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#api_key_not_found "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 404 Not Found " ) ;
2021-11-08 18:31:27 +01:00
}
#[ actix_rt::test ]
async fn patch_api_key_description ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
let content = json! ( {
" indexes " : [ " products " ] ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
2021-12-06 15:45:41 +01:00
" indexes.create " ,
2021-11-08 18:31:27 +01:00
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" stats.get " ,
" dumps.create " ,
] ,
" expiresAt " : " 2050-11-13T00:00:00Z "
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " , " .uid " = > " [ignored] " , " .key " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" name " : null ,
" description " : null ,
" key " : " [ignored] " ,
" uid " : " [ignored] " ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
" indexes.create " ,
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" stats.get " ,
" dumps.create "
] ,
" indexes " : [
" products "
] ,
" expiresAt " : " 2050-11-13T00:00:00Z " ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 201 Created " ) ;
2021-11-08 18:31:27 +01:00
2022-05-23 17:03:28 +02:00
let uid = response [ " uid " ] . as_str ( ) . unwrap ( ) ;
2021-11-08 18:31:27 +01:00
2023-01-18 18:27:00 +01:00
// Add a description and a name
let content = json! ( { " description " : " Indexing API key " , " name " : " bob " } ) ;
2021-11-08 18:31:27 +01:00
2021-12-06 15:45:41 +01:00
thread ::sleep ( time ::Duration ::new ( 1 , 0 ) ) ;
2022-05-23 17:03:28 +02:00
let ( response , code ) = server . patch_api_key ( & uid , content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " , " .uid " = > " [ignored] " , " .key " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
2023-01-18 18:27:00 +01:00
" name " : " bob " ,
2023-01-11 12:33:56 +01:00
" description " : " Indexing API key " ,
" key " : " [ignored] " ,
" uid " : " [ignored] " ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
" indexes.create " ,
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" stats.get " ,
" dumps.create "
] ,
" indexes " : [
" products "
] ,
" expiresAt " : " 2050-11-13T00:00:00Z " ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 200 OK " ) ;
2021-11-08 18:31:27 +01:00
// Change the description
2022-05-23 17:03:28 +02:00
let content = json! ( { " description " : " Product API key " } ) ;
2021-11-08 18:31:27 +01:00
2022-05-23 17:03:28 +02:00
let ( response , code ) = server . patch_api_key ( & uid , content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " , " .uid " = > " [ignored] " , " .key " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
2023-01-18 19:07:26 +01:00
" name " : " bob " ,
2023-01-11 12:33:56 +01:00
" description " : " Product API key " ,
" key " : " [ignored] " ,
" uid " : " [ignored] " ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
" indexes.create " ,
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" stats.get " ,
" dumps.create "
] ,
" indexes " : [
" products "
] ,
" expiresAt " : " 2050-11-13T00:00:00Z " ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 200 OK " ) ;
2021-11-08 18:31:27 +01:00
// Remove the description
2023-09-11 16:50:53 +02:00
let content = json! ( { " description " : null } ) ;
2021-11-08 18:31:27 +01:00
2022-05-23 17:03:28 +02:00
let ( response , code ) = server . patch_api_key ( & uid , content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " , " .uid " = > " [ignored] " , " .key " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
2023-01-18 19:07:26 +01:00
" name " : " bob " ,
2023-01-11 12:33:56 +01:00
" description " : null ,
" key " : " [ignored] " ,
" uid " : " [ignored] " ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
" indexes.create " ,
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" stats.get " ,
" dumps.create "
] ,
" indexes " : [
" products "
] ,
" expiresAt " : " 2050-11-13T00:00:00Z " ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 200 OK " ) ;
2021-11-08 18:31:27 +01:00
}
#[ actix_rt::test ]
2022-05-23 17:03:28 +02:00
async fn patch_api_key_name ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
let content = json! ( {
" indexes " : [ " products " ] ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
" indexes.create " ,
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" stats.get " ,
" dumps.create " ,
] ,
" expiresAt " : " 2050-11-13T00:00:00Z "
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " , " .uid " = > " [ignored] " , " .key " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" name " : null ,
" description " : null ,
" key " : " [ignored] " ,
" uid " : " [ignored] " ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
" indexes.create " ,
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" stats.get " ,
" dumps.create "
] ,
" indexes " : [
" products "
] ,
" expiresAt " : " 2050-11-13T00:00:00Z " ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 201 Created " ) ;
2022-05-23 17:03:28 +02:00
let uid = response [ " uid " ] . as_str ( ) . unwrap ( ) ;
let created_at = response [ " createdAt " ] . as_str ( ) . unwrap ( ) ;
let updated_at = response [ " updatedAt " ] . as_str ( ) . unwrap ( ) ;
2023-01-18 18:27:00 +01:00
// Add a name and description
let content = json! ( { " name " : " Indexing API key " , " description " : " The doggoscription " } ) ;
2022-05-23 17:03:28 +02:00
thread ::sleep ( time ::Duration ::new ( 1 , 0 ) ) ;
let ( response , code ) = server . patch_api_key ( & uid , content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " , " .uid " = > " [ignored] " , " .key " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" name " : " Indexing API key " ,
2023-01-18 18:27:00 +01:00
" description " : " The doggoscription " ,
2023-01-11 12:33:56 +01:00
" key " : " [ignored] " ,
" uid " : " [ignored] " ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
" indexes.create " ,
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" stats.get " ,
" dumps.create "
] ,
" indexes " : [
" products "
] ,
" expiresAt " : " 2050-11-13T00:00:00Z " ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 200 OK " ) ;
2023-01-11 12:33:56 +01:00
2022-05-23 17:03:28 +02:00
assert_ne! ( response [ " updatedAt " ] . as_str ( ) . unwrap ( ) , updated_at ) ;
assert_eq! ( response [ " createdAt " ] . as_str ( ) . unwrap ( ) , created_at ) ;
// Change the name
let content = json! ( { " name " : " Product API key " } ) ;
let ( response , code ) = server . patch_api_key ( & uid , content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " , " .uid " = > " [ignored] " , " .key " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" name " : " Product API key " ,
2023-01-18 19:07:26 +01:00
" description " : " The doggoscription " ,
2023-01-11 12:33:56 +01:00
" key " : " [ignored] " ,
" uid " : " [ignored] " ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
" indexes.create " ,
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" stats.get " ,
" dumps.create "
] ,
" indexes " : [
" products "
] ,
" expiresAt " : " 2050-11-13T00:00:00Z " ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 200 OK " ) ;
2022-05-23 17:03:28 +02:00
// Remove the name
2023-01-18 18:27:00 +01:00
let content = json! ( { " name " : null } ) ;
2022-05-23 17:03:28 +02:00
let ( response , code ) = server . patch_api_key ( & uid , content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " , " .uid " = > " [ignored] " , " .key " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" name " : null ,
2023-01-18 19:07:26 +01:00
" description " : " The doggoscription " ,
2023-01-11 12:33:56 +01:00
" key " : " [ignored] " ,
" uid " : " [ignored] " ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
" indexes.create " ,
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" stats.get " ,
" dumps.create "
] ,
" indexes " : [
" products "
] ,
" expiresAt " : " 2050-11-13T00:00:00Z " ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 200 OK " ) ;
2022-05-23 17:03:28 +02:00
}
#[ actix_rt::test ]
2022-06-01 14:11:56 +02:00
async fn error_patch_api_key_indexes ( ) {
2021-11-08 18:31:27 +01:00
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
let content = json! ( {
" description " : " Indexing API key " ,
" indexes " : [ " products " ] ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
2021-12-06 15:45:41 +01:00
" indexes.create " ,
2021-11-08 18:31:27 +01:00
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" stats.get " ,
" dumps.create " ,
] ,
" expiresAt " : " 2050-11-13T00:00:00Z "
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " , " .uid " = > " [ignored] " , " .key " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" name " : null ,
" description " : " Indexing API key " ,
" key " : " [ignored] " ,
" uid " : " [ignored] " ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
" indexes.create " ,
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" stats.get " ,
" dumps.create "
] ,
" indexes " : [
" products "
] ,
" expiresAt " : " 2050-11-13T00:00:00Z " ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 201 Created " ) ;
2021-11-08 18:31:27 +01:00
2022-05-23 17:03:28 +02:00
let uid = response [ " uid " ] . as_str ( ) . unwrap ( ) ;
2021-11-08 18:31:27 +01:00
let content = json! ( { " indexes " : [ " products " , " prices " ] } ) ;
2021-12-06 15:45:41 +01:00
thread ::sleep ( time ::Duration ::new ( 1 , 0 ) ) ;
2022-05-23 17:03:28 +02:00
let ( response , code ) = server . patch_api_key ( & uid , content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
2023-01-19 16:45:10 +01:00
" message " : " Immutable field `indexes`: expected one of `description`, `name` " ,
2023-01-12 09:35:56 +01:00
" code " : " immutable_api_key_indexes " ,
2023-01-11 12:33:56 +01:00
" type " : " invalid_request " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#immutable_api_key_indexes "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 400 Bad Request " ) ;
2021-11-08 18:31:27 +01:00
}
#[ actix_rt::test ]
2022-06-01 14:11:56 +02:00
async fn error_patch_api_key_actions ( ) {
2021-11-08 18:31:27 +01:00
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
let content = json! ( {
" description " : " Indexing API key " ,
" indexes " : [ " products " ] ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
2021-12-06 15:45:41 +01:00
" indexes.create " ,
2021-11-08 18:31:27 +01:00
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" stats.get " ,
" dumps.create " ,
] ,
" expiresAt " : " 2050-11-13T00:00:00Z "
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " , " .uid " = > " [ignored] " , " .key " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" name " : null ,
" description " : " Indexing API key " ,
" key " : " [ignored] " ,
" uid " : " [ignored] " ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
" indexes.create " ,
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" stats.get " ,
" dumps.create "
] ,
" indexes " : [
" products "
] ,
" expiresAt " : " 2050-11-13T00:00:00Z " ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 201 Created " ) ;
2021-11-08 18:31:27 +01:00
2022-05-23 17:03:28 +02:00
let uid = response [ " uid " ] . as_str ( ) . unwrap ( ) ;
2021-11-08 18:31:27 +01:00
let content = json! ( {
" actions " : [
" search " ,
" documents.get " ,
" indexes.get " ,
" tasks.get " ,
" settings.get " ,
] ,
} ) ;
2021-12-06 15:45:41 +01:00
thread ::sleep ( time ::Duration ::new ( 1 , 0 ) ) ;
2022-05-23 17:03:28 +02:00
let ( response , code ) = server . patch_api_key ( & uid , content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
2023-01-19 16:45:10 +01:00
" message " : " Immutable field `actions`: expected one of `description`, `name` " ,
2023-01-12 09:35:56 +01:00
" code " : " immutable_api_key_actions " ,
2023-01-11 12:33:56 +01:00
" type " : " invalid_request " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#immutable_api_key_actions "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 400 Bad Request " ) ;
2021-11-08 18:31:27 +01:00
}
#[ actix_rt::test ]
2022-06-01 14:11:56 +02:00
async fn error_patch_api_key_expiration_date ( ) {
2021-11-08 18:31:27 +01:00
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
let content = json! ( {
" description " : " Indexing API key " ,
" indexes " : [ " products " ] ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
2021-12-06 15:45:41 +01:00
" indexes.create " ,
2021-11-08 18:31:27 +01:00
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" stats.get " ,
" dumps.create " ,
] ,
2021-12-06 15:45:41 +01:00
" expiresAt " : " 2050-11-13T00:00:00Z "
2021-11-08 18:31:27 +01:00
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " , " .uid " = > " [ignored] " , " .key " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" name " : null ,
" description " : " Indexing API key " ,
" key " : " [ignored] " ,
" uid " : " [ignored] " ,
" actions " : [
" search " ,
" documents.add " ,
" documents.get " ,
" documents.delete " ,
" indexes.create " ,
" indexes.get " ,
" indexes.update " ,
" indexes.delete " ,
" stats.get " ,
" dumps.create "
] ,
" indexes " : [
" products "
] ,
" expiresAt " : " 2050-11-13T00:00:00Z " ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 201 Created " ) ;
2021-11-08 18:31:27 +01:00
2022-05-23 17:03:28 +02:00
let uid = response [ " uid " ] . as_str ( ) . unwrap ( ) ;
2021-11-08 18:31:27 +01:00
let content = json! ( { " expiresAt " : " 2055-11-13T00:00:00Z " } ) ;
2021-12-06 15:45:41 +01:00
thread ::sleep ( time ::Duration ::new ( 1 , 0 ) ) ;
2022-05-23 17:03:28 +02:00
let ( response , code ) = server . patch_api_key ( & uid , content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
2023-01-19 16:45:10 +01:00
" message " : " Immutable field `expiresAt`: expected one of `description`, `name` " ,
2023-01-12 09:35:56 +01:00
" code " : " immutable_api_key_expires_at " ,
2023-01-11 12:33:56 +01:00
" type " : " invalid_request " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#immutable_api_key_expires_at "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 400 Bad Request " ) ;
2021-11-08 18:31:27 +01:00
}
#[ actix_rt::test ]
async fn error_patch_api_key_no_header ( ) {
let server = Server ::new_auth ( ) . await ;
let ( response , code ) = server
. patch_api_key (
" d0552b41536279a0ad88bd595327b96f01176a60c2243e906c52ac02375f9bc4 " ,
json! ( { } ) ,
)
. await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" message " : " The Authorization header is missing. It must use the bearer authorization method. " ,
" code " : " missing_authorization_header " ,
" type " : " auth " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#missing_authorization_header "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 401 Unauthorized " ) ;
2021-11-08 18:31:27 +01:00
}
#[ actix_rt::test ]
async fn error_patch_api_key_bad_key ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " d4000bd7225f77d1eb22cc706ed36772bbc36767c016a27f76def7537b68600d " ) ;
let ( response , code ) = server
. patch_api_key (
" d0552b41536279a0ad88bd595327b96f01176a60c2243e906c52ac02375f9bc4 " ,
json! ( { } ) ,
)
. await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" message " : " The provided API key is invalid. " ,
" code " : " invalid_api_key " ,
" type " : " auth " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#invalid_api_key "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 403 Forbidden " ) ;
2021-11-08 18:31:27 +01:00
}
#[ actix_rt::test ]
async fn error_patch_api_key_not_found ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
let ( response , code ) = server
. patch_api_key (
" d0552b41d0552b41536279a0ad88bd595327b96f01176a60c2243e906c52ac02375f9bc4 " ,
json! ( { } ) ,
)
. await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" message " : " API key `d0552b41d0552b41536279a0ad88bd595327b96f01176a60c2243e906c52ac02375f9bc4` not found. " ,
" code " : " api_key_not_found " ,
" type " : " invalid_request " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#api_key_not_found "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 404 Not Found " ) ;
2021-11-08 18:31:27 +01:00
}
#[ actix_rt::test ]
async fn error_patch_api_key_indexes_invalid_parameters ( ) {
let mut server = Server ::new_auth ( ) . await ;
server . use_api_key ( " MASTER_KEY " ) ;
let content = json! ( {
" description " : " Indexing API key " ,
" indexes " : [ " products " ] ,
" actions " : [
" search " ,
] ,
" expiresAt " : " 2050-11-13T00:00:00Z "
} ) ;
let ( response , code ) = server . add_api_key ( content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " , " .uid " = > " [ignored] " , " .key " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" name " : null ,
" description " : " Indexing API key " ,
" key " : " [ignored] " ,
" uid " : " [ignored] " ,
" actions " : [
" search "
] ,
" indexes " : [
" products "
] ,
" expiresAt " : " 2050-11-13T00:00:00Z " ,
" createdAt " : " [ignored] " ,
" updatedAt " : " [ignored] "
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 201 Created " ) ;
2021-11-08 18:31:27 +01:00
2022-05-23 17:03:28 +02:00
let uid = response [ " uid " ] . as_str ( ) . unwrap ( ) ;
2021-11-08 18:31:27 +01:00
// invalid description
let content = json! ( {
" description " : 13
} ) ;
2022-05-23 17:03:28 +02:00
let ( response , code ) = server . patch_api_key ( & uid , content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
2023-01-12 13:55:53 +01:00
" message " : " Invalid value type at `.description`: expected a string, but found a positive integer: `13` " ,
2023-01-11 12:33:56 +01:00
" code " : " invalid_api_key_description " ,
" type " : " invalid_request " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#invalid_api_key_description "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 400 Bad Request " ) ;
2021-11-08 18:31:27 +01:00
2022-05-23 17:03:28 +02:00
// invalid name
2021-11-08 18:31:27 +01:00
let content = json! ( {
2022-05-23 17:03:28 +02:00
" name " : 13
2021-11-08 18:31:27 +01:00
} ) ;
2022-05-23 17:03:28 +02:00
let ( response , code ) = server . patch_api_key ( & uid , content ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
2023-01-12 13:55:53 +01:00
" message " : " Invalid value type at `.name`: expected a string, but found a positive integer: `13` " ,
2023-01-11 12:33:56 +01:00
" code " : " invalid_api_key_name " ,
" type " : " invalid_request " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#invalid_api_key_name "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 400 Bad Request " ) ;
2021-11-08 18:31:27 +01:00
}
2021-12-06 15:45:41 +01:00
#[ actix_rt::test ]
async fn error_access_api_key_routes_no_master_key_set ( ) {
let mut server = Server ::new ( ) . await ;
let ( response , code ) = server . add_api_key ( json! ( { } ) ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" message " : " Meilisearch is running without a master key. To access this API endpoint, you must have set a master key at launch. " ,
" code " : " missing_master_key " ,
" type " : " auth " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#missing_master_key "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 401 Unauthorized " ) ;
2021-12-06 15:45:41 +01:00
let ( response , code ) = server . patch_api_key ( " content " , json! ( { } ) ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" message " : " Meilisearch is running without a master key. To access this API endpoint, you must have set a master key at launch. " ,
" code " : " missing_master_key " ,
" type " : " auth " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#missing_master_key "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 401 Unauthorized " ) ;
2021-12-06 15:45:41 +01:00
let ( response , code ) = server . get_api_key ( " content " ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" message " : " Meilisearch is running without a master key. To access this API endpoint, you must have set a master key at launch. " ,
" code " : " missing_master_key " ,
" type " : " auth " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#missing_master_key "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 401 Unauthorized " ) ;
2021-12-06 15:45:41 +01:00
2023-01-24 17:30:35 +01:00
let ( response , code ) = server . list_api_keys ( " " ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" message " : " Meilisearch is running without a master key. To access this API endpoint, you must have set a master key at launch. " ,
" code " : " missing_master_key " ,
" type " : " auth " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#missing_master_key "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 401 Unauthorized " ) ;
2021-12-06 15:45:41 +01:00
server . use_api_key ( " MASTER_KEY " ) ;
let ( response , code ) = server . add_api_key ( json! ( { } ) ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" message " : " Meilisearch is running without a master key. To access this API endpoint, you must have set a master key at launch. " ,
" code " : " missing_master_key " ,
" type " : " auth " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#missing_master_key "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 401 Unauthorized " ) ;
2021-12-06 15:45:41 +01:00
let ( response , code ) = server . patch_api_key ( " content " , json! ( { } ) ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" message " : " Meilisearch is running without a master key. To access this API endpoint, you must have set a master key at launch. " ,
" code " : " missing_master_key " ,
" type " : " auth " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#missing_master_key "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 401 Unauthorized " ) ;
2021-12-06 15:45:41 +01:00
let ( response , code ) = server . get_api_key ( " content " ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" message " : " Meilisearch is running without a master key. To access this API endpoint, you must have set a master key at launch. " ,
" code " : " missing_master_key " ,
" type " : " auth " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#missing_master_key "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 401 Unauthorized " ) ;
2021-12-06 15:45:41 +01:00
2023-01-24 17:30:35 +01:00
let ( response , code ) = server . list_api_keys ( " " ) . await ;
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( meili_snap ::json_string! ( response , { " .createdAt " = > " [ignored] " , " .updatedAt " = > " [ignored] " } ) , @ r ###"
2023-01-11 12:33:56 +01:00
{
" message " : " Meilisearch is running without a master key. To access this API endpoint, you must have set a master key at launch. " ,
" code " : " missing_master_key " ,
" type " : " auth " ,
2023-01-19 15:48:20 +01:00
" link " : " https://docs.meilisearch.com/errors#missing_master_key "
2023-01-11 12:33:56 +01:00
}
" ###);
2023-01-11 14:31:34 +01:00
meili_snap ::snapshot! ( code , @ " 401 Unauthorized " ) ;
2021-12-06 15:45:41 +01:00
}