obws 0.15.0

The obws (obvious) remote control library for OBS.
Documentation
use anyhow::Result;
use obws::events::{Event, OutputState};
use serde_json::json;
use test_log::test;

use crate::{common, wait_for};

#[test(tokio::test)]
async fn replay_buffer() -> Result<()> {
    let (client, server) = common::new_client().await?;
    let mut events = client.events()?;
    let client = client.replay_buffer();

    server.expect(
        "GetReplayBufferStatus",
        json!(null),
        json!({"outputActive": false}),
    );

    client.status().await?;

    server.expect(
        "ToggleReplayBuffer",
        json!(null),
        json!({"outputActive": false}),
    );
    server.send_event(Event::ReplayBufferStateChanged {
        active: true,
        state: OutputState::Started,
    });

    client.toggle().await?;
    wait_for!(
        events,
        Event::ReplayBufferStateChanged {
            state: OutputState::Started,
            ..
        }
    );

    server.expect("StartReplayBuffer", json!(null), json!(null));
    server.send_event(Event::ReplayBufferStateChanged {
        active: true,
        state: OutputState::Started,
    });

    client.start().await?;
    wait_for!(
        events,
        Event::ReplayBufferStateChanged {
            state: OutputState::Started,
            ..
        }
    );

    server.expect("SaveReplayBuffer", json!(null), json!(null));

    client.save().await?;

    server.expect(
        "GetLastReplayBufferReplay",
        json!(null),
        json!({"savedReplayPath": "/tmp"}),
    );

    client.last_replay().await?;

    server.expect("StopReplayBuffer", json!(null), json!(null));
    server.send_event(Event::ReplayBufferStateChanged {
        active: true,
        state: OutputState::Stopped,
    });

    client.stop().await?;
    wait_for!(
        events,
        Event::ReplayBufferStateChanged {
            state: OutputState::Stopped,
            ..
        }
    );

    server.stop().await
}