#![cfg_attr(not(test), allow(dead_code, unused_imports))]
#[path = "support/carried_rows.rs"]
mod carried_rows;
use ruststream::memory::prelude::*;
#[derive(Outgoing, Serialized)]
struct Wire(Vec<u8>);
mod with_value {
use std::error::Error;
use ruststream::memory::prelude::*;
use ruststream::testing::TestApp;
use super::Wire;
use super::carried_rows::{Row, Rows};
#[subscriber(Rows::new("users"))]
async fn greet(user: &Row) -> HandlerOutcome {
tracing::info!(user.id, "greeted {}", user.name);
HandlerOutcome::ack()
}
fn app() -> impl App {
RustStream::new(AppInfo::new("users", "0.1.0")).with_broker(MemoryBroker::new(), |b| {
b.include(greet);
})
}
#[tokio::test]
async fn the_handler_got_the_row() -> Result<(), Box<dyn Error>> {
let tb = TestApp::start(app()).await?;
let broker = tb.broker::<MemoryBroker>();
broker
.message(&Wire(b"7:alice".to_vec()))
.to("users")
.publish()
.await?;
broker
.subscriber("users")
.assert_called_once()
.with_value(&Row::new(7, "alice"))
.settled(HandlerOutcome::ack());
Ok(())
}
}
mod received_values {
use std::error::Error;
use ruststream::memory::prelude::*;
use ruststream::testing::TestApp;
use super::Wire;
use super::carried_rows::{Row, Rows};
#[subscriber(Rows::new("users"))]
async fn greet(user: &Row) -> HandlerOutcome {
tracing::info!(user.id, "greeted {}", user.name);
HandlerOutcome::ack()
}
fn app() -> impl App {
RustStream::new(AppInfo::new("users", "0.1.0")).with_broker(MemoryBroker::new(), |b| {
b.include(greet);
})
}
#[tokio::test]
async fn the_handler_got_every_row() -> Result<(), Box<dyn Error>> {
let tb = TestApp::start(app()).await?;
let broker = tb.broker::<MemoryBroker>();
for row in ["7:alice", "8:bob"] {
broker
.message(&Wire(row.as_bytes().to_vec()))
.to("users")
.publish()
.await?;
}
assert_eq!(
broker.subscriber("users").received_values::<Row>(),
[Row::new(7, "alice"), Row::new(8, "bob")],
);
Ok(())
}
}
fn main() {}