assert_enqueued

Macro assert_enqueued 

Source
macro_rules! assert_enqueued {
    (1 job, to: $backend:ident, $($tail:tt)*) => { ... };
    ($n:literal jobs, to: $backend:ident, $($tail:tt)*) => { ... };
    (1 job, $($tail:tt)*) => { ... };
    ($n:literal jobs, $($tail:tt)*) => { ... };
    (to: $backend:ident, $($tail:tt)*) => { ... };
    (@global $n:literal $($tail:tt)*) => { ... };
    (@internal 1 to: $backend:ident, $($tail:tt)*) => { ... };
    (@internal $n:literal to: $backend:ident, $($tail:tt)*) => { ... };
    (@query $vec:ident; with_data: $data:expr,) => { ... };
    (@query $vec:ident; with_data: $data:expr $(, $($tail:tt)*)?) => { ... };
    (@query $vec:ident; with_metadata: $metadata:expr,) => { ... };
    (@query $vec:ident; with_metadata: $metadata:expr $(, $($tail:tt)*)?) => { ... };
    (@query $vec:ident; tagged_with: $tags:expr,) => { ... };
    (@query $vec:ident; tagged_with: $tags:expr $(, $($tail:tt)*)?) => { ... };
    (@query $vec:ident; scheduled_at: $scheduled_at:expr,) => { ... };
    (@query $vec:ident; scheduled_at: $scheduled_at:expr $(, $($tail:tt)*)?) => { ... };
    (@query $vec:ident; scheduled_after: $scheduled_after:expr,) => { ... };
    (@query $vec:ident; scheduled_after: $scheduled_after:expr $(, $($tail:tt)*)?) => { ... };
    (@query $vec:ident; scheduled_before: $scheduled_before:expr,) => { ... };
    (@query $vec:ident; scheduled_before: $scheduled_before:expr $(, $($tail:tt)*)?) => { ... };
    (@query $vec:ident; for_executor: $executor:literal,) => { ... };
    (@query $vec:ident; for_executor: $executor:literal $(, $($tail:tt)*)?) => { ... };
    (@query $vec:ident; for_executor: $executor:path,) => { ... };
    (@query $vec:ident; for_executor: $executor:path $(, $($tail:tt)*)?) => { ... };
    ($($tail:tt)*) => { ... };
}
Expand description

A macro for making assertions about what jobs should have been enqueued.

Facilitates making assertions about what jobs have been enqueued into the backend. Assertions can be based on data, metadata, tags, executor, and scheduled_at.

§Example

use rexecutor::backend::memory::InMemoryBackend;
let backend = InMemoryBackend::new().paused();
let scheduled_at = Utc::now() + TimeDelta::minutes(5);

ExampleExecutor::builder()
    .with_data("data".to_owned())
    .with_metadata("metadata".to_owned())
    .with_tags(vec!["tag1", "tag2"])
    .schedule_at(scheduled_at)
    .enqueue_to_backend(&backend)
    .await
    .unwrap();

ExampleExecutor::builder()
    .with_data("data2".to_owned())
    .with_metadata("metadata2".to_owned())
    .with_tags(vec!["tag2", "tag3"])
    .schedule_at(scheduled_at)
    .enqueue_to_backend(&backend)
    .await
    .unwrap();


assert_enqueued!(
    to: backend,
    with_data: "data".to_owned(),
    scheduled_at: scheduled_at,
    for_executor: ExampleExecutor
);

assert_enqueued!(
    1 job,
    to: backend,
    with_metadata: "metadata2".to_owned(),
    scheduled_after: Utc::now(),
    for_executor: ExampleExecutor
);

assert_enqueued!(
    2 jobs,
    to: backend,
    tagged_with: ["tag2"],
    scheduled_before: Utc::now() + TimeDelta::hours(1),
    for_executor: ExampleExecutor
);

§Example global backend

When working with the global backend, it is possible to use the macro without stating to which backend the job should have been enqueued.

use rexecutor::backend::memory::InMemoryBackend;

let backend = InMemoryBackend::new().paused();

Rexecutor::new(backend).set_global_backend().unwrap();

ExampleExecutor::builder()
    .with_data("data".to_owned())
    .enqueue()
    .await
    .unwrap();

assert_enqueued!(
    with_data: "data".to_owned(),
    for_executor: ExampleExecutor
);

ExampleExecutor::builder()
    .with_data("data".to_owned())
    .enqueue()
    .await
    .unwrap();

assert_enqueued!(
    2 jobs,
    with_data: "data".to_owned(),
    for_executor: ExampleExecutor
);