pay_keysend_controller_test.go raw

   1  package controllers
   2  
   3  import (
   4  	"context"
   5  	"encoding/json"
   6  	"testing"
   7  
   8  	"github.com/getAlby/go-nostr"
   9  	"github.com/stretchr/testify/assert"
  10  	"github.com/stretchr/testify/require"
  11  
  12  	"github.com/getAlby/hub/constants"
  13  	"github.com/getAlby/hub/db"
  14  	"github.com/getAlby/hub/nip47/models"
  15  	"github.com/getAlby/hub/tests"
  16  )
  17  
  18  const nip47KeysendJson = `
  19  {
  20  	"method": "pay_keysend",
  21  	"params": {
  22  		"amount": 123000,
  23  		"pubkey": "123pubkey2",
  24  		"tlv_records": [{
  25  			"type": 5482373484,
  26  			"value": "fajsn341414fq"
  27  		}]
  28  	}
  29  }
  30  `
  31  
  32  const nip47KeysendJsonWithPreimage = `
  33  {
  34  	"method": "pay_keysend",
  35  	"params": {
  36  		"amount": 123000,
  37  		"pubkey": "123pubkey2",
  38  		"preimage": "018465013e2337234a7e5530a21c4a8cf70d84231f4a8ff0b1e2cce3cb2bd03b",
  39  		"tlv_records": [{
  40  			"type": 5482373484,
  41  			"value": "fajsn341414fq"
  42  		}]
  43  	}
  44  }
  45  `
  46  
  47  func TestHandlePayKeysendEvent(t *testing.T) {
  48  	ctx := context.TODO()
  49  	svc, err := tests.CreateTestService(t)
  50  	require.NoError(t, err)
  51  	defer svc.Remove()
  52  
  53  	app, _, err := tests.CreateApp(svc)
  54  	assert.NoError(t, err)
  55  
  56  	appPermission := &db.AppPermission{
  57  		AppId: app.ID,
  58  		App:   *app,
  59  		Scope: constants.PAY_INVOICE_SCOPE,
  60  	}
  61  	err = svc.DB.Create(appPermission).Error
  62  	assert.NoError(t, err)
  63  
  64  	nip47Request := &models.Request{}
  65  	err = json.Unmarshal([]byte(nip47KeysendJson), nip47Request)
  66  	assert.NoError(t, err)
  67  
  68  	dbRequestEvent := &db.RequestEvent{}
  69  
  70  	err = svc.DB.Create(&dbRequestEvent).Error
  71  	assert.NoError(t, err)
  72  
  73  	var publishedResponse *models.Response
  74  
  75  	publishResponse := func(response *models.Response, tags nostr.Tags) {
  76  		publishedResponse = response
  77  	}
  78  
  79  	NewTestNip47Controller(svc).
  80  		HandlePayKeysendEvent(ctx, nip47Request, dbRequestEvent.ID, app, publishResponse, nostr.Tags{})
  81  
  82  	assert.Nil(t, publishedResponse.Error)
  83  	assert.Equal(t, 64, len(publishedResponse.Result.(payResponse).Preimage))
  84  	assert.Equal(t, uint64(1), publishedResponse.Result.(payResponse).FeesPaid)
  85  }
  86  func TestHandlePayKeysendEvent_WithPreimage(t *testing.T) {
  87  	ctx := context.TODO()
  88  	svc, err := tests.CreateTestService(t)
  89  	require.NoError(t, err)
  90  	defer svc.Remove()
  91  
  92  	app, _, err := tests.CreateApp(svc)
  93  	assert.NoError(t, err)
  94  
  95  	appPermission := &db.AppPermission{
  96  		AppId: app.ID,
  97  		App:   *app,
  98  		Scope: constants.PAY_INVOICE_SCOPE,
  99  	}
 100  	err = svc.DB.Create(appPermission).Error
 101  	assert.NoError(t, err)
 102  
 103  	nip47Request := &models.Request{}
 104  	err = json.Unmarshal([]byte(nip47KeysendJsonWithPreimage), nip47Request)
 105  	assert.NoError(t, err)
 106  
 107  	dbRequestEvent := &db.RequestEvent{}
 108  
 109  	err = svc.DB.Create(&dbRequestEvent).Error
 110  	assert.NoError(t, err)
 111  
 112  	var publishedResponse *models.Response
 113  
 114  	publishResponse := func(response *models.Response, tags nostr.Tags) {
 115  		publishedResponse = response
 116  	}
 117  
 118  	NewTestNip47Controller(svc).
 119  		HandlePayKeysendEvent(ctx, nip47Request, dbRequestEvent.ID, app, publishResponse, nostr.Tags{})
 120  
 121  	assert.Nil(t, publishedResponse.Error)
 122  	assert.Equal(t, "018465013e2337234a7e5530a21c4a8cf70d84231f4a8ff0b1e2cce3cb2bd03b", publishedResponse.Result.(payResponse).Preimage)
 123  	assert.Equal(t, uint64(1), publishedResponse.Result.(payResponse).FeesPaid)
 124  }
 125