use super::Mock;
use crate::ValkeyValue;
use crate::commands::stream::StreamCommands;
use crate::commands::stream::StreamGroupCreateOptions;
use crate::commands::stream::StreamReadGroupOptions;
fn entry(id: &str, field: &str, val: &str) -> ValkeyValue {
ValkeyValue::Array(vec![
ValkeyValue::BulkString(id.as_bytes().to_vec().into()),
ValkeyValue::Array(vec![
ValkeyValue::BulkString(field.as_bytes().to_vec().into()),
ValkeyValue::BulkString(val.as_bytes().to_vec().into()),
]),
])
}
#[tokio::test]
async fn xreadgroup_encoding() {
let m = Mock::array(vec![ValkeyValue::Array(vec![
ValkeyValue::BulkString(b"s".to_vec().into()),
ValkeyValue::Array(vec![entry("1-0", "f", "v")]),
])]);
let opts = StreamReadGroupOptions {
block_ms: None,
count: Some(5),
no_ack: true,
};
m.xreadgroup("g", "c", &[("s", ">")], Some(opts))
.await
.unwrap();
m.assert_args(&[
"XREADGROUP",
"GROUP",
"g",
"c",
"COUNT",
"5",
"NOACK",
"STREAMS",
"s",
">",
]);
}
#[tokio::test]
async fn xsetid_encoding() {
let m = Mock::ok();
m.xsetid("s", "5-0", Some(10), Some("4-0")).await.unwrap();
m.assert_args(&[
"XSETID",
"s",
"5-0",
"ENTRIESADDED",
"10",
"MAXDELETEDID",
"4-0",
]);
}
#[tokio::test]
async fn xgroup_option_variants() {
let m = Mock::ok();
let opts = StreamGroupCreateOptions {
make_stream: true,
entries_read: Some(0),
};
m.xgroup_create_options("s", "g", "$", &opts).await.unwrap();
m.assert_args(&[
"XGROUP",
"CREATE",
"s",
"g",
"$",
"MKSTREAM",
"ENTRIESREAD",
"0",
]);
let m = Mock::ok();
m.xgroup_set_id("s", "g", "0", None).await.unwrap();
m.assert_args(&["XGROUP", "SETID", "s", "g", "0"]);
}
#[tokio::test]
async fn xpending_range_encoding() {
let m = Mock::array(vec![ValkeyValue::Array(vec![
ValkeyValue::BulkString(b"1-0".to_vec().into()),
ValkeyValue::BulkString(b"c1".to_vec().into()),
ValkeyValue::Int(100),
ValkeyValue::Int(3),
])]);
let entries = m
.xpending_range("s", "g", "-", "+", 10, Some(50), Some("c1"))
.await
.unwrap();
m.assert_args(&["XPENDING", "s", "g", "IDLE", "50", "-", "+", "10", "c1"]);
assert_eq!(entries.len(), 1);
assert_eq!(entries[0].delivery_count, 3);
}