@@ -39,32 +39,50 @@ def _fake_post(url, headers=None, json=None, timeout=None):
3939 assert body ['ok' ] is True
4040 assert body ['checkout_url' ] == 'https://nowpayments.test/i/inv_123456'
4141 assert body ['product' ]['sku' ] == 'pilot_399'
42+ assert body ['customer_email' ] == 'buyer@example.com'
4243 assert captured ['url' ] == 'https://api.nowpayments.io/v1/invoice'
4344 assert captured ['headers' ]['x-api-key' ] == 'np_test_key'
4445 assert captured ['json' ]['price_amount' ] == 399.0
4546 assert captured ['json' ]['price_currency' ] == 'usd'
4647 assert captured ['json' ]['ipn_callback_url' ].endswith ('/api/payments/nowpayments/ipn' )
48+ assert f"order_id={ body ['order_id' ]} " in captured ['json' ]['success_url' ]
49+ assert f"order_id={ body ['order_id' ]} " in captured ['json' ]['cancel_url' ]
4750
4851 order_response = client .get (f"/api/payments/nowpayments/order/{ body ['order_id' ]} " )
4952 order_body = order_response .get_json ()
5053 assert order_response .status_code == 200
5154 assert order_body ['order' ]['payment_status' ] == 'waiting'
5255 assert order_body ['order' ]['paid' ] is False
56+ assert order_body ['order' ]['customer_receipt_status' ] == 'pending'
5357
5458
55- def test_nowpayments_ipn_updates_order_status (client , app_module , monkeypatch ):
59+
60+ def test_nowpayments_ipn_updates_order_status_and_sends_postpay_emails (client , app_module , monkeypatch ):
61+ app_module .RESEND_API_KEY = 're_test'
62+ app_module .RESEND_FROM = 'PayeeProof <alerts@notify.payeeproof.com>'
63+ app_module .RESEND_TO = 'hello@payeeproof.com'
64+ app_module .NOWPAYMENTS_POSTPAY_REPLY_TO = 'hello@payeeproof.com'
65+ app_module .NOWPAYMENTS_SUPPORT_EMAIL = 'hello@payeeproof.com'
66+
67+ sent = []
68+
5669 def _fake_post (url , headers = None , json = None , timeout = None ):
57- return _FakeResponse (
58- status_code = 200 ,
59- payload = {
60- 'id' : 'inv_abc' ,
61- 'invoice_url' : 'https://nowpayments.test/i/inv_abc' ,
62- 'payment_status' : 'waiting' ,
63- },
64- )
70+ if url .endswith ('/invoice' ):
71+ return _FakeResponse (
72+ status_code = 200 ,
73+ payload = {
74+ 'id' : 'inv_abc' ,
75+ 'invoice_url' : 'https://nowpayments.test/i/inv_abc' ,
76+ 'payment_status' : 'waiting' ,
77+ },
78+ )
79+ if url .endswith ('/emails' ):
80+ sent .append ({'url' : url , 'headers' : headers or {}, 'json' : json or {}})
81+ return _FakeResponse (status_code = 200 , payload = {'id' : f"em_{ len (sent )} " })
82+ raise AssertionError (f'Unexpected URL: { url } ' )
6583
6684 monkeypatch .setattr (app_module .requests , 'post' , _fake_post )
67- create_response = client .post ('/api/payments/nowpayments/invoice' , json = {'sku' : 'pilot_399' })
85+ create_response = client .post ('/api/payments/nowpayments/invoice' , json = {'sku' : 'pilot_399' , 'customer_email' : 'buyer@example.com' })
6886 order_id = create_response .get_json ()['order_id' ]
6987
7088 ipn_payload = {
@@ -84,13 +102,20 @@ def _fake_post(url, headers=None, json=None, timeout=None):
84102 assert ipn_response .status_code == 200
85103 assert ipn_body ['paid' ] is True
86104 assert ipn_body ['payment_status' ] == 'finished'
105+ assert ipn_body ['payment_notice_status' ] == 'sent'
106+ assert ipn_body ['customer_receipt_status' ] == 'sent'
107+ assert len (sent ) == 2
108+ assert sent [0 ]['headers' ]['Idempotency-Key' ] == f'nowpayments-admin-{ order_id } '
109+ assert sent [1 ]['headers' ]['Idempotency-Key' ] == f'nowpayments-customer-{ order_id } '
87110
88111 order_response = client .get (f'/api/payments/nowpayments/order/{ order_id } ' )
89112 order_body = order_response .get_json ()
90113 assert order_response .status_code == 200
91114 assert order_body ['order' ]['paid' ] is True
92115 assert order_body ['order' ]['payment_status' ] == 'finished'
93- assert order_body ['order' ]['fulfillment_status' ] == 'ready_for_manual_fulfillment'
116+ assert order_body ['order' ]['fulfillment_status' ] == 'payment_confirmed'
117+ assert order_body ['order' ]['payment_notice_status' ] == 'sent'
118+ assert order_body ['order' ]['customer_receipt_status' ] == 'sent'
94119
95120
96121
0 commit comments