btcpayserver-greenfield-php/tests/LightningInternalNodeTest.php
utxo.one c4202a731c
Lightning Internal Node Updates & Tests (#74)
* Added Missing Invoice Getter Methods

* Fixed getId Method Array Key

* PreciseNumber to getAmount on invoices

* Return parseString method on getAmount()

* Updated Signature Key, Exception Condition

* Lightning Internal Node Updates & Tests

* cs-fix

* skipping all tests since they are live

* Bumped php version

* Removed Null safe returns

* removed credentials

* fix psalm

* php CurlHandle

* Removed null safe from status enum

* dotenv for testing

* protected properties

* all .env in setup

* Create Invoice within a Test, Throw if variables aren't set

* Cleaned up Setup

* cs fix

* Cleaned up isset env vars

* fixed phpunit indent
2022-10-26 23:35:00 +02:00

188 lines
7.7 KiB
PHP

<?php
declare(strict_types=1);
namespace BTCPayServer\Tests;
final class LightningInternalNodeTest extends BaseTest
{
public function setUp(): void
{
parent::setUp();
}
/** @group createLightningInvoice */
public function testItCanCreateALightningInvoiceAndReturnsLightningInvoiceObject(): void
{
$lightningClient = new \BTCPayServer\Client\LightningInternalNode($this->host, $this->apiKey);
$lightningInvoice = $lightningClient->createLightningInvoice(
'BTC',
'100000', // milisats
111111,
'Test invoice description',
);
$this->assertInstanceOf(\BTCPayServer\Result\LightningInvoice::class, $lightningInvoice);
$this->lightningInvoice = $lightningInvoice;
$this->assertIsString($lightningInvoice->getId());
$this->assertIsString($lightningInvoice->getStatus());
$this->assertIsString($lightningInvoice->getBolt11());
// If the lightning invoice is paid, assert the paid at is an int
if ($lightningInvoice->getPaidAt()) {
$this->assertIsInt($lightningInvoice->getPaidAt());
}
$this->assertIsInt($lightningInvoice->getExpiresAt());
$this->assertInstanceOf(\BTCPayServer\Util\PreciseNumber::class, $lightningInvoice->getAmount());
// If the lightning invoice is paid, assert the amount received is a PreciseNumber
if ($lightningInvoice->getAmountReceived()) {
$this->assertInstanceOf(\BTCPayServer\Util\PreciseNumber::class, $lightningInvoice->getAmountReceived());
}
}
/** @group payLightningInvoice */
public function testItReceivesLightningPaymentObjectAfterPayingLightningInvoiceWithAllGetters(): void
{
$this->markTestSkipped('Requires a new invoice on each test run');
$lightningClient = new \BTCPayServer\Client\LightningInternalNode($this->host, $this->apiKey);
$bolt11 = '';
$lightningPayment = $lightningClient->payLightningInvoice(
cryptoCode: 'BTC',
BOLT11: $bolt11,
maxFeePercent: '0.1',
maxFeeFlat: '10',
);
$this->assertInstanceOf(\BTCPayServer\Result\LightningPayment::class, $lightningPayment);
// There is a bug in Greenfield API that is returning null values on everything except total and fee amounts.
// Uncomment these lines when the bug is fixed.
// https://github.com/btcpayserver/btcpayserver/issues/4229
// $this->assertIsString($lightningPayment->getId());
// $this->assertIsString($lightningPayment->getStatus());
// $this->assertIsString($lightningPayment->getBolt11());
// $this->assertIsString($lightningPayment->getPaymentHash());
// $this->assertIsString($lightningPayment->getPreimage());
// $this->assertIsInt($lightningPayment->getCreatedAt());
$this->assertInstanceOf(\BTCPayServer\Util\PreciseNumber::class, $lightningPayment->getTotalAmount());
$this->assertInstanceOf(\BTCPayServer\Util\PreciseNumber::class, $lightningPayment->getFeeAmount());
}
/** @group connectToLightningNode */
public function testItCanConnectToALightningNodeAndReturnsLightningNodeConnectionObject(): void
{
$this->markTestSkipped('This test is skipped because I always get 503.');
$lightningClient = new \BTCPayServer\Client\LightningInternalNode($this->host, $this->apiKey);
try {
$lightningNodeConnection = $lightningClient->connectToLightningNode(
cryptoCode: 'BTC',
nodeURI: $this->nodeUri,
);
$this->assertInstanceOf(\BTCPayServer\Result\LightningNodeConnection::class, $lightningNodeConnection);
} catch (\BTCPayServer\Client\BTCPayServerException $e) {
die($e->getMessage());
}
}
/** @group getNodeInformation */
public function testItCanGetNodeInformationAndReturnsLightningNodeInformationObject(): void
{
$lightningClient = new \BTCPayServer\Client\LightningInternalNode($this->host, $this->apiKey);
$lightningNodeInformation = $lightningClient->getNodeInformation(
'BTC',
);
$this->assertInstanceOf(\BTCPayServer\Result\LightningNode::class, $lightningNodeInformation);
$this->assertIsArray($lightningNodeInformation->getNodeURIs());
$this->assertIsInt($lightningNodeInformation->getBlockHeight());
$this->assertIsString($lightningNodeInformation->getAlias());
$this->assertIsString($lightningNodeInformation->getColor());
$this->assertIsString($lightningNodeInformation->getVersion());
$this->assertIsInt($lightningNodeInformation->getPeersCount());
$this->assertIsInt($lightningNodeInformation->getPendingChannelsCount());
$this->assertIsInt($lightningNodeInformation->getActiveChannelsCount());
$this->assertIsInt($lightningNodeInformation->getInactiveChannelsCount());
}
/** @group getChannels */
public function testItCanGetChannelsAndReturnsLightningChannelListObject(): void
{
$lightningClient = new \BTCPayServer\Client\LightningInternalNode($this->host, $this->apiKey);
$lightningChannels = $lightningClient->getChannels(
'BTC',
);
$this->assertInstanceOf(\BTCPayServer\Result\LightningChannelList::class, $lightningChannels);
$this->assertIsArray($lightningChannels->all());
foreach ($lightningChannels->all() as $channel) {
$this->assertInstanceOf(\BTCPayServer\Result\LightningChannel::class, $channel);
$this->assertIsString($channel->getRemoteNode());
$this->assertIsString($channel->getChannelPoint());
$this->assertIsString($channel->getCapacity());
$this->assertIsString($channel->getLocalBalance());
$this->assertIsBool($channel->isActive());
$this->assertIsBool($channel->isPublic());
}
}
/** @group getDepositAddress */
public function testItCanGetANewDepositAddress(): void
{
$lightningClient = new \BTCPayServer\Client\LightningInternalNode($this->host, $this->apiKey);
$depositAddress = $lightningClient->getDepositAddress(
'BTC',
);
$this->assertIsString($depositAddress);
}
/** @group getLightningInvoice */
public function testItCanGetAnInvoiceAndReturnsLightningInvoiceObject(): void
{
$lightningClient = new \BTCPayServer\Client\LightningInternalNode($this->host, $this->apiKey);
$getLightningInvoice = $lightningClient->createLightningInvoice(
'BTC',
'100000', // milisats
111111,
'Test invoice description',
);
$lightningInvoice = $lightningClient->getLightningInvoice(
'BTC',
$getLightningInvoice->getId(),
);
$this->assertInstanceOf(\BTCPayServer\Result\LightningInvoice::class, $lightningInvoice);
$this->assertIsString($lightningInvoice->getId());
$this->assertIsString($lightningInvoice->getStatus());
$this->assertIsString($lightningInvoice->getBolt11());
// If the invoice get Paid at is not null, assert it's int
if ($lightningInvoice->getPaidAt() !== null) {
$this->assertIsInt($lightningInvoice->getPaidAt());
}
$this->assertIsInt($lightningInvoice->getExpiresAt());
$this->assertInstanceOf(\BTCPayServer\Util\PreciseNumber::class, $lightningInvoice->getAmount());
// If the invoice get Paid amount is not null, assert it's PreciseNumber
if ($lightningInvoice->getAmountReceived() !== null) {
$this->assertInstanceOf(\BTCPayServer\Util\PreciseNumber::class, $lightningInvoice->getAmountReceived());
}
}
}