@@ -774,3 +774,153 @@ fn test_trades_by_kind_equality() {
774774 assert_eq ! ( channel1, channel2) ;
775775 assert_ne ! ( channel1, channel3) ;
776776}
777+
778+ // =============================================================================
779+ // Tests for block trade subscription channels (Issue #12)
780+ // =============================================================================
781+
782+ // Test block_rfq.trades channel parsing
783+ #[ test]
784+ fn test_parse_channel_block_rfq_trades ( ) {
785+ let channel = SubscriptionChannel :: from_string ( "block_rfq.trades.BTC" ) ;
786+ assert ! (
787+ matches!( channel, SubscriptionChannel :: BlockRfqTrades ( ref currency) if currency == "BTC" )
788+ ) ;
789+ }
790+
791+ #[ test]
792+ fn test_parse_channel_block_rfq_trades_eth ( ) {
793+ let channel = SubscriptionChannel :: from_string ( "block_rfq.trades.ETH" ) ;
794+ assert ! (
795+ matches!( channel, SubscriptionChannel :: BlockRfqTrades ( ref currency) if currency == "ETH" )
796+ ) ;
797+ }
798+
799+ // Test block_trade_confirmations channel parsing
800+ #[ test]
801+ fn test_parse_channel_block_trade_confirmations ( ) {
802+ let channel = SubscriptionChannel :: from_string ( "block_trade_confirmations" ) ;
803+ assert ! ( matches!(
804+ channel,
805+ SubscriptionChannel :: BlockTradeConfirmations
806+ ) ) ;
807+ }
808+
809+ #[ test]
810+ fn test_parse_channel_block_trade_confirmations_by_currency ( ) {
811+ let channel = SubscriptionChannel :: from_string ( "block_trade_confirmations.BTC" ) ;
812+ assert ! ( matches!(
813+ channel,
814+ SubscriptionChannel :: BlockTradeConfirmationsByCurrency ( ref currency) if currency == "BTC"
815+ ) ) ;
816+ }
817+
818+ #[ test]
819+ fn test_parse_channel_block_trade_confirmations_by_currency_eth ( ) {
820+ let channel = SubscriptionChannel :: from_string ( "block_trade_confirmations.ETH" ) ;
821+ assert ! ( matches!(
822+ channel,
823+ SubscriptionChannel :: BlockTradeConfirmationsByCurrency ( ref currency) if currency == "ETH"
824+ ) ) ;
825+ }
826+
827+ // Test channel_name for block trade channels
828+ #[ test]
829+ fn test_channel_name_block_rfq_trades ( ) {
830+ let channel = SubscriptionChannel :: BlockRfqTrades ( "BTC" . to_string ( ) ) ;
831+ assert_eq ! ( channel. channel_name( ) , "block_rfq.trades.BTC" ) ;
832+ }
833+
834+ #[ test]
835+ fn test_channel_name_block_rfq_trades_eth ( ) {
836+ let channel = SubscriptionChannel :: BlockRfqTrades ( "ETH" . to_string ( ) ) ;
837+ assert_eq ! ( channel. channel_name( ) , "block_rfq.trades.ETH" ) ;
838+ }
839+
840+ #[ test]
841+ fn test_channel_name_block_trade_confirmations ( ) {
842+ let channel = SubscriptionChannel :: BlockTradeConfirmations ;
843+ assert_eq ! ( channel. channel_name( ) , "block_trade_confirmations" ) ;
844+ }
845+
846+ #[ test]
847+ fn test_channel_name_block_trade_confirmations_by_currency ( ) {
848+ let channel = SubscriptionChannel :: BlockTradeConfirmationsByCurrency ( "BTC" . to_string ( ) ) ;
849+ assert_eq ! ( channel. channel_name( ) , "block_trade_confirmations.BTC" ) ;
850+ }
851+
852+ #[ test]
853+ fn test_channel_name_block_trade_confirmations_by_currency_eth ( ) {
854+ let channel = SubscriptionChannel :: BlockTradeConfirmationsByCurrency ( "ETH" . to_string ( ) ) ;
855+ assert_eq ! ( channel. channel_name( ) , "block_trade_confirmations.ETH" ) ;
856+ }
857+
858+ // Test is_unknown for block trade channels
859+ #[ test]
860+ fn test_is_unknown_block_rfq_trades ( ) {
861+ let channel = SubscriptionChannel :: BlockRfqTrades ( "BTC" . to_string ( ) ) ;
862+ assert ! ( !channel. is_unknown( ) ) ;
863+ }
864+
865+ #[ test]
866+ fn test_is_unknown_block_trade_confirmations ( ) {
867+ let channel = SubscriptionChannel :: BlockTradeConfirmations ;
868+ assert ! ( !channel. is_unknown( ) ) ;
869+ }
870+
871+ #[ test]
872+ fn test_is_unknown_block_trade_confirmations_by_currency ( ) {
873+ let channel = SubscriptionChannel :: BlockTradeConfirmationsByCurrency ( "BTC" . to_string ( ) ) ;
874+ assert ! ( !channel. is_unknown( ) ) ;
875+ }
876+
877+ // Test equality for block trade channels
878+ #[ test]
879+ fn test_block_rfq_trades_equality ( ) {
880+ let channel1 = SubscriptionChannel :: BlockRfqTrades ( "BTC" . to_string ( ) ) ;
881+ let channel2 = SubscriptionChannel :: BlockRfqTrades ( "BTC" . to_string ( ) ) ;
882+ let channel3 = SubscriptionChannel :: BlockRfqTrades ( "ETH" . to_string ( ) ) ;
883+ assert_eq ! ( channel1, channel2) ;
884+ assert_ne ! ( channel1, channel3) ;
885+ }
886+
887+ #[ test]
888+ fn test_block_trade_confirmations_equality ( ) {
889+ let channel1 = SubscriptionChannel :: BlockTradeConfirmations ;
890+ let channel2 = SubscriptionChannel :: BlockTradeConfirmations ;
891+ assert_eq ! ( channel1, channel2) ;
892+ }
893+
894+ #[ test]
895+ fn test_block_trade_confirmations_by_currency_equality ( ) {
896+ let channel1 = SubscriptionChannel :: BlockTradeConfirmationsByCurrency ( "BTC" . to_string ( ) ) ;
897+ let channel2 = SubscriptionChannel :: BlockTradeConfirmationsByCurrency ( "BTC" . to_string ( ) ) ;
898+ let channel3 = SubscriptionChannel :: BlockTradeConfirmationsByCurrency ( "ETH" . to_string ( ) ) ;
899+ assert_eq ! ( channel1, channel2) ;
900+ assert_ne ! ( channel1, channel3) ;
901+ }
902+
903+ // Test roundtrip for block trade channels
904+ #[ test]
905+ fn test_block_rfq_trades_roundtrip ( ) {
906+ let original = SubscriptionChannel :: BlockRfqTrades ( "BTC" . to_string ( ) ) ;
907+ let channel_name = original. channel_name ( ) ;
908+ let parsed = SubscriptionChannel :: from_string ( & channel_name) ;
909+ assert_eq ! ( original, parsed) ;
910+ }
911+
912+ #[ test]
913+ fn test_block_trade_confirmations_roundtrip ( ) {
914+ let original = SubscriptionChannel :: BlockTradeConfirmations ;
915+ let channel_name = original. channel_name ( ) ;
916+ let parsed = SubscriptionChannel :: from_string ( & channel_name) ;
917+ assert_eq ! ( original, parsed) ;
918+ }
919+
920+ #[ test]
921+ fn test_block_trade_confirmations_by_currency_roundtrip ( ) {
922+ let original = SubscriptionChannel :: BlockTradeConfirmationsByCurrency ( "BTC" . to_string ( ) ) ;
923+ let channel_name = original. channel_name ( ) ;
924+ let parsed = SubscriptionChannel :: from_string ( & channel_name) ;
925+ assert_eq ! ( original, parsed) ;
926+ }
0 commit comments