[][src]Function cqrs_proptest::arb_events

pub fn arb_events<E: Event + Debug>(
    event_strategy: impl Strategy<Value = E>,
    size: impl Into<SizeRange>
) -> impl Strategy<Value = Vec<E>>

Produces a strategy to generate an arbitrary vector of events, given a strategy to generate an arbitrary event and a size range.

Examples

use cqrs_core::Event;
use cqrs_proptest::arb_events;
use proptest::{prelude::*, strategy::ValueTree, test_runner::TestRunner, prop_oneof};

#[derive(Clone, Copy, Debug)]
struct CreatedEvent{};

impl Event for CreatedEvent {
    fn event_type(&self) -> &'static str {
        "created"
    }
}

#[derive(Clone, Copy, Debug)]
struct DeletedEvent{};

impl Event for DeletedEvent {
    fn event_type(&self) -> &'static str {
        "deleted"
    }
}

#[derive(Clone, Copy, Debug)]
enum MyEvents {
    Created(CreatedEvent),
    Deleted(DeletedEvent),
}

impl Event for MyEvents {
    fn event_type(&self) -> &'static str {
        match *self {
            MyEvents::Created(ref e) => e.event_type(),
            MyEvents::Deleted(ref e) => e.event_type(),
        }
    }
}

fn arb_my_events() -> impl Strategy<Value = MyEvents> {
    prop_oneof![
        Just(MyEvents::Created(CreatedEvent{})),
        Just(MyEvents::Deleted(DeletedEvent{})),
    ]
}

arb_events(arb_my_events(), 0..10)
    .new_tree(&mut TestRunner::default())
    .unwrap()
    .current();