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