Documentation
#[cfg(feature = "__sync")]
pub use test as maybe_async_test;

use maybe_async::maybe_async;
#[cfg(feature = "__async")]
pub use tokio::test as maybe_async_test;

use bankid::config::{API_URL_TEST, CA_TEST};
use bankid::{
    client::BankID,
    config::{ConfigBuilder, Pkcs12},
    model::{AuthenticatePayloadBuilder, CancelPayload, CollectPayload},
};

#[maybe_async]
#[maybe_async_test]
async fn test_authenticate() {
    let bank_id = client();

    let payload = AuthenticatePayloadBuilder::default()
        .end_user_ip("123.123.123.123".to_string())
        .build()
        .unwrap();

    bank_id.authenticate(payload).await.unwrap();
}

#[maybe_async]
#[maybe_async_test]
async fn test_sign() {}

#[maybe_async]
#[maybe_async_test]
async fn test_collect() {
    let bank_id = client();

    let payload = AuthenticatePayloadBuilder::default()
        .end_user_ip("123.123.123.123".to_string())
        .build()
        .unwrap();

    let authenticate = bank_id.authenticate(payload).await.unwrap();

    bank_id
        .collect(CollectPayload {
            order_ref: authenticate.order_ref,
        })
        .await
        .unwrap();
}

#[maybe_async]
#[maybe_async_test]
async fn test_cancel() {
    let bank_id = client();

    let payload = AuthenticatePayloadBuilder::default()
        .end_user_ip("123.123.123.123".to_string())
        .build()
        .unwrap();

    let authenticate = bank_id.authenticate(payload).await.unwrap();

    bank_id
        .cancel(CancelPayload {
            order_ref: authenticate.order_ref,
        })
        .await
        .unwrap();
}

fn client() -> BankID {
    let pkcs12 = Pkcs12::Der {
        der: P12_TEST.to_vec(),
        password: "qwerty123".to_string(),
    };

    let config = ConfigBuilder::default()
        .pkcs12(pkcs12)
        .url(API_URL_TEST.to_string())
        .ca(CA_TEST.to_string())
        .build()
        .unwrap();

    BankID::new(config)
}

const P12_TEST: &[u8] = include_bytes!("../resources/testcert.p12");