transactions_test.go raw
1 package api
2
3 import (
4 "context"
5 "net/url"
6 "testing"
7
8 "github.com/stretchr/testify/assert"
9 "github.com/stretchr/testify/require"
10
11 "github.com/getAlby/hub/tests"
12 "github.com/getAlby/hub/tests/mocks"
13 "github.com/getAlby/hub/transactions"
14 )
15
16 func TestCreateInvoice_ToApp(t *testing.T) {
17 ctx := context.TODO()
18
19 testSvc, err := tests.CreateTestService(t)
20 require.NoError(t, err)
21 defer testSvc.Remove()
22
23 app, _, err := tests.CreateApp(testSvc)
24 require.NoError(t, err)
25
26 svc := mocks.NewMockService(t)
27 svc.On("GetLNClient").Return(testSvc.LNClient)
28 svc.On("GetTransactionsService").Return(transactions.NewTransactionsService(testSvc.DB, testSvc.EventPublisher))
29
30 theAPI := &api{
31 appsSvc: testSvc.AppsService,
32 svc: svc,
33 }
34
35 transaction, err := theAPI.CreateInvoice(ctx, 1000, "Hello world", &app.ID)
36
37 require.NoError(t, err)
38 require.NotNil(t, transaction.AppId)
39 assert.Equal(t, app.ID, *transaction.AppId)
40 }
41
42 func TestCreateInvoice_ToAppNotFound(t *testing.T) {
43 ctx := context.TODO()
44
45 testSvc, err := tests.CreateTestService(t)
46 require.NoError(t, err)
47 defer testSvc.Remove()
48
49 svc := mocks.NewMockService(t)
50 svc.On("GetLNClient").Return(testSvc.LNClient)
51
52 theAPI := &api{
53 appsSvc: testSvc.AppsService,
54 svc: svc,
55 }
56
57 missingAppId := uint(999)
58 transaction, err := theAPI.CreateInvoice(ctx, 1000, "Hello world", &missingAppId)
59
60 assert.Nil(t, transaction)
61 require.Error(t, err)
62 assert.Equal(t, "app does not exist", err.Error())
63 }
64
65 func TestParseListTransactionsFilters(t *testing.T) {
66 minAmountMsat := uint64(1000_000)
67 outgoing := "outgoing"
68
69 filters, err := ParseListTransactionsFilters(url.Values{
70 "type": {"outgoing"},
71 "minAmountSat": {"1000"},
72 "hideFailed": {"true"},
73 "search": {" coffee "},
74 })
75 require.NoError(t, err)
76 assert.Equal(t, ListTransactionsFilters{
77 Type: &outgoing,
78 MinAmountMsat: &minAmountMsat,
79 HideFailed: true,
80 SearchTerm: "coffee",
81 }, filters)
82
83 filters, err = ParseListTransactionsFilters(url.Values{})
84 require.NoError(t, err)
85 assert.Equal(t, ListTransactionsFilters{}, filters)
86
87 for _, invalidQuery := range []url.Values{
88 {"type": {"sideways"}},
89 {"minAmountSat": {"abc"}},
90 {"minAmountSat": {"-1"}},
91 {"minAmountSat": {"0"}},
92 {"minAmountSat": {"18446744073709551615"}},
93 {"hideFailed": {"maybe"}},
94 } {
95 _, err = ParseListTransactionsFilters(invalidQuery)
96 assert.Error(t, err, "query: %v", invalidQuery)
97 }
98 }
99