order
This commit is contained in:
@@ -277,6 +277,85 @@ async fn upload_document_with_custom_title_sets_filename() -> Result<()> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn document_list_sorting_controls() -> Result<()> {
|
||||
let _lock = acquire_db_lock().await;
|
||||
let app = TestApp::new().await?;
|
||||
|
||||
let password = "passw0rd";
|
||||
app.insert_user("sorting", password, "admin").await?;
|
||||
let token = app.login_token("sorting", password).await?;
|
||||
|
||||
let first = app
|
||||
.upload_document_with_options(
|
||||
"/api/documents",
|
||||
"alpha.txt",
|
||||
"text/plain",
|
||||
b"alpha",
|
||||
None,
|
||||
Some("Alpha"),
|
||||
None,
|
||||
&token,
|
||||
)
|
||||
.await?;
|
||||
assert!(first.status().is_success());
|
||||
let first_body = body_to_vec(first.into_body()).await?;
|
||||
let first_doc: DocumentDetail = serde_json::from_slice(&first_body)?;
|
||||
|
||||
let second = app
|
||||
.upload_document_with_options(
|
||||
"/api/documents",
|
||||
"zulu.txt",
|
||||
"text/plain",
|
||||
b"zulu",
|
||||
None,
|
||||
Some("Zulu"),
|
||||
None,
|
||||
&token,
|
||||
)
|
||||
.await?;
|
||||
assert!(second.status().is_success());
|
||||
let second_body = body_to_vec(second.into_body()).await?;
|
||||
let second_doc: DocumentDetail = serde_json::from_slice(&second_body)?;
|
||||
|
||||
// Default sort should be title ASC => Alpha first.
|
||||
let default_resp = app.get("/api/documents", Some(&token)).await?;
|
||||
assert_eq!(default_resp.status(), StatusCode::OK);
|
||||
let default_body = body_to_vec(default_resp.into_body()).await?;
|
||||
let default_list: Vec<DocumentListItem> = serde_json::from_slice(&default_body)?;
|
||||
assert_eq!(default_list.len(), 2);
|
||||
assert_eq!(default_list[0].id, first_doc.document.id);
|
||||
assert_eq!(default_list[1].id, second_doc.document.id);
|
||||
|
||||
// Sort by created_at DESC, expecting most recent (second) first.
|
||||
let created_desc = app
|
||||
.get("/api/documents?sort=created_at&dir=desc", Some(&token))
|
||||
.await?;
|
||||
assert_eq!(created_desc.status(), StatusCode::OK);
|
||||
let created_body = body_to_vec(created_desc.into_body()).await?;
|
||||
let created_list: Vec<DocumentListItem> = serde_json::from_slice(&created_body)?;
|
||||
assert_eq!(created_list.len(), 2);
|
||||
assert_eq!(created_list[0].id, second_doc.document.id);
|
||||
assert_eq!(created_list[1].id, first_doc.document.id);
|
||||
|
||||
// Folder contents respects the same parameters.
|
||||
let folder_resp = app
|
||||
.get(
|
||||
"/api/folders/root/contents?sort=created_at&dir=desc",
|
||||
Some(&token),
|
||||
)
|
||||
.await?;
|
||||
assert_eq!(folder_resp.status(), StatusCode::OK);
|
||||
let folder_body = body_to_vec(folder_resp.into_body()).await?;
|
||||
let folder_contents: FolderContents = serde_json::from_slice(&folder_body)?;
|
||||
assert_eq!(folder_contents.documents.len(), 2);
|
||||
assert_eq!(folder_contents.documents[0].id, second_doc.document.id);
|
||||
assert_eq!(folder_contents.documents[1].id, first_doc.document.id);
|
||||
|
||||
app.cleanup().await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn duplicate_and_restore_document() -> Result<()> {
|
||||
let _lock = acquire_db_lock().await;
|
||||
|
||||
Reference in New Issue
Block a user