maib-client 0.1.0

An unofficial Rust client for MAIB API
Documentation
mod sanity {
    use crate::models::{
        ExtensionId, Notification, NotificationPayload, PaymentId, QRId, Signature, SignatureKey,
    };

    fn predefined_notification() -> Notification {
        return Notification {
            amount: 0.into(),
            commission: 0.into(),
            currency: crate::models::Currency::MDL,
            executed_at: "2029-10-22T10:32:28+03:00".to_owned(),
            extension_id: ExtensionId::new("extension_id".to_owned()),
            order_id: None,
            pay_id: PaymentId::new("pay_id".to_owned()),
            payer_iban: "payer_iban".to_owned(),
            payer_name: "payer_name".to_owned(),
            qr_id: QRId::new("qr_id".to_owned()),
            qr_status: crate::models::QRStatus::Paid,
            reference_id: "reference_id".to_owned(),
            terminal_id: None,
        };
    }

    #[test]
    fn validate_signature() {
        let notification = predefined_notification();
        let signature_key = SignatureKey::from("foobar".to_owned());
        let signature = Signature::new("NTFkNzc3ZmZlZjg0MjU0N2I4ODEzYzhmNjQ0N2ZkN2IzODY4Zjk2NGUwZjliMDAxODI5NmFlNDU1N2EyMDdmZA==".to_owned());

        let payload = NotificationPayload {
            result: notification,
            signature: signature.clone(),
        };

        let sig = payload.build_signature(signature_key);

        assert_eq!(sig, signature);
    }

    #[test]
    fn validate_signature_with_order_id() {
        let mut notification = predefined_notification();
        notification.order_id = Some("order_id".to_owned());

        let signature_key = SignatureKey::from("foobar".to_owned());
        let signature = Signature::new("NmFjNTczNGM3YzVjMGZhNzE1Nzk4NThiMDY2ZGQ3NDkwMDViNTQ2YzkzNWI4ZDUzNjAwYjA3ZTYwOTZiZjVlNg==".to_owned());

        let payload = NotificationPayload {
            result: notification,
            signature: signature.clone(),
        };

        let sig = payload.build_signature(signature_key);

        assert_eq!(sig, signature);
    }

    #[test]
    fn validate_signature_with_terminal_id() {
        let mut notification = predefined_notification();
        notification.terminal_id = Some("terminal_id".to_owned());

        let signature_key = SignatureKey::from("foobar".to_owned());
        let signature = Signature::new("MTYzYTI1Y2FiYjFkNzVlMTlhMjg5MTc4YTkxOTJlMzEyMGRkYTg2NjhmOGI3OWE1N2VjYWEwMTgxYWU3MWNlZg==".to_owned());

        let payload = NotificationPayload {
            result: notification,
            signature: signature.clone(),
        };

        let sig = payload.build_signature(signature_key);

        assert_eq!(sig, signature);
    }

    #[test]
    fn validate_signature_with_order_and_terminal_id() {
        let mut notification = predefined_notification();
        notification.order_id = Some("order_id".to_owned());
        notification.terminal_id = Some("terminal_id".to_owned());

        let signature_key = SignatureKey::from("foobar".to_owned());
        let signature = Signature::new("MDMyNGNiOTYwN2Y2NzZjYmY5MDJkMjhlYTgwMzRkODU0NjdhMmUzZjA2MTU3NGNhYjNhNTBiNDk4NWFkZTczYw==".to_owned());

        let payload = NotificationPayload {
            result: notification,
            signature: signature.clone(),
        };

        let sig = payload.build_signature(signature_key);

        assert_eq!(sig, signature);
    }
}