receive_keysend_test.go raw
1 package transactions
2
3 import (
4 "context"
5 "encoding/hex"
6 "encoding/json"
7 "strconv"
8 "testing"
9
10 "github.com/stretchr/testify/assert"
11 "github.com/stretchr/testify/require"
12
13 "github.com/getAlby/hub/events"
14 "github.com/getAlby/hub/lnclient"
15 "github.com/getAlby/hub/tests"
16 )
17
18 func TestReceiveKeysend_ValidBoostagram(t *testing.T) {
19 ctx := context.TODO()
20
21 svc, err := tests.CreateTestService(t)
22 require.NoError(t, err)
23 defer svc.Remove()
24
25 transactionsService := NewTransactionsService(svc.DB, svc.EventPublisher)
26
27 tlv := []lnclient.TLVRecord{
28 {
29 Type: 7629169,
30 Value: hex.EncodeToString([]byte("{\"app_name\": \"Castamatic\"}")),
31 },
32 }
33 tx := lnclient.Transaction{
34 Type: "incoming",
35 Description: "mock invoice 1",
36 Preimage: "9f59b18f80a77c2930deb8be5ff1143eacdd1891c63c23d61bc9f99c64e57325",
37 PaymentHash: "ae4277b7be3ca1420cafd24c143866190f52b996856b0e4164763f936e61ea1b",
38 AmountMsat: 1000,
39 FeesPaidMsat: 50,
40 SettledAt: &tests.MockTimeUnix,
41 Metadata: map[string]interface{}{
42 "tlv_records": tlv,
43 },
44 }
45
46 event := events.Event{
47 Event: "nwc_lnclient_payment_received",
48 Properties: &tx,
49 }
50 transactionsService.ConsumeEvent(ctx, &event, map[string]interface{}{})
51
52 transaction, err := transactionsService.LookupTransaction(ctx, tx.PaymentHash, nil, svc.LNClient, nil)
53 require.NoError(t, err)
54 var txBoostagram Boostagram
55 err = json.Unmarshal(transaction.Boostagram, &txBoostagram)
56 require.NoError(t, err)
57 assert.Equal(t, "Castamatic", txBoostagram.AppName)
58 }
59 func TestReceiveKeysend_InvalidBoostagram(t *testing.T) {
60 ctx := context.TODO()
61
62 svc, err := tests.CreateTestService(t)
63 require.NoError(t, err)
64 defer svc.Remove()
65
66 transactionsService := NewTransactionsService(svc.DB, svc.EventPublisher)
67
68 tlv := []lnclient.TLVRecord{
69 {
70 Type: 7629169,
71 Value: hex.EncodeToString([]byte("asdf")),
72 },
73 }
74 tx := lnclient.Transaction{
75 Type: "incoming",
76 Description: "mock invoice 1",
77 Preimage: "9f59b18f80a77c2930deb8be5ff1143eacdd1891c63c23d61bc9f99c64e57325",
78 PaymentHash: "ae4277b7be3ca1420cafd24c143866190f52b996856b0e4164763f936e61ea1b",
79 AmountMsat: 1000,
80 FeesPaidMsat: 50,
81 SettledAt: &tests.MockTimeUnix,
82 Metadata: map[string]interface{}{
83 "tlv_records": tlv,
84 },
85 }
86
87 event := events.Event{
88 Event: "nwc_lnclient_payment_received",
89 Properties: &tx,
90 }
91 transactionsService.ConsumeEvent(ctx, &event, map[string]interface{}{})
92
93 transaction, err := transactionsService.LookupTransaction(ctx, tx.PaymentHash, nil, svc.LNClient, nil)
94 require.NoError(t, err)
95 assert.Nil(t, transaction.Boostagram)
96 }
97
98 func TestReceiveKeysendWithCustomKey(t *testing.T) {
99 ctx := context.TODO()
100
101 svc, err := tests.CreateTestService(t)
102 require.NoError(t, err)
103 defer svc.Remove()
104
105 transactionsService := NewTransactionsService(svc.DB, svc.EventPublisher)
106 app, _, err := tests.CreateApp(svc)
107 assert.NoError(t, err)
108
109 // just to have another app in this test
110 _, _, err = tests.CreateApp(svc)
111
112 assert.NoError(t, err)
113
114 tlv := []lnclient.TLVRecord{
115 {
116 Type: 696969,
117 Value: hex.EncodeToString([]byte(strconv.FormatUint(uint64(app.ID), 10))),
118 },
119 }
120 tx := lnclient.Transaction{
121 Type: "incoming",
122 Description: "mock invoice 1",
123 Preimage: "9f59b18f80a77c2930deb8be5ff1143eacdd1891c63c23d61bc9f99c64e57325",
124 PaymentHash: "ae4277b7be3ca1420cafd24c143866190f52b996856b0e4164763f936e61ea1b",
125 AmountMsat: 1000,
126 FeesPaidMsat: 50,
127 SettledAt: &tests.MockTimeUnix,
128 Metadata: map[string]interface{}{
129 "tlv_records": tlv,
130 },
131 }
132
133 event := events.Event{
134 Event: "nwc_lnclient_payment_received",
135 Properties: &tx,
136 }
137 transactionsService.ConsumeEvent(ctx, &event, map[string]interface{}{})
138
139 transaction, err := transactionsService.LookupTransaction(ctx, tx.PaymentHash, nil, svc.LNClient, nil)
140 require.NoError(t, err)
141 assert.Equal(t, app.ID, *transaction.AppId)
142 assert.Equal(t, uint(1), app.ID)
143 }
144
145 func TestReceiveKeysend(t *testing.T) {
146 ctx := context.TODO()
147
148 svc, err := tests.CreateTestService(t)
149 require.NoError(t, err)
150 defer svc.Remove()
151
152 transactionsService := NewTransactionsService(svc.DB, svc.EventPublisher)
153 _, _, err = tests.CreateApp(svc)
154 assert.NoError(t, err)
155
156 tx := tests.MockLNClientTransaction
157 event := events.Event{
158 Event: "nwc_lnclient_payment_received",
159 Properties: tx,
160 }
161 transactionsService.ConsumeEvent(ctx, &event, map[string]interface{}{})
162
163 transaction, err := transactionsService.LookupTransaction(ctx, tx.PaymentHash, nil, svc.LNClient, nil)
164 assert.NoError(t, err)
165 assert.Nil(t, transaction.AppId)
166 }
167