| 55 | #[tokio::test] |
| 56 | #[serial] |
| 57 | async fn test_basic_paper_workflow() { |
| 58 | let (dir, db_path) = temp_db(); |
| 59 | |
| 60 | // Initialize database |
| 61 | learner().arg("init").arg("--path").arg(&db_path).arg("--accept-defaults").assert().success(); |
| 62 | |
| 63 | // Add a paper |
| 64 | learner() |
| 65 | .arg("add") |
| 66 | .arg("2301.07041") |
| 67 | .arg("--path") |
| 68 | .arg(&db_path) |
| 69 | .arg("--accept-defaults") |
| 70 | .assert() |
| 71 | .success() |
| 72 | .stdout(predicate::str::contains("Found paper")) |
| 73 | .stdout(predicate::str::contains("Verifiable Fully Homomorphic")); |
| 74 | |
| 75 | // Try adding same paper again to test duplicate handling |
| 76 | learner() |
| 77 | .arg("add") |
| 78 | .arg("2301.07041") |
| 79 | .arg("--path") |
| 80 | .arg(&db_path) |
| 81 | .arg("--accept-defaults") |
| 82 | .assert() |
| 83 | .success() |
| 84 | .stdout(predicate::str::contains("already in your database")); |
| 85 | |
| 86 | // Get the paper |
| 87 | learner() |
| 88 | .arg("get") |
| 89 | .arg("arxiv") |
| 90 | .arg("2301.07041") |
| 91 | .arg("--path") |
| 92 | .arg(&db_path) |
| 93 | .arg("--accept-defaults") |
| 94 | .assert() |
| 95 | .success() |
| 96 | .stdout(predicate::str::contains("Paper details")) |
| 97 | .stdout(predicate::str::contains("Verifiable Fully Homomorphic")); |
| 98 | |
| 99 | // Search for the paper |
| 100 | learner() |
| 101 | .arg("search") |
| 102 | .arg("Homomorphic") |
| 103 | .arg("--path") |
| 104 | .arg(&db_path) |
| 105 | .arg("--accept-defaults") |
| 106 | .assert() |
| 107 | .success() |
| 108 | .stdout(predicate::str::contains("Found")) |
| 109 | .stdout(predicate::str::contains("Verifiable Fully Homomorphic")); |
| 110 | |
| 111 | // Search for nonexistent paper |
| 112 | learner() |
| 113 | .arg("search") |
| 114 | .arg("ThisPaperDoesNotExist123") |