use crate::common::{database::test_tenant_db, tenant::test_tenant, typesense::test_tenant_search};
use docbox_core::{
document_box::create_document_box::{CreateDocumentBox, create_document_box},
events::{TenantEventMessage, TenantEventPublisher, mpsc::MpscEventPublisher},
folders::create_folder::{CreateFolderData, safe_create_folder},
};
use docbox_search::models::{SearchIndexType, SearchRequest};
mod common;
#[tokio::test]
async fn test_create_folder_success() {
let tenant = test_tenant();
let (db, _db_container) = test_tenant_db().await;
let (search, _search_container) = test_tenant_search(&tenant).await;
let (events, mut events_rx) = MpscEventPublisher::new();
let events = TenantEventPublisher::Mpsc(events);
let (document_box, root) = create_document_box(
&db,
&events,
CreateDocumentBox {
scope: "test".to_string(),
created_by: None,
},
)
.await
.unwrap();
_ = events_rx.recv().await.unwrap();
let folder = safe_create_folder(
&db,
search.clone(),
&events,
CreateFolderData {
folder: root,
name: "Test Folder".to_string(),
created_by: None,
},
)
.await
.unwrap();
assert_eq!(folder.name, "Test Folder");
assert_eq!(folder.created_by, None);
let event = events_rx.recv().await.unwrap();
assert!(matches!(
event,
TenantEventMessage::FolderCreated(created) if created.data.id == folder.id
));
{
let request = SearchRequest {
query: Some("Test Folder".to_string()),
include_name: true,
..Default::default()
};
let result = search
.search_index(&["test".to_string()], request, None)
.await
.unwrap();
assert_eq!(result.total_hits, 1);
assert_eq!(result.results.len(), 1);
let first = result.results.first().unwrap();
assert_eq!(first.item_id, folder.id);
assert!(
matches!(first.item_ty, SearchIndexType::Folder),
"expecting folder search index type"
);
assert_eq!(first.document_box, document_box.scope);
assert!(first.page_matches.is_empty());
assert_eq!(first.total_hits, 1);
assert!(first.name_match);
assert!(!first.content_match);
}
}