sonic-channel 1.1.0

Rust client for sonic search backend
Documentation
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);
}