pocketstation 1.0.0

Source-aware desktop audio Session SDK
use crate::frame::{EndpointId, RouteId, SessionId, StemId};
use crate::graph::NodeConfig;

use super::{EndpointPrepareContext, EndpointRouteContext, SessionTimelineOrigin};

#[test]
fn given_endpoint_context_when_constructed_then_route_and_timeline_are_required() {
    let context = EndpointPrepareContext::new(
        SessionId(1),
        EndpointId(2),
        EndpointRouteContext::from_stem(RouteId(4), StemId(3)),
        SessionTimelineOrigin::from_monotonic_timestamp_ns(5),
        NodeConfig::new(),
    );

    assert_eq!(context.route_context().audio_stem_id(), Some(StemId(3)));
    assert_eq!(context.route_context().route_id(), RouteId(4));
    assert_eq!(
        context.session_timeline_origin().monotonic_timestamp_ns(),
        5
    );
}

#[test]
fn given_source_route_when_constructed_then_source_origin_is_not_a_synthetic_stem() {
    let context = EndpointPrepareContext::new(
        SessionId(1),
        EndpointId(2),
        EndpointRouteContext::from_source(
            RouteId(4),
            crate::frame::SourceId(6),
            crate::frame::StreamId(7),
            None,
        ),
        SessionTimelineOrigin::from_monotonic_timestamp_ns(5),
        NodeConfig::new(),
    );

    let route_context = context.route_context();
    assert_eq!(route_context.audio_stem_id(), None);
    assert_eq!(route_context.route_id(), RouteId(4));
}