event_store 0.1.1

Crate to deal with every aspect of an eventstore
Documentation
use uuid::Uuid;

use crate::storage::{inmemory::InMemoryBackend, Storage, StorageError};
use crate::stream::Stream;

use std::str::FromStr;

mod creation {
    use super::*;

    use pretty_assertions::assert_eq;

    #[tokio::test]
    async fn success() {
        let mut storage = InMemoryBackend::default();
        let uuid = Uuid::new_v4().to_string();
        let c_id = Uuid::new_v4();

        assert!(storage
            .create_stream(Stream::from_str(&uuid).unwrap(), c_id)
            .await
            .is_ok());
    }

    #[tokio::test]
    async fn fail_if_stream_exists() {
        let mut storage = InMemoryBackend::default();

        let uuid = Uuid::new_v4().to_string();
        let c_id = Uuid::new_v4();

        assert!(storage
            .create_stream(Stream::from_str(&uuid).unwrap(), c_id)
            .await
            .is_ok());
        assert_eq!(
            storage
                .create_stream(Stream::from_str(&uuid).unwrap(), c_id)
                .await,
            Err(StorageError::StreamAlreadyExists)
        );
    }
}

mod deletion {
    use super::*;

    use pretty_assertions::assert_eq;

    #[tokio::test]
    async fn success() {
        let mut storage = InMemoryBackend::default();
        let uuid = Uuid::new_v4().to_string();
        let c_id = Uuid::new_v4();

        assert!(storage
            .create_stream(Stream::from_str(&uuid).unwrap(), c_id)
            .await
            .is_ok());
        assert!(storage
            .delete_stream(&Stream::from_str(&uuid).unwrap(), c_id)
            .await
            .is_ok());
    }

    #[tokio::test]
    async fn fail_if_stream_doesnt_exists() {
        let mut storage = InMemoryBackend::default();

        let uuid = Uuid::new_v4().to_string();
        let c_id = Uuid::new_v4();

        assert_eq!(
            storage
                .delete_stream(&Stream::from_str(&uuid).unwrap(), c_id)
                .await,
            Err(StorageError::StreamDoesntExists)
        );
    }
}