@@ -214,6 +214,43 @@ def setUp(self):
214214 esplora_endpoint = get_esplora_endpoint ()
215215 mine_and_wait (esplora_endpoint , 1 )
216216
217+ def test_spontaneous_payment (self ):
218+ """Spontaneous payment test in python: keysend after channel ready."""
219+ esplora_endpoint = get_esplora_endpoint ()
220+
221+ node_1 , node_2 , tmp_dir_1 , tmp_dir_2 , node_id_1 , node_id_2 , listening_addresses_2 = setup_two_nodes (esplora_endpoint )
222+ fund_nodes (node_1 , node_2 , esplora_endpoint )
223+ open_channel_and_wait_ready (node_1 , node_2 , node_id_2 , listening_addresses_2 [0 ], esplora_endpoint )
224+
225+ keysend_amount_msat = 2_500_000
226+ custom_tlvs = [CustomTlvRecord (type_num = 13377331 , value = bytes ([1 , 2 , 3 ]))]
227+ keysend_payment_id = node_1 .spontaneous_payment ().send_with_custom_tlvs (
228+ keysend_amount_msat , node_id_2 , None , custom_tlvs
229+ )
230+
231+ expect_event (node_1 , Event .PAYMENT_SUCCESSFUL )
232+ received_event = expect_event (node_2 , Event .PAYMENT_RECEIVED )
233+
234+ self .assertEqual (received_event .amount_msat , keysend_amount_msat )
235+ self .assertEqual (received_event .custom_records , custom_tlvs )
236+
237+ sender_payment = node_1 .payment (keysend_payment_id )
238+ receiver_payment = node_2 .payment (keysend_payment_id )
239+
240+ self .assertIsNotNone (sender_payment )
241+ self .assertIsNotNone (receiver_payment )
242+ self .assertEqual (sender_payment .status , PaymentStatus .SUCCEEDED )
243+ self .assertEqual (sender_payment .direction , PaymentDirection .OUTBOUND )
244+ self .assertEqual (sender_payment .amount_msat , keysend_amount_msat )
245+ self .assertTrue (sender_payment .kind .is_spontaneous ())
246+
247+ self .assertEqual (receiver_payment .status , PaymentStatus .SUCCEEDED )
248+ self .assertEqual (receiver_payment .direction , PaymentDirection .INBOUND )
249+ self .assertEqual (receiver_payment .amount_msat , keysend_amount_msat )
250+ self .assertTrue (receiver_payment .kind .is_spontaneous ())
251+
252+ stop_and_cleanup (node_1 , node_2 , tmp_dir_1 , tmp_dir_2 )
253+
217254 def test_channel_full_cycle (self ):
218255 esplora_endpoint = get_esplora_endpoint ()
219256
0 commit comments