sonic-channel/tests/query_command.rs
Dmitriy Pleshevskiy bd08317388
Design improvements (#13)
* protocol: extract response type

* deps: drop lazy_static and regex

* protocol: extract request commands

* protocol: create a struct for...

   ...formatting and parsing sonic protocol

* protocol: refac flush command

* commands: introduce dest, refac push and count

* commands: refac all commands

* commands: add convinient methods

* doc: add documentation for each new structs

* doc: change examples in the readme

* commands: implement from trait for count and flush

* commands: change pag logic
2022-07-18 11:07:12 +00:00

138 lines
3.4 KiB
Rust

mod common;
use common::*;
const COLLECTION: &str = "Search";
#[test]
fn should_find_object_by_exact_match() {
let bucket = "query_by_exact_match";
let title = "Sweet Teriyaki Beef Skewers";
let dest = Dest::col_buc(COLLECTION, bucket);
let ingest_channel = ingest_start();
ingest_channel
.push(PushRequest::new(dest.clone().obj("1"), title))
.unwrap();
consolidate();
let search_channel = search_start();
match search_channel.query(QueryRequest::new(dest, title)) {
Ok(object_ids) => assert_eq!(object_ids, vec![String::from("1")]),
Err(_) => unreachable!(),
}
flush_bucket(COLLECTION, bucket);
}
#[test]
fn should_find_multiline_object_by_partial_match() {
let bucket = "query_multiline";
let multiline_text = "
Sweet
Teriyaki
Beef
Skewers
None";
let dest = Dest::col_buc(COLLECTION, bucket);
let ingest_channel = ingest_start();
ingest_channel
.push(PushRequest::new(dest.clone().obj("1"), multiline_text))
.unwrap();
consolidate();
let words = ["Sweet", "Teriyaki", "Beef", "Skewers"];
let search_channel = search_start();
for word in words {
match search_channel.query(QueryRequest::new(dest.clone(), word)) {
Ok(object_ids) => assert_eq!(object_ids, vec![String::from("1")]),
Err(_) => unreachable!(),
}
}
flush_bucket(COLLECTION, bucket);
}
#[test]
fn should_find_many_objects() {
let bucket = "query_many_objects";
let dest = Dest::col_buc(COLLECTION, bucket);
let ingest_channel = ingest_start();
ingest_channel
.push(PushRequest::new(
dest.clone().obj("1"),
"Sweet Teriyaki Beef Skewers",
))
.unwrap();
ingest_channel
.push(PushRequest::new(
dest.clone().obj("2"),
"Slow Cooker Beef Stew I",
))
.unwrap();
ingest_channel
.push(PushRequest::new(
dest.clone().obj("3"),
"Christmas Prime Rib",
))
.unwrap();
consolidate();
let search_channel = search_start();
match search_channel.query(QueryRequest::new(dest, "Beef")) {
Ok(object_ids) => assert_eq!(object_ids, vec!["2", "1"]),
Err(_) => unreachable!(),
}
flush_bucket(COLLECTION, bucket);
}
#[test]
fn should_find_limited_objects() {
let bucket = "query_limited_objects";
let dest = Dest::col_buc(COLLECTION, bucket);
let ingest_channel = ingest_start();
ingest_channel
.push(PushRequest::new(
dest.clone().obj("1"),
"Sweet Teriyaki Beef Skewers",
))
.unwrap();
ingest_channel
.push(PushRequest::new(
dest.clone().obj("2"),
"Slow Cooker Beef Stew I",
))
.unwrap();
ingest_channel
.push(PushRequest::new(
dest.clone().obj("3"),
"Christmas Prime Rib",
))
.unwrap();
consolidate();
let search_channel = search_start();
match search_channel.query(QueryRequest::new(dest.clone(), "Beef").limit(1)) {
Ok(object_ids) => assert_eq!(object_ids, vec!["2"]),
Err(_) => unreachable!(),
}
let search_channel = search_start();
match search_channel.query(QueryRequest::new(dest, "Beef").pag(1, 1)) {
Ok(object_ids) => assert_eq!(object_ids, vec!["1"]),
Err(_) => unreachable!(),
}
flush_bucket(COLLECTION, bucket);
}