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