Skip to content

Commit 06cb21e

Browse files
authored
Merge pull request #38 from tsugumi-sys/codex/add-unittest-for-word_search.rs
Add word search tests
2 parents aa22c8c + b44cdc8 commit 06cb21e

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

search/src/word_search.rs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,52 @@ impl SearchEngine for WordSearchEngine {
2626
.collect()
2727
}
2828
}
29+
30+
#[cfg(test)]
31+
mod tests {
32+
use super::*;
33+
use serde_json::json;
34+
35+
fn make_post(id: u32, fields: &[&str]) -> SearchPostData {
36+
SearchPostData {
37+
id: id.to_string(),
38+
fields: fields.iter().map(|s| s.to_string()).collect(),
39+
meta: json!({ "id": id }),
40+
}
41+
}
42+
43+
#[test]
44+
fn search_is_case_insensitive() {
45+
let posts = vec![
46+
make_post(1, &["Hello World"]),
47+
make_post(2, &["rust language"]),
48+
];
49+
50+
let engine = WordSearchEngine::new(posts);
51+
let results = engine.search("hello");
52+
assert_eq!(results.len(), 1);
53+
assert_eq!(results[0]["id"], 1);
54+
55+
let results_upper = engine.search("RUST");
56+
assert_eq!(results_upper.len(), 1);
57+
assert_eq!(results_upper[0]["id"], 2);
58+
}
59+
60+
#[test]
61+
fn search_matches_complete_words() {
62+
let posts = vec![make_post(1, &["rust lang"]), make_post(2, &["crust test"])];
63+
64+
let engine = WordSearchEngine::new(posts);
65+
let results = engine.search("rust");
66+
assert_eq!(results.len(), 1);
67+
assert_eq!(results[0]["id"], 1);
68+
}
69+
70+
#[test]
71+
fn search_returns_empty_for_no_match() {
72+
let posts = vec![make_post(1, &["hello world"])];
73+
let engine = WordSearchEngine::new(posts);
74+
let results = engine.search("absent");
75+
assert!(results.is_empty());
76+
}
77+
}

0 commit comments

Comments
 (0)