mirror of
https://github.com/getAlby/hub.git
synced 2026-08-13 12:33:39 +02:00
113 lines
3.8 KiB
Go
113 lines
3.8 KiB
Go
package transactions
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/getAlby/hub/constants"
|
|
"github.com/getAlby/hub/db"
|
|
"github.com/getAlby/hub/tests"
|
|
)
|
|
|
|
func TestMakeInvoice_NoApp(t *testing.T) {
|
|
ctx := context.TODO()
|
|
|
|
svc, err := tests.CreateTestService(t)
|
|
require.NoError(t, err)
|
|
defer svc.Remove()
|
|
|
|
txMetadata := make(map[string]interface{})
|
|
txMetadata["randomkey"] = strings.Repeat("a", constants.INVOICE_METADATA_MAX_LENGTH-16) // json encoding adds 16 characters - {"randomkey":""}
|
|
|
|
transactionsService := NewTransactionsService(svc.DB, svc.EventPublisher)
|
|
transaction, err := transactionsService.MakeInvoice(ctx, 1000, "Hello world", "", 0, txMetadata, svc.LNClient, nil, nil, nil)
|
|
assert.NoError(t, err)
|
|
|
|
var metadata map[string]interface{}
|
|
err = json.Unmarshal(transaction.Metadata, &metadata)
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, uint64(tests.MockLNClientTransaction.AmountMsat), transaction.AmountMsat)
|
|
assert.Equal(t, constants.TRANSACTION_STATE_PENDING, transaction.State)
|
|
assert.Equal(t, tests.MockLNClientTransaction.Preimage, *transaction.Preimage)
|
|
assert.Equal(t, txMetadata["randomkey"], metadata["randomkey"])
|
|
}
|
|
|
|
func TestMakeInvoice_MetadataTooLarge(t *testing.T) {
|
|
ctx := context.TODO()
|
|
|
|
svc, err := tests.CreateTestService(t)
|
|
require.NoError(t, err)
|
|
defer svc.Remove()
|
|
|
|
metadata := make(map[string]interface{})
|
|
metadata["randomkey"] = strings.Repeat("a", constants.INVOICE_METADATA_MAX_LENGTH-15) // json encoding adds 16 characters
|
|
|
|
transactionsService := NewTransactionsService(svc.DB, svc.EventPublisher)
|
|
transaction, err := transactionsService.MakeInvoice(ctx, 1000, "Hello world", "", 0, metadata, svc.LNClient, nil, nil, nil)
|
|
|
|
assert.Error(t, err)
|
|
assert.Equal(t, fmt.Sprintf("encoded invoice metadata provided is too large. Limit: %d Received: %d", constants.INVOICE_METADATA_MAX_LENGTH, constants.INVOICE_METADATA_MAX_LENGTH+1), err.Error())
|
|
assert.Nil(t, transaction)
|
|
}
|
|
|
|
func TestMakeInvoice_AmountNotWholeSats(t *testing.T) {
|
|
ctx := context.TODO()
|
|
|
|
svc, err := tests.CreateTestService(t)
|
|
require.NoError(t, err)
|
|
defer svc.Remove()
|
|
|
|
transactionsService := NewTransactionsService(svc.DB, svc.EventPublisher)
|
|
transaction, err := transactionsService.MakeInvoice(ctx, 1234, "Hello world", "", 0, nil, svc.LNClient, nil, nil, nil)
|
|
|
|
require.Error(t, err)
|
|
assert.Equal(t, "the amount must be a whole number of satoshis", err.Error())
|
|
assert.Nil(t, transaction)
|
|
}
|
|
|
|
func TestMakeInvoice_AmountTooLow(t *testing.T) {
|
|
ctx := context.TODO()
|
|
|
|
svc, err := tests.CreateTestService(t)
|
|
require.NoError(t, err)
|
|
defer svc.Remove()
|
|
|
|
transactionsService := NewTransactionsService(svc.DB, svc.EventPublisher)
|
|
transaction, err := transactionsService.MakeInvoice(ctx, 0, "Hello world", "", 0, nil, svc.LNClient, nil, nil, nil)
|
|
|
|
require.Error(t, err)
|
|
assert.Equal(t, "the amount must be at least 1 satoshi", err.Error())
|
|
assert.Nil(t, transaction)
|
|
}
|
|
|
|
func TestMakeInvoice_App(t *testing.T) {
|
|
ctx := context.TODO()
|
|
|
|
svc, err := tests.CreateTestService(t)
|
|
require.NoError(t, err)
|
|
defer svc.Remove()
|
|
|
|
app, _, err := tests.CreateApp(svc)
|
|
assert.NoError(t, err)
|
|
|
|
dbRequestEvent := &db.RequestEvent{}
|
|
err = svc.DB.Create(&dbRequestEvent).Error
|
|
assert.NoError(t, err)
|
|
|
|
transactionsService := NewTransactionsService(svc.DB, svc.EventPublisher)
|
|
transaction, err := transactionsService.MakeInvoice(ctx, 1000, "Hello world", "", 0, nil, svc.LNClient, &app.ID, &dbRequestEvent.ID, nil)
|
|
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, uint64(tests.MockLNClientTransaction.AmountMsat), transaction.AmountMsat)
|
|
assert.Equal(t, constants.TRANSACTION_STATE_PENDING, transaction.State)
|
|
assert.Equal(t, tests.MockLNClientTransaction.Preimage, *transaction.Preimage)
|
|
assert.Equal(t, app.ID, *transaction.AppId)
|
|
assert.Equal(t, dbRequestEvent.ID, *transaction.RequestEventId)
|
|
}
|