paykit-lib 0.1.0

Paykit library implementation
Documentation
use super::*;
use crate::allowance::test_fixtures::{allowance_id, event_id, minimal_proposal};

#[tokio::test]
async fn test_allowance_send_helpers_preserve_fifo_event_order() {
    let mut setup = PrivateTestSetup::new().await;
    let proposal = minimal_proposal();
    let proposal_event_id = proposal.event_id().clone();
    let acceptance_event_id = event_id("8a0d8b4c-913f-4e31-9f2c-2a6f5bb4d202");
    let acceptance = AllowanceAcceptance::new(
        acceptance_event_id.clone(),
        allowance_id(),
        proposal_event_id.clone(),
    )
    .unwrap();
    let rejection = AllowanceRejection::new(
        event_id("8a0d8b4c-913f-4e31-9f2c-2a6f5bb4d203"),
        allowance_id(),
        proposal_event_id.clone(),
    )
    .unwrap();
    let end = AllowanceEnd::accepted(
        event_id("8a0d8b4c-913f-4e31-9f2c-2a6f5bb4d204"),
        allowance_id(),
        proposal_event_id,
        acceptance_event_id,
    )
    .unwrap();

    send_allowance_proposal(
        &mut setup.sender_link,
        &crate::PaykitAppId::new("bitkit").unwrap(),
        &proposal,
    )
    .await
    .unwrap();
    send_allowance_acceptance(
        &mut setup.sender_link,
        &crate::PaykitAppId::new("bitkit").unwrap(),
        &acceptance,
    )
    .await
    .unwrap();
    send_allowance_rejection(
        &mut setup.sender_link,
        &crate::PaykitAppId::new("bitkit").unwrap(),
        &rejection,
    )
    .await
    .unwrap();
    send_allowance_end(
        &mut setup.sender_link,
        &crate::PaykitAppId::new("bitkit").unwrap(),
        &end,
    )
    .await
    .unwrap();

    let received = setup
        .receiver_link
        .receive_private_application_messages()
        .await
        .unwrap();
    let events = received
        .iter()
        .filter_map(parse_allowance_event_message)
        .collect::<Vec<_>>();

    assert_eq!(events.len(), 4);
    assert_eq!(
        events
            .iter()
            .map(AllowanceEventMessage::kind)
            .collect::<Vec<_>>(),
        vec![
            PrivateMessageKind::AllowanceProposal,
            PrivateMessageKind::AllowanceAcceptance,
            PrivateMessageKind::AllowanceRejection,
            PrivateMessageKind::AllowanceEnd,
        ]
    );
    assert_eq!(
        events[0].parsed_event(),
        Some(&AllowanceEvent::Proposal(proposal))
    );
    assert_eq!(
        events[1].parsed_event(),
        Some(&AllowanceEvent::Acceptance(acceptance))
    );
    assert_eq!(
        events[2].parsed_event(),
        Some(&AllowanceEvent::Rejection(rejection))
    );
    assert_eq!(events[3].parsed_event(), Some(&AllowanceEvent::End(end)));

    close_encrypted_link(setup.receiver_link).await.unwrap();
    close_encrypted_link(setup.sender_link).await.unwrap();
    setup.sender_session.signout().await.unwrap();
    setup.receiver_session.signout().await.unwrap();
}