lookup_invoice_controller_test.go raw
1 package controllers
2
3 import (
4 "context"
5 "encoding/json"
6 "testing"
7 "time"
8
9 "github.com/getAlby/go-nostr"
10 "github.com/stretchr/testify/assert"
11 "github.com/stretchr/testify/require"
12
13 "github.com/getAlby/hub/db"
14 "github.com/getAlby/hub/nip47/models"
15 "github.com/getAlby/hub/tests"
16 )
17
18 var nip47LookupInvoiceJson = `
19 {
20 "method": "lookup_invoice",
21 "params": {
22 "payment_hash": "` + tests.MockLNClientTransaction.PaymentHash + `"
23 }
24 }
25 `
26
27 func TestHandleLookupInvoiceEvent(t *testing.T) {
28 ctx := context.TODO()
29 svc, err := tests.CreateTestService(t)
30 require.NoError(t, err)
31 defer svc.Remove()
32
33 nip47Request := &models.Request{}
34 err = json.Unmarshal([]byte(nip47LookupInvoiceJson), nip47Request)
35 assert.NoError(t, err)
36
37 app, _, err := tests.CreateApp(svc)
38 assert.NoError(t, err)
39
40 dbRequestEvent := &db.RequestEvent{
41 AppId: &app.ID,
42 }
43 err = svc.DB.Create(&dbRequestEvent).Error
44 assert.NoError(t, err)
45
46 settledAt := time.Unix(*tests.MockLNClientTransaction.SettledAt, 0)
47 err = svc.DB.Create(&db.Transaction{
48 Type: tests.MockLNClientTransaction.Type,
49 PaymentRequest: tests.MockLNClientTransaction.Invoice,
50 Description: tests.MockLNClientTransaction.Description,
51 DescriptionHash: tests.MockLNClientTransaction.DescriptionHash,
52 Preimage: &tests.MockLNClientTransaction.Preimage,
53 PaymentHash: tests.MockLNClientTransaction.PaymentHash,
54 AmountMsat: uint64(tests.MockLNClientTransaction.AmountMsat),
55 FeeMsat: uint64(tests.MockLNClientTransaction.FeesPaidMsat),
56 SettledAt: &settledAt,
57 AppId: &app.ID,
58 }).Error
59 assert.NoError(t, err)
60
61 var publishedResponse *models.Response
62
63 publishResponse := func(response *models.Response, tags nostr.Tags) {
64 publishedResponse = response
65 }
66
67 NewTestNip47Controller(svc).
68 HandleLookupInvoiceEvent(ctx, nip47Request, dbRequestEvent.ID, *dbRequestEvent.AppId, publishResponse)
69
70 assert.Nil(t, publishedResponse.Error)
71 transaction := publishedResponse.Result.(*lookupInvoiceResponse)
72 assert.Equal(t, tests.MockLNClientTransaction.Type, transaction.Type)
73 assert.Equal(t, tests.MockLNClientTransaction.Invoice, transaction.Invoice)
74 assert.Equal(t, tests.MockLNClientTransaction.Description, transaction.Description)
75 assert.Equal(t, tests.MockLNClientTransaction.DescriptionHash, transaction.DescriptionHash)
76 assert.Equal(t, tests.MockLNClientTransaction.Preimage, transaction.Preimage)
77 assert.Equal(t, tests.MockLNClientTransaction.PaymentHash, transaction.PaymentHash)
78 assert.Equal(t, tests.MockLNClientTransaction.AmountMsat, transaction.Amount)
79 assert.Equal(t, tests.MockLNClientTransaction.FeesPaidMsat, transaction.FeesPaid)
80 assert.Equal(t, tests.MockLNClientTransaction.SettledAt, transaction.SettledAt)
81 }
82