use modkit_macros::domain_model;
use uuid::Uuid;
#[domain_model]
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum RetrievalMode {
None,
UnrestrictedChatSearch,
FilteredByAttachmentIds(Vec<Uuid>),
}
#[must_use]
pub fn determine_retrieval_mode(
file_search_disabled: bool,
ready_doc_count: i64,
_message_doc_attachment_ids: &[Uuid],
) -> RetrievalMode {
if file_search_disabled {
return RetrievalMode::None;
}
if ready_doc_count == 0 {
return RetrievalMode::None;
}
RetrievalMode::UnrestrictedChatSearch
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn kill_switch_disables_all() {
assert_eq!(determine_retrieval_mode(true, 5, &[]), RetrievalMode::None,);
}
#[test]
fn kill_switch_overrides_docs_and_ids() {
let ids = vec![Uuid::nil()];
assert_eq!(determine_retrieval_mode(true, 5, &ids), RetrievalMode::None,);
}
#[test]
fn no_ready_docs_returns_none() {
assert_eq!(determine_retrieval_mode(false, 0, &[]), RetrievalMode::None,);
}
#[test]
fn zero_docs_with_ids_returns_none() {
let ids = vec![Uuid::nil()];
assert_eq!(
determine_retrieval_mode(false, 0, &ids),
RetrievalMode::None,
);
}
#[test]
fn docs_exist_no_ids_returns_unrestricted() {
assert_eq!(
determine_retrieval_mode(false, 3, &[]),
RetrievalMode::UnrestrictedChatSearch,
);
}
#[test]
fn docs_exist_with_ids_returns_unrestricted_in_p1() {
let ids = vec![Uuid::nil(), Uuid::nil()];
assert_eq!(
determine_retrieval_mode(false, 5, &ids),
RetrievalMode::UnrestrictedChatSearch,
);
}
#[test]
fn single_doc_returns_unrestricted() {
assert_eq!(
determine_retrieval_mode(false, 1, &[]),
RetrievalMode::UnrestrictedChatSearch,
);
}
}