From 4a0fb59461cfe84728847d3f2301dc9d1f9f8726 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?dni=20=E2=9A=A1?=
Date: Thu, 25 Apr 2024 11:13:08 +0200
Subject: [PATCH] chore: use prettier for all of the codebase (#2466)
* chore: use prettier for all of the codebase
we only checked `lnbits` dir before
---
.prettierignore | 4 +
Makefile | 4 +-
README.md | 9 +-
docs/devs/api.md | 4 +-
docs/devs/development.md | 21 +-
docs/devs/extensions.md | 33 +-
docs/devs/swagger.html | 57 +-
docs/devs/websockets.md | 5 +-
docs/guide/admin_ui.md | 24 +-
docs/guide/extension-install.md | 63 +-
docs/guide/faq.md | 7 +-
docs/guide/fastapi_transition.md | 28 +-
docs/guide/installation.md | 22 +-
docs/guide/wallets.md | 5 +-
docs/index.md | 18 +-
.../wallets/fixtures/json/fixtures_rest.json | 5072 ++++++++---------
tests/wallets/fixtures/json/fixtures_rpc.json | 4714 ++++++++-------
17 files changed, 5064 insertions(+), 5026 deletions(-)
diff --git a/.prettierignore b/.prettierignore
index 45869137..97a304b4 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -11,3 +11,7 @@
**/lnbits/static/vendor
**/lnbits/static/bundle.*
**/lnbits/static/css/*
+
+flake.lock
+
+.venv
diff --git a/Makefile b/Makefile
index eff6642e..7bb79ce7 100644
--- a/Makefile
+++ b/Makefile
@@ -9,7 +9,7 @@ check: mypy pyright checkblack checkruff checkprettier checkbundle
test: test-unit test-wallets test-api test-regtest
prettier:
- poetry run ./node_modules/.bin/prettier --write lnbits
+ poetry run ./node_modules/.bin/prettier --write .
pyright:
poetry run ./node_modules/.bin/pyright
@@ -27,7 +27,7 @@ checkruff:
poetry run ruff check .
checkprettier:
- poetry run ./node_modules/.bin/prettier --check lnbits
+ poetry run ./node_modules/.bin/prettier --check .
checkblack:
poetry run black --check .
diff --git a/README.md b/README.md
index e6627f20..9f72442c 100644
--- a/README.md
+++ b/README.md
@@ -1,14 +1,15 @@
-
- [![license-badge]](LICENSE) [![docs-badge]][docs]  [ ](https://t.me/lnbits) [ ](https://opensats.org)
+ [![license-badge]](LICENSE) [![docs-badge]][docs]  [ ](https://t.me/lnbits) [ ](https://opensats.org)

# The world's most powerful suite of bitcoin tools.
-## Run for yourself, for others, or as part of a stack.
+
+## Run for yourself, for others, or as part of a stack.
+
LNbits is beta, for responsible disclosure of any concerns please contact an admin in the community chat.
LNbits is a Python server that sits on top of any funding source. It can be used as:
@@ -43,7 +44,7 @@ LNbits is packaged with tools to help manage funds, such as a table of transacti
Extend YOUR LNbits to meet YOUR needs.
-All non-core features are installed as extensions, reducing your code base and making your LNbits unique to you. Extend your LNbits install in any direction, and even create and share your own extensions.
+All non-core features are installed as extensions, reducing your code base and making your LNbits unique to you. Extend your LNbits install in any direction, and even create and share your own extensions.
diff --git a/docs/devs/api.md b/docs/devs/api.md
index 946e9f1b..3a883917 100644
--- a/docs/devs/api.md
+++ b/docs/devs/api.md
@@ -5,8 +5,6 @@ title: API reference
nav_order: 3
---
-
-API reference
-=============
+# API reference
[Swagger Docs](https://legend.lnbits.com/docs)
diff --git a/docs/devs/development.md b/docs/devs/development.md
index 6d598422..b9c71f8c 100644
--- a/docs/devs/development.md
+++ b/docs/devs/development.md
@@ -5,30 +5,27 @@ nav_order: 4
has_children: true
---
-
-For developers
-==============
+# For developers
Thanks for contributing :)
-
-Run
-=====
+# Run
This starts the lnbits uvicorn server
+
```bash
poetry run lnbits
```
This starts the lnbits uvicorn with hot reloading.
+
```bash
make dev
# or
poetry run lnbits --reload
```
-Precommit hooks
-=====
+# Precommit hooks
This ensures that all commits adhere to the formatting and linting rules.
@@ -36,31 +33,35 @@ This ensures that all commits adhere to the formatting and linting rules.
make install-pre-commit-hook
```
-Tests
-=====
+# Tests
This project has unit tests that help prevent regressions. Before you can run the tests, you must install a few dependencies:
+
```bash
poetry install
npm i
```
Then to run the tests:
+
```bash
make test
```
Run formatting:
+
```bash
make format
```
Run mypy checks:
+
```bash
poetry run mypy
```
Run everything:
+
```bash
make all
```
diff --git a/docs/devs/extensions.md b/docs/devs/extensions.md
index 2476bfe1..dac8ab3e 100644
--- a/docs/devs/extensions.md
+++ b/docs/devs/extensions.md
@@ -5,11 +5,10 @@ title: Making extensions
nav_order: 2
---
-
-Extension set up
-=================
+# Extension set up
Start off by creating a fork of the [example extension](https://github.com/lnbits/example) into own GitHub repository and rename the repository to `mysuperplugin`:
+
```sh
cd [my-working-folder]
git clone https://github.com/[my-user-name]/mysuperplugin.git --depth=1 # Let's not use dashes or anything; it doesn't like those.
@@ -18,6 +17,7 @@ rm -rf .git/
find . -type f -print0 | xargs -0 sed -i 's/example/mysuperplugin/g' # Change all occurrences of 'example' to your plugin name 'mysuperplugin'.
mv templates/example templates/mysuperplugin # Rename templates folder.
```
+
- if you are on macOS and having difficulty with 'sed', consider `brew install gnu-sed` and use 'gsed', without -0 option after xargs.
1. Edit `manifest.json` and change the organisation name to your GitHub username.
@@ -30,17 +30,15 @@ mv templates/example templates/mysuperplugin # Rename templates folder.
1. ...
1. Profit!!!
-Extension structure explained
------------------------------
-* views_api.py: This is where your public API would go. It will be exposed at "$DOMAIN/$PLUGIN/$ROUTE". For example: https://lnbits.com/mysuperplugin/api/v1/tools.
-* views.py: The `/` path will show up as your plugin's home page in lnbits' UI. Other pages you can define yourself. The `templates` folder should explain itself in relation to this.
-* migrations.py: Create database tables for your plugin. They'll be created automatically when you start lnbits.
+## Extension structure explained
+
+- views_api.py: This is where your public API would go. It will be exposed at "$DOMAIN/$PLUGIN/$ROUTE". For example: https://lnbits.com/mysuperplugin/api/v1/tools.
+- views.py: The `/` path will show up as your plugin's home page in lnbits' UI. Other pages you can define yourself. The `templates` folder should explain itself in relation to this.
+- migrations.py: Create database tables for your plugin. They'll be created automatically when you start lnbits.
... This document is a work-in-progress. Send pull requests if you get stuck, so others don't.
-
-Adding new dependencies
------------------------
+## Adding new dependencies
DO NOT ADD NEW DEPENDENCIES. Try to use the dependencies that are available in `pyproject.toml`. Getting the LNbits project to accept a new dependency is time consuming and uncertain, and may result in your extension NOT being made available to others.
@@ -53,9 +51,7 @@ $ poetry add
**But we need an extra step to make sure LNbits doesn't break in production.**
Dependencies need to be added to `pyproject.toml`, then tested by running on `poetry` compatibility can be tested with `nix build .#checks.x86_64-linux.vmTest`.
-
-SQLite to PostgreSQL migration
------------------------
+## SQLite to PostgreSQL migration
LNbits currently supports SQLite and PostgreSQL databases. There is a migration script `tools/conv.py` that helps users migrate from SQLite to PostgreSQL. This script also copies all extension databases to the new backend.
@@ -64,22 +60,31 @@ LNbits currently supports SQLite and PostgreSQL databases. There is a migration
`mock_data.zip` contains a few lines of sample SQLite data and is used in automated GitHub test to see whether your migration in `conv.py` works. Run your extension and save a few lines of data into a SQLite `your_extension.sqlite3` file. Unzip `tests/data/mock_data.zip`, add `your_extension.sqlite3`, updated `database.sqlite3` and zip it again. Add the updated `mock_data.zip` to your PR.
### running migration locally
+
you will need a running postgres database
#### create lnbits user for migration database
+
```console
sudo su - postgres -c "psql -c 'CREATE ROLE lnbits LOGIN PASSWORD 'lnbits';'"
```
+
#### create migration database
+
```console
sudo su - postgres -c "psql -c 'CREATE DATABASE migration;'"
```
+
#### run the migration
+
```console
make test-migration
```
+
sudo su - postgres -c "psql -c 'CREATE ROLE lnbits LOGIN PASSWORD 'lnbits';'"
+
#### clean migration database afterwards, fails if you try again
+
```console
sudo su - postgres -c "psql -c 'DROP DATABASE IF EXISTS migration;'"
```
diff --git a/docs/devs/swagger.html b/docs/devs/swagger.html
index c787eb2b..4054fe9a 100644
--- a/docs/devs/swagger.html
+++ b/docs/devs/swagger.html
@@ -1,29 +1,32 @@
-
-
-
-
- My New API
-
-
-
-
-
+
+
+
+
+ My New API
+
+
+
+
+
+
diff --git a/docs/devs/websockets.md b/docs/devs/websockets.md
index c64d044f..cdadfeae 100644
--- a/docs/devs/websockets.md
+++ b/docs/devs/websockets.md
@@ -5,15 +5,12 @@ title: Websockets
nav_order: 2
---
-
-Websockets
-=================
+# Websockets
`websockets` are a great way to add a two way instant data channel between server and client.
LNbits has a useful in built websocket tool. With a websocket client connect to (obv change `somespecificid`) `wss://legend.lnbits.com/api/v1/ws/somespecificid` (you can use an online websocket tester). Now make a get to `https://legend.lnbits.com/api/v1/ws/somespecificid/somedata`. You can send data to that websocket by using `from lnbits.core.services import websocketUpdater` and the function `websocketUpdater("somespecificid", "somdata")`.
-
Example vue-js function for listening to the websocket:
```
diff --git a/docs/guide/admin_ui.md b/docs/guide/admin_ui.md
index d3ad458b..253d3737 100644
--- a/docs/guide/admin_ui.md
+++ b/docs/guide/admin_ui.md
@@ -4,17 +4,15 @@ title: Admin UI
nav_order: 4
---
+# Admin UI
-Admin UI
-========
The LNbits Admin UI lets you change LNbits settings via the LNbits frontend.
It is disabled by default and the first time you set the environment variable `LNBITS_ADMIN_UI=true`
the settings are initialized and saved to the database and will be used from there as long the UI is enabled.
From there on the settings from the database are used.
+# Super User
-Super User
-==========
With the Admin UI we introduced the super user, it is created with the initialisation of the Admin UI and will be shown with a success message in the server logs.
The super user has access to the server and can change settings that may crash the server and make it unresponsive via the frontend and api, like changing funding sources.
@@ -29,48 +27,52 @@ We also added a decorator for the API routes to check for super user.
There is also the possibility of posting the super user via webhook to another service when it is created. you can look it up here https://github.com/lnbits/lnbits/blob/main/lnbits/settings.py `class SaaSSettings`
+# Admin Users
-Admin Users
-===========
environment variable: `LNBITS_ADMIN_USERS`, comma-separated list of user ids
Admin Users can change settings in the admin ui as well, with the exception of funding source settings, because they require e server restart and could potentially make the server inaccessible. Also they have access to all the extension defined in `LNBITS_ADMIN_EXTENSIONS`.
+# Allowed Users
-Allowed Users
-=============
environment variable: `LNBITS_ALLOWED_USERS`, comma-separated list of user ids
By defining this users, LNbits will no longer be usable by the public, only defined users and admins can then access the LNbits frontend.
Setting this environment variable also disables account creation.
Account creation can be also disabled by setting `LNBITS_ALLOW_NEW_ACCOUNTS=false`
+# How to activate
-How to activate
-=============
```
$ sudo systemctl stop lnbits.service
$ cd ~/lnbits-legend
$ sudo nano .env
```
+
-> set: `LNBITS_ADMIN_UI=true`
Now start LNbits once in the terminal window
+
```
$ poetry run lnbits
```
+
You can now `cat` the Super User ID:
+
```
$ cat data/.super_user
123de4bfdddddbbeb48c8bc8382fe123
```
+
You can access your super user account at `/wallet?usr=super_user_id`. You just have to append it to your normal LNbits web domain.
-After that you will find the __`Admin` / `Manage Server`__ between `Wallets` and `Extensions`
+After that you will find the **`Admin` / `Manage Server`** between `Wallets` and `Extensions`
Here you can design the interface, it has TOPUP to fill wallets and you can restrict access rights to extensions only for admins or generally deactivated for everyone. You can make users admins or set up Allowed Users if you want to restrict access. And of course the classic settings of the .env file, e.g. to change the funding source wallet or set a charge fee.
Do not forget
+
```
sudo systemctl start lnbits.service
```
+
A little hint, if you set `RESET TO DEFAULTS`, then a new Super User Account will also be created. The old one is then no longer valid.
diff --git a/docs/guide/extension-install.md b/docs/guide/extension-install.md
index 8117e993..dda8e552 100644
--- a/docs/guide/extension-install.md
+++ b/docs/guide/extension-install.md
@@ -10,16 +10,16 @@ Go to `Manage Server` > `Server` > `Extensions Manifests`

-
An `Extension Manifest` is a link to a `JSON` file which contains information about various extensions that can be installed (repository of extensions).
Multiple repositories can be configured. For more information check the [Manifest File](https://github.com/lnbits/lnbits/blob/main/docs/guide/extension-install.md#manifest-file) section.
-
**LNbits** administrators should configure their instances to use repositories that they trust (like the [lnbits-extensions](https://github.com/lnbits/lnbits-extensions/) one).
+
> **Warning**
> Extensions can have bugs or malicious code, be careful what you install!!
## Install New Extension
+
Only administrator users can install or upgrade extensions.
Go to `Manage Extensions` > `Add Remove Extensions`
@@ -45,13 +45,12 @@ Select the version to be installed (usually the last one) and click `Install`. O
>
> For Explicit Release: the order of the releases is the one in the "extensions" object
-
The extension has been installed but it cannot be accessed yet. In order to activate the extension toggle it in the `Activated` state.
Go to `Manage Extensions` (as admin user or regular user). Search for the extension and enable it.
-
## Uninstall Extension
+
On the `Install` page click `Manage` for the extension you want to uninstall:

@@ -65,6 +64,7 @@ Users will no longer be able to access the extension.
> The database for the extension is not removed. If the extension is re-installed later, the data will be accessible.
## Manifest File
+
The manifest file is just a `JSON` file that lists a collection of extensions that can be installed. This file is of the form:
```json
@@ -77,30 +77,32 @@ The manifest file is just a `JSON` file that lists a collection of extensions th
There are two ways to specify installable extensions:
### Explicit Release
+
It goes under the `extensions` object and it is of the form:
+
```json
- {
- "id": "lnurlp",
- "name": "LNURL Pay Links",
- "version": 1,
- "shortDescription": "Upgrade to version 111111111",
- "icon": "receipt",
- "details": "All charge names should be 111111111. API panel must show: ",
- "archive": "https://github.com/lnbits/lnbits-extensions/raw/main/new/lnurlp/1/lnurlp.zip",
- "hash": "a22d02de6bf306a7a504cd344e032cc6d48837a1d4aeb569a55a57507bf9a43a",
- "htmlUrl": "https://github.com/lnbits/lnbits-extensions/tree/main/new/lnurlp/1",
- "infoNotification": "This is a very old version",
- "dependencies": ["other-ext-id"]
- }
+{
+ "id": "lnurlp",
+ "name": "LNURL Pay Links",
+ "version": 1,
+ "shortDescription": "Upgrade to version 111111111",
+ "icon": "receipt",
+ "details": "All charge names should be 111111111. API panel must show: ",
+ "archive": "https://github.com/lnbits/lnbits-extensions/raw/main/new/lnurlp/1/lnurlp.zip",
+ "hash": "a22d02de6bf306a7a504cd344e032cc6d48837a1d4aeb569a55a57507bf9a43a",
+ "htmlUrl": "https://github.com/lnbits/lnbits-extensions/tree/main/new/lnurlp/1",
+ "infoNotification": "This is a very old version",
+ "dependencies": ["other-ext-id"]
+}
```
Fields Detailed Description
| Field | Type | | Description |
-|----------------------|---------------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| id | string | mandatory | The ID of the extension. Must be unique for each extension. It is also used as the path in the URL. |
+| -------------------- | ------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| id | string | mandatory | The ID of the extension. Must be unique for each extension. It is also used as the path in the URL. |
| name | string | mandatory | User friendly name for the extension. It will be displayed on the installation page. |
-| version | string | mandatory | Version of this release. [Semantic versioning](https://semver.org/) is recommended. |
+| version | string | mandatory | Version of this release. [Semantic versioning](https://semver.org/) is recommended. |
| shortDescription | string | optional | A few words about the extension. It will be displayed on the installation page. |
| icon | string | optional | quasar valid icon name |
| details | string (html) | optional | Details about this particular release |
@@ -109,31 +111,30 @@ It goes under the `extensions` object and it is of the form:
| htmlUrl | string | optional | Link to the extension home page. |
| infoNotification | string | optional | Users that have this release installed will see a info message for their extension. For example if the extension support will be terminated soon. |
| criticalNotification | string | optional | Reserved for urgent notifications. The admin user will receive a message each time it visits the `Install` page. One example is if the extension has a critical bug. |
-| dependencies | list | optional | A list of extension IDs. It signals that those extensions must be installed BEFORE the this one can be installed.
+| dependencies | list | optional | A list of extension IDs. It signals that those extensions must be installed BEFORE the this one can be installed. |
This mode has the advantage of strictly specifying what releases of an extension can be installed.
### GitHub Repository
+
It goes under the `repos` object and it is of the form:
```json
{
- "id": "withdraw",
- "organisation": "lnbits",
- "repository": "withdraw-extension"
+ "id": "withdraw",
+ "organisation": "lnbits",
+ "repository": "withdraw-extension"
}
```
-| Field | Type | Description |
-|--------------|--------|-------------------------------------------------------|
-| id | string | The ID of the extension. Must be unique for each extension. It is also used as the path in the URL. |
-| organisation | string | The GitHub organisation (eg: `lnbits`) |
-| repository | string | The GitHub repository name (eg: `withdraw-extension`) |
+| Field | Type | Description |
+| ------------ | ------ | --------------------------------------------------------------------------------------------------- |
+| id | string | The ID of the extension. Must be unique for each extension. It is also used as the path in the URL. |
+| organisation | string | The GitHub organisation (eg: `lnbits`) |
+| repository | string | The GitHub repository name (eg: `withdraw-extension`) |
The admin user will see all releases from the Github repository:

-
-
diff --git a/docs/guide/faq.md b/docs/guide/faq.md
index ced5a576..8f98221f 100644
--- a/docs/guide/faq.md
+++ b/docs/guide/faq.md
@@ -4,10 +4,10 @@ title: FAQ
nav_order: 5
---
-
# FAQ - Frequently Asked Questions
## Install options
+
LNbits is not a node management software but a ⚡️LN only accounting system on top of a funding source.
Funding my LNbits wallet from my node it doesn't work.
@@ -54,6 +54,7 @@ allow-self-payment=1
## Troubleshooting
+
-
How can I use a LNbits lndhub account in other wallet apps?
Open your LNbits with the account / wallet you want to use, go to "manage extensions" and activate the LNDHUB extension .
Then open the LNDHUB extension, choose the wallet you want to use and scan the QR code you want to use: "admin" or "invoice only", depending on the security level you want for that wallet.
@@ -166,6 +166,7 @@ allow-self-payment=1
## Building hardware tools
+
LNbits has all sorts of open APIs and tools to program and connect to a lot of different devices for a gazillion of use-cases. Let us know what you did with it ! Come to the Makerbits Telegram Group if you are interested in building or if you need help with a project - we got you!
ATM - deposit and withdraw in your shop or at your meetup
@@ -216,6 +217,7 @@ allow-self-payment=1
## Use cases of LNbits
+
## Developing for LNbits
+
diff --git a/docs/guide/fastapi_transition.md b/docs/guide/fastapi_transition.md
index ef4aa7d5..f385b468 100644
--- a/docs/guide/fastapi_transition.md
+++ b/docs/guide/fastapi_transition.md
@@ -1,19 +1,23 @@
-
## Defining a route with path parameters
+
**old:**
+
```python
# with <>
@offlineshop_ext.route("/lnurl/", methods=["GET"])
```
**new:**
+
```python
# with curly braces: {}
@offlineshop_ext.get("/lnurl/{item_id}")
```
## Check if a user exists and access user object
+
**old:**
+
```python
# decorators
@check_user_exists()
@@ -24,14 +28,18 @@ async def do_routing_stuff():
**new:**
If user doesn't exist, `Depends(check_user_exists)` will raise an exception.
If user exists, `user` will be the user object
+
```python
# depends calls
@core_html_routes.get("/my_route")
async def extensions(user: User = Depends(check_user_exists)):
pass
```
+
## Returning data from API calls
+
**old:**
+
```python
return (
{
@@ -42,9 +50,11 @@ return (
HTTPStatus.OK,
)
```
+
FastAPI returns `HTTPStatus.OK` by default id no Exception is raised
**new:**
+
```python
return {
"id": wallet.wallet.id,
@@ -54,6 +64,7 @@ return {
```
To change the default HTTPStatus, add it to the path decorator
+
```python
@core_app.post("/api/v1/payments", status_code=HTTPStatus.CREATED)
async def payments():
@@ -61,7 +72,9 @@ async def payments():
```
## Raise exceptions
+
**old:**
+
```python
return (
{"message": f"Failed to connect to {domain}."},
@@ -74,6 +87,7 @@ abort(HTTPStatus.INTERNAL_SERVER_ERROR, "Could not process withdraw LNURL.")
**new:**
Raise an exception to return a status code other than the default status code.
+
```python
raise HTTPException(
status_code=HTTPStatus.BAD_REQUEST,
@@ -82,7 +96,9 @@ raise HTTPException(
```
## Extensions
+
**old:**
+
```python
from quart import Blueprint
@@ -92,6 +108,7 @@ amilk_ext: Blueprint = Blueprint(
```
**new:**
+
```python
from fastapi import APIRouter
from lnbits.jinja2_templating import Jinja2Templates
@@ -114,9 +131,12 @@ offlineshop_rndr = template_renderer([
```
## Possible optimizations
+
### Use Redis as a cache server
+
Instead of hitting the database over and over again, we can store a short lived object in [Redis](https://redis.io) for an arbitrary key.
Example:
-* Get transactions for a wallet ID
-* User data for a user id
-* Wallet data for a Admin / Invoice key
+
+- Get transactions for a wallet ID
+- User data for a user id
+- Wallet data for a Admin / Invoice key
diff --git a/docs/guide/installation.md b/docs/guide/installation.md
index 95eecb87..63ceef90 100644
--- a/docs/guide/installation.md
+++ b/docs/guide/installation.md
@@ -16,6 +16,7 @@ Mininum poetry version has is ^1.2, but it is recommended to use latest poetry.
Make sure you have Python 3.9 or 3.10 installed.
### install python on ubuntu
+
```sh
# for making sure python 3.9 is installed, skip if installed. To check your installed version: python3 --version
sudo apt update
@@ -25,6 +26,7 @@ sudo apt install python3.9 python3.9-distutils
```
### install poetry
+
```sh
curl -sSL https://install.python-poetry.org | python3 -
# Once the above poetry install is completed, use the installation path printed to terminal and replace in the following command
@@ -56,6 +58,7 @@ poetry run lnbits
# adding --debug in the start-up command above to help your troubleshooting and generate a more verbose output
# Note that you have to add the line DEBUG=true in your .env file, too.
```
+
#### Updating the server
```
@@ -97,7 +100,7 @@ nix run
Ideally you would set the environment via the `.env` file,
but you can also set the env variables or pass command line arguments:
-``` sh
+```sh
# .env variables are currently passed when running, but LNbits can be managed with the admin UI.
LNBITS_ADMIN_UI=true ./result/bin/lnbits --port 9000
@@ -108,13 +111,16 @@ SUPER_USER=be54db7f245346c8833eaa430e1e0405 LNBITS_ADMIN_UI=true ./result/bin/ln
## Option 3: Docker
use latest version from docker hub
+
```sh
docker pull lnbits/lnbits
wget https://raw.githubusercontent.com/lnbits/lnbits/main/.env.example -O .env
mkdir data
docker run --detach --publish 5000:5000 --name lnbits --volume ${PWD}/.env:/app/.env --volume ${PWD}/data/:/app/data lnbits/lnbits
```
+
build the image yourself
+
```sh
git clone https://github.com/lnbits/lnbits.git
cd lnbits
@@ -254,11 +260,10 @@ You might also need to install additional packages or perform additional setup s
Take a look at [Polar](https://lightningpolar.com/) for an excellent way of spinning up a Lightning Network dev environment.
-
-
# Additional guides
## SQLite to PostgreSQL migration
+
If you already have LNbits installed and running, on an SQLite database, we **highly** recommend you migrate to postgres if you are planning to run LNbits on scale.
There's a script included that can do the migration easy. You should have Postgres already installed and there should be a password for the user (see Postgres install guide above). Additionally, your LNbits instance should run once on postgres to implement the database schema before the migration works:
@@ -280,7 +285,6 @@ make migration
Hopefully, everything works and get migrated... Launch LNbits again and check if everything is working properly.
-
## LNbits as a systemd service
Systemd is great for taking care of your LNbits instance. It will start it on boot and restart it in case it crashes. If you want to run LNbits as a systemd service on your Debian/Ubuntu/Raspbian server, create a file at `/etc/systemd/system/lnbits.service` with the following content:
@@ -457,28 +461,36 @@ service restart nginx
```
## Using https without reverse proxy
+
The most common way of using LNbits via https is to use a reverse proxy such as Caddy, nginx, or ngriok. However, you can also run LNbits via https without additional software. This is useful for development purposes or if you want to use LNbits in your local network.
We have to create a self-signed certificate using `mkcert`. Note that this certificate is not "trusted" by most browsers but that's fine (since you know that you have created it) and encryption is always better than clear text.
#### Install mkcert
+
You can find the install instructions for `mkcert` [here](https://github.com/FiloSottile/mkcert).
Install mkcert on Ubuntu:
+
```sh
sudo apt install libnss3-tools
curl -JLO "https://dl.filippo.io/mkcert/latest?for=linux/amd64"
chmod +x mkcert-v*-linux-amd64
sudo cp mkcert-v*-linux-amd64 /usr/local/bin/mkcert
```
+
#### Create certificate
+
To create a certificate, first `cd` into your LNbits folder and execute the following command on Linux:
+
```sh
openssl req -new -newkey rsa:4096 -x509 -sha256 -days 3650 -nodes -out cert.pem -keyout key.pem
```
+
This will create two new files (`key.pem` and `cert.pem `).
Alternatively, you can use mkcert ([more info](https://kifarunix.com/how-to-create-self-signed-ssl-certificate-with-mkcert-on-ubuntu-18-04/)):
+
```sh
# add your local IP (192.x.x.x) as well if you want to use it in your local network
mkcert localhost 127.0.0.1 ::1
@@ -490,7 +502,6 @@ You can then pass the certificate files to uvicorn when you start LNbits:
poetry run uvicorn lnbits.__main__:app --host 0.0.0.0 --port 5000 --ssl-keyfile ./key.pem --ssl-certfile ./cert.pem
```
-
## LNbits running on Umbrel behind Tor
If you want to run LNbits on your Umbrel but want it to be reached through clearnet, _Uxellodunum_ made an extensive [guide](https://community.getumbrel.com/t/guide-lnbits-without-tor/604) on how to do it.
@@ -514,6 +525,7 @@ cp /.env.example .env
and change the configuration in `.env` as required.
Then create the data directory
+
```
mkdir data
```
diff --git a/docs/guide/wallets.md b/docs/guide/wallets.md
index 34bd1581..13569aae 100644
--- a/docs/guide/wallets.md
+++ b/docs/guide/wallets.md
@@ -4,15 +4,12 @@ title: Backend wallets
nav_order: 3
---
-
-Backend wallets
-===============
+# Backend wallets
LNbits can run on top of many Lightning Network funding sources with more being added regularly.
A backend wallet can be configured using the following LNbits environment variables:
-
### CoreLightning
- `LNBITS_BACKEND_WALLET_CLASS`: **CoreLightningWallet**
diff --git a/docs/index.md b/docs/index.md
index 57aeee82..a4b9dc56 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -4,21 +4,17 @@ title: User’s Guide
nav_order: 1
---
-
-LNbits, free and open-source Lightning Network wallet/accounts system
-=====================================================================
+# LNbits, free and open-source Lightning Network wallet/accounts system
LNbits is a very simple Python application that sits on top of any funding source, and can be used as:
-* Accounts system to mitigate the risk of exposing applications to your full balance, via unique API keys for each wallet
-* Extendable platform for exploring Lightning Network functionality via LNbits extension framework
-* Part of a development stack via LNbits API
-* Fallback wallet for the LNURL scheme
-* Instant wallet for LN demonstrations
+- Accounts system to mitigate the risk of exposing applications to your full balance, via unique API keys for each wallet
+- Extendable platform for exploring Lightning Network functionality via LNbits extension framework
+- Part of a development stack via LNbits API
+- Fallback wallet for the LNURL scheme
+- Instant wallet for LN demonstrations
-
-LNbits as an account system
----------------------------
+## LNbits as an account system
LNbits is packaged with tools to help manage funds, such as a table of transactions, line chart of spending,
export to csv + more to come...
diff --git a/tests/wallets/fixtures/json/fixtures_rest.json b/tests/wallets/fixtures/json/fixtures_rest.json
index d6a43338..9161dc18 100644
--- a/tests/wallets/fixtures/json/fixtures_rest.json
+++ b/tests/wallets/fixtures/json/fixtures_rest.json
@@ -1,2561 +1,2561 @@
{
- "funding_sources": {
+ "funding_sources": {
+ "corelightningrest": {
+ "wallet_class": "CoreLightningRestWallet",
+ "settings": {
+ "corelightning_rest_url": "http://127.0.0.1:8555",
+ "corelightning_rest_macaroon": "eNcRyPtEdMaCaRoOn",
+ "user_agent": "LNbits/Tests"
+ }
+ },
+ "lndrest": {
+ "wallet_class": "LndRestWallet",
+ "settings": {
+ "lnd_rest_endpoint": "http://127.0.0.1:8555",
+ "lnd_rest_macaroon": "eNcRyPtEdMaCaRoOn",
+ "lnd_rest_cert": "",
+ "user_agent": "LNbits/Tests"
+ }
+ },
+ "alby": {
+ "wallet_class": "AlbyWallet",
+ "settings": {
+ "alby_api_endpoint": "http://127.0.0.1:8555",
+ "alby_access_token": "mock-alby-access-token",
+ "user_agent": "LNbits/Tests"
+ }
+ },
+ "eclair": {
+ "wallet_class": "EclairWallet",
+ "settings": {
+ "eclair_url": "http://127.0.0.1:8555",
+ "eclair_pass": "secret",
+ "user_agent": "LNbits/Tests"
+ }
+ },
+ "lnbits": {
+ "wallet_class": "LNbitsWallet",
+ "settings": {
+ "lnbits_endpoint": "http://127.0.0.1:8555",
+ "lnbits_admin_key": "f171ba022a764e679eef950b21fb1c04",
+ "user_agent": "LNbits/Tests"
+ }
+ }
+ },
+ "functions": {
+ "status": {
+ "mocks": {
"corelightningrest": {
- "wallet_class": "CoreLightningRestWallet",
- "settings": {
- "corelightning_rest_url": "http://127.0.0.1:8555",
- "corelightning_rest_macaroon": "eNcRyPtEdMaCaRoOn",
- "user_agent": "LNbits/Tests"
- }
+ "status_endpoint": {
+ "uri": "/v1/channel/localremotebal",
+ "headers": {
+ "macaroon": "eNcRyPtEdMaCaRoOn",
+ "encodingtype": "hex",
+ "accept": "application/json",
+ "User-Agent": "LNbits/Tests"
+ },
+ "method": "GET"
+ }
},
"lndrest": {
- "wallet_class": "LndRestWallet",
- "settings": {
- "lnd_rest_endpoint": "http://127.0.0.1:8555",
- "lnd_rest_macaroon": "eNcRyPtEdMaCaRoOn",
- "lnd_rest_cert": "",
- "user_agent": "LNbits/Tests"
- }
+ "status_endpoint": {
+ "uri": "/v1/balance/channels",
+ "headers": {
+ "Grpc-Metadata-macaroon": "eNcRyPtEdMaCaRoOn",
+ "User-Agent": "LNbits/Tests"
+ },
+ "method": "GET"
+ }
},
"alby": {
- "wallet_class": "AlbyWallet",
- "settings": {
- "alby_api_endpoint": "http://127.0.0.1:8555",
- "alby_access_token": "mock-alby-access-token",
- "user_agent": "LNbits/Tests"
- }
+ "status_endpoint": {
+ "uri": "/balance",
+ "headers": {
+ "Authorization": "Bearer mock-alby-access-token",
+ "User-Agent": "LNbits/Tests"
+ },
+ "method": "GET"
+ }
},
"eclair": {
- "wallet_class": "EclairWallet",
- "settings": {
- "eclair_url": "http://127.0.0.1:8555",
- "eclair_pass": "secret",
- "user_agent": "LNbits/Tests"
- }
+ "status_endpoint": {
+ "uri": "/globalbalance",
+ "headers": {
+ "Authorization": "Basic OnNlY3JldA==",
+ "User-Agent": "LNbits/Tests"
+ },
+ "method": "POST"
+ }
},
"lnbits": {
- "wallet_class": "LNbitsWallet",
- "settings": {
- "lnbits_endpoint": "http://127.0.0.1:8555",
- "lnbits_admin_key": "f171ba022a764e679eef950b21fb1c04",
- "user_agent": "LNbits/Tests"
+ "status_endpoint": {
+ "uri": "/api/v1/wallet",
+ "headers": {
+ "X-Api-Key": "f171ba022a764e679eef950b21fb1c04",
+ "User-Agent": "LNbits/Tests"
+ },
+ "method": "GET"
+ }
+ }
+ },
+ "tests": [
+ {
+ "description": "success",
+ "call_params": {},
+ "expect": {
+ "error_message": null,
+ "balance_msat": 55000
+ },
+ "mocks": {
+ "corelightningrest": {
+ "status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {
+ "localBalance": 55
+ }
+ }
+ ]
+ },
+ "lndrest": {
+ "status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {
+ "balance": 55
+ }
+ }
+ ]
+ },
+ "alby": {
+ "status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {
+ "balance": 55,
+ "unit": "sat"
+ }
+ }
+ ]
+ },
+ "eclair": {
+ "status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {
+ "total": 0.00000055
+ }
+ }
+ ]
+ },
+ "lnbits": {
+ "status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {
+ "balance": 55000
+ }
+ }
+ ]
}
+ }
+ },
+ {
+ "description": "error",
+ "call_params": {},
+ "expect": {
+ "error_message": "Server error: '\"test-error\"'",
+ "balance_msat": 0
+ },
+ "mocks": {
+ "corelightningrest": {
+ "status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {
+ "error": "\"test-error\""
+ }
+ }
+ ]
+ },
+ "lndrest": {
+ "status_endpoint": [
+ {
+ "response_type": "json",
+ "response": "test-error"
+ }
+ ]
+ },
+ "alby": {
+ "status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {
+ "message": "\"test-error\"",
+ "unit": "sats"
+ }
+ }
+ ]
+ },
+ "eclair": {
+ "status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {
+ "error": "\"test-error\""
+ }
+ }
+ ]
+ },
+ "lnbits": {
+ "status_endpoint": [
+ {
+ "response_type": "json",
+ "response": "test-error"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "missing data",
+ "call_params": {},
+ "expect": {
+ "error_message": "no data",
+ "balance_msat": 0
+ },
+ "mocks": {
+ "corelightningrest": {
+ "status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {}
+ }
+ ]
+ },
+ "lndrest": {
+ "status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {}
+ }
+ ]
+ },
+ "alby": {
+ "status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {}
+ }
+ ]
+ },
+ "eclair": {
+ "status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {}
+ }
+ ]
+ },
+ "lnbits": {
+ "status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {}
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "bad json",
+ "call_params": {},
+ "expect": {
+ "error_message": "Server error: 'invalid json response'",
+ "balance_msat": 0
+ },
+ "mocks": {
+ "corelightningrest": {
+ "status_endpoint": [
+ {
+ "response_type": "data",
+ "response": "data-not-json"
+ }
+ ]
+ },
+ "lndrest": {
+ "status_endpoint": [
+ {
+ "response_type": "data",
+ "response": "data-not-json"
+ }
+ ]
+ },
+ "alby": {
+ "status_endpoint": [
+ {
+ "response_type": "data",
+ "response": "data-not-json"
+ }
+ ]
+ },
+ "eclair": {
+ "status_endpoint": [
+ {
+ "response_type": "data",
+ "response": "data-not-json"
+ }
+ ]
+ },
+ "lnbits": {
+ "status_endpoint": [
+ {
+ "response_type": "data",
+ "response": "data-not-json"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "http 404",
+ "call_params": {},
+ "expect": {
+ "error_message": "Unable to connect to http://127.0.0.1:8555.",
+ "balance_msat": 0
+ },
+ "mocks": {
+ "corelightningrest": {
+ "status_endpoint": [
+ {
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ]
+ },
+ "lndrest": {
+ "status_endpoint": [
+ {
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ]
+ },
+ "alby": {
+ "status_endpoint": [
+ {
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ]
+ },
+ "eclair": {
+ "status_endpoint": [
+ {
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ]
+ },
+ "lnbits": {
+ "status_endpoint": [
+ {
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "no mocks",
+ "call_params": {},
+ "expect": {
+ "error_message": "Unable to connect to http://127.0.0.1:8555.",
+ "balance_msat": 0
+ }
}
+ ]
},
- "functions": {
- "status": {
- "mocks": {
- "corelightningrest": {
- "status_endpoint": {
- "uri": "/v1/channel/localremotebal",
- "headers": {
- "macaroon": "eNcRyPtEdMaCaRoOn",
- "encodingtype": "hex",
- "accept": "application/json",
- "User-Agent": "LNbits/Tests"
- },
- "method": "GET"
- }
- },
- "lndrest": {
- "status_endpoint": {
- "uri": "/v1/balance/channels",
- "headers": {
- "Grpc-Metadata-macaroon": "eNcRyPtEdMaCaRoOn",
- "User-Agent": "LNbits/Tests"
- },
- "method": "GET"
- }
- },
- "alby": {
- "status_endpoint": {
- "uri": "/balance",
- "headers": {
- "Authorization": "Bearer mock-alby-access-token",
- "User-Agent": "LNbits/Tests"
- },
- "method": "GET"
- }
- },
- "eclair": {
- "status_endpoint": {
- "uri": "/globalbalance",
- "headers": {
- "Authorization": "Basic OnNlY3JldA==",
- "User-Agent": "LNbits/Tests"
- },
- "method": "POST"
- }
- },
- "lnbits": {
- "status_endpoint": {
- "uri": "/api/v1/wallet",
- "headers": {
- "X-Api-Key": "f171ba022a764e679eef950b21fb1c04",
- "User-Agent": "LNbits/Tests"
- },
- "method": "GET"
- }
- }
+ "create_invoice": {
+ "mocks": {
+ "corelightningrest": {
+ "create_invoice_endpoint": {
+ "uri": "/v1/invoice/genInvoice",
+ "headers": {
+ "macaroon": "eNcRyPtEdMaCaRoOn",
+ "encodingtype": "hex",
+ "accept": "application/json",
+ "User-Agent": "LNbits/Tests"
},
- "tests": [
- {
- "description": "success",
- "call_params": {},
- "expect": {
- "error_message": null,
- "balance_msat": 55000
- },
- "mocks": {
- "corelightningrest": {
- "status_endpoint": [
- {
- "response_type": "json",
- "response": {
- "localBalance": 55
- }
- }
- ]
- },
- "lndrest": {
- "status_endpoint": [
- {
- "response_type": "json",
- "response": {
- "balance": 55
- }
- }
- ]
- },
- "alby": {
- "status_endpoint": [
- {
- "response_type": "json",
- "response": {
- "balance": 55,
- "unit": "sat"
- }
- }
- ]
- },
- "eclair": {
- "status_endpoint": [
- {
- "response_type": "json",
- "response": {
- "total": 0.00000055
- }
- }
- ]
- },
- "lnbits": {
- "status_endpoint": [
- {
- "response_type": "json",
- "response": {
- "balance": 55000
- }
- }
- ]
- }
- }
- },
- {
- "description": "error",
- "call_params": {},
- "expect": {
- "error_message": "Server error: '\"test-error\"'",
- "balance_msat": 0
- },
- "mocks": {
- "corelightningrest": {
- "status_endpoint": [
- {
- "response_type": "json",
- "response": {
- "error": "\"test-error\""
- }
- }
- ]
- },
- "lndrest": {
- "status_endpoint": [
- {
- "response_type": "json",
- "response": "test-error"
- }
- ]
- },
- "alby": {
- "status_endpoint": [
- {
- "response_type": "json",
- "response": {
- "message": "\"test-error\"",
- "unit": "sats"
- }
- }
- ]
- },
- "eclair": {
- "status_endpoint": [
- {
- "response_type": "json",
- "response": {
- "error": "\"test-error\""
- }
- }
- ]
- },
- "lnbits": {
- "status_endpoint": [
- {
- "response_type": "json",
- "response": "test-error"
- }
- ]
- }
- }
- },
- {
- "description": "missing data",
- "call_params": {},
- "expect": {
- "error_message": "no data",
- "balance_msat": 0
- },
- "mocks": {
- "corelightningrest": {
- "status_endpoint": [
- {
- "response_type": "json",
- "response": {}
- }
- ]
- },
- "lndrest": {
- "status_endpoint": [
- {
- "response_type": "json",
- "response": {}
- }
- ]
- },
- "alby": {
- "status_endpoint": [
- {
- "response_type": "json",
- "response": {}
- }
- ]
- },
- "eclair": {
- "status_endpoint": [
- {
- "response_type": "json",
- "response": {}
- }
- ]
- },
- "lnbits": {
- "status_endpoint": [
- {
- "response_type": "json",
- "response": {}
- }
- ]
- }
- }
- },
- {
- "description": "bad json",
- "call_params": {},
- "expect": {
- "error_message": "Server error: 'invalid json response'",
- "balance_msat": 0
- },
- "mocks": {
- "corelightningrest": {
- "status_endpoint": [
- {
- "response_type": "data",
- "response": "data-not-json"
- }
- ]
- },
- "lndrest": {
- "status_endpoint": [
- {
- "response_type": "data",
- "response": "data-not-json"
- }
- ]
- },
- "alby": {
- "status_endpoint": [
- {
- "response_type": "data",
- "response": "data-not-json"
- }
- ]
- },
- "eclair": {
- "status_endpoint": [
- {
- "response_type": "data",
- "response": "data-not-json"
- }
- ]
- },
- "lnbits": {
- "status_endpoint": [
- {
- "response_type": "data",
- "response": "data-not-json"
- }
- ]
- }
- }
- },
- {
- "description": "http 404",
- "call_params": {},
- "expect": {
- "error_message": "Unable to connect to http://127.0.0.1:8555.",
- "balance_msat": 0
- },
- "mocks": {
- "corelightningrest": {
- "status_endpoint": [
- {
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ]
- },
- "lndrest": {
- "status_endpoint": [
- {
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ]
- },
- "alby": {
- "status_endpoint": [
- {
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ]
- },
- "eclair": {
- "status_endpoint": [
- {
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ]
- },
- "lnbits": {
- "status_endpoint": [
- {
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ]
- }
- }
- },
- {
- "description": "no mocks",
- "call_params": {},
- "expect": {
- "error_message": "Unable to connect to http://127.0.0.1:8555.",
- "balance_msat": 0
- }
- }
- ]
+ "method": "POST"
+ }
},
- "create_invoice": {
- "mocks": {
- "corelightningrest": {
- "create_invoice_endpoint": {
- "uri": "/v1/invoice/genInvoice",
- "headers": {
- "macaroon": "eNcRyPtEdMaCaRoOn",
- "encodingtype": "hex",
- "accept": "application/json",
- "User-Agent": "LNbits/Tests"
- },
- "method": "POST"
- }
- },
- "lndrest": {
- "create_invoice_endpoint": {
- "uri": "/v1/invoices",
- "headers": {
- "Grpc-Metadata-macaroon": "eNcRyPtEdMaCaRoOn",
- "User-Agent": "LNbits/Tests"
- },
- "method": "POST"
- }
- },
- "alby": {
- "create_invoice_endpoint": {
- "uri": "/invoices",
- "headers": {
- "Authorization": "Bearer mock-alby-access-token",
- "User-Agent": "LNbits/Tests"
- },
- "method": "POST"
- }
- },
- "eclair": {
- "create_invoice_endpoint": {
- "uri": "/createinvoice",
- "headers": {
- "Authorization": "Basic OnNlY3JldA==",
- "User-Agent": "LNbits/Tests"
- },
- "method": "POST"
- }
- },
- "lnbits": {
- "create_invoice_endpoint": {
- "uri": "/api/v1/payments",
- "headers": {
- "X-Api-Key": "f171ba022a764e679eef950b21fb1c04",
- "User-Agent": "LNbits/Tests"
- },
- "method": "POST"
- }
- }
+ "lndrest": {
+ "create_invoice_endpoint": {
+ "uri": "/v1/invoices",
+ "headers": {
+ "Grpc-Metadata-macaroon": "eNcRyPtEdMaCaRoOn",
+ "User-Agent": "LNbits/Tests"
},
- "tests": [
- {
- "description": "success",
- "call_params": {
- "amount": 555,
- "memo": "Test Invoice",
- "label": "test-label"
- },
- "expect": {
- "error_message": null,
- "success": true,
- "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "payment_request": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
- },
- "mocks": {
- "corelightningrest": {
- "create_invoice_endpoint": [
- {
- "request_type": "data",
- "request_body": {
- "amount": 555000,
- "description": "Test Invoice",
- "label": "test-label"
- },
- "response_type": "json",
- "response": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "bolt11": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
- }
- }
- ]
- },
- "lndrest": {
- "create_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "value": 555,
- "memo": "Test Invoice",
- "private": true
- },
- "response_type": "json",
- "response": {
- "r_hash": "41UmpD0E6YVZTA36uEiBT1JLHHhlmOyaY77dstcmrJY=",
- "payment_request": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
- }
- }
- ]
- },
- "alby": {
- "create_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "value": 555,
- "memo": "Test Invoice"
- },
- "response_type": "json",
- "response": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "payment_request": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
- }
- }
- ]
- },
- "eclair": {
- "create_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "amountMsat": 555000
- },
- "response_type": "json",
- "response": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "serialized": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
- }
- }
- ]
- },
- "lnbits": {
- "create_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "out": false,
- "amount": 555000,
- "memo": "Test Invoice"
- },
- "response_type": "json",
- "response": {
- "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "payment_request": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
- }
- }
- ]
- }
- }
- },
- {
- "description": "error",
- "call_params": {
- "amount": 555,
- "memo": "Test Invoice",
- "label": "test-label"
- },
- "expect": {
- "error_message": "Server error: 'Test Error'",
- "success": false,
- "checking_id": null,
- "payment_request": null
- },
- "mocks": {
- "corelightningrest": {
- "create_invoice_endpoint": [
- {
- "request_type": "data",
- "request_body": {
- "amount": 555000,
- "description": "Test Invoice",
- "label": "test-label"
- },
- "response_type": "json",
- "response": {
- "error": "Test Error"
- }
- }
- ]
- },
- "lndrest": {
- "create_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "value": 555,
- "memo": "Test Invoice",
- "private": true
- },
- "response_type": "json",
- "response": {
- "error": "Test Error"
- }
- }
- ]
- },
- "alby": {
- "create_invoice_endpoint": []
- },
- "eclair": {
- "create_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "amountMsat": 555000
- },
- "response_type": "json",
- "response": {
- "error": "Test Error"
- }
- }
- ]
- },
- "lnbits": {
- "create_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "out": false,
- "amount": 555000,
- "memo": "Test Invoice"
- },
- "response_type": "json",
- "response": {
- "detail": "Test Error"
- }
- }
- ]
- }
- }
- },
- {
- "description": "missing data",
- "call_params": {
- "amount": 555,
- "memo": "Test Invoice",
- "label": "test-label"
- },
- "expect": {
- "error_message": "Server error: 'missing required fields'",
- "success": false,
- "checking_id": null,
- "payment_request": null
- },
- "mocks": {
- "corelightningrest": {
- "create_invoice_endpoint": [
- {
- "request_type": "data",
- "request_body": {
- "amount": 555000,
- "description": "Test Invoice",
- "label": "test-label"
- },
- "response_type": "json",
- "response": {
- "some_field": "but the required fields are mising"
- }
- }
- ]
- },
- "lndrest": {
- "create_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "value": 555,
- "memo": "Test Invoice",
- "private": true
- },
- "response_type": "json",
- "response": {
- "some_field": "but the required fields are mising"
- }
- }
- ]
- },
- "alby": {
- "create_invoice_endpoint": [
- {
- "description": "missing payment request",
- "request_type": "json",
- "request_body": {
- "value": 555,
- "memo": "Test Invoice"
- },
- "response_type": "json",
- "response": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- }
- ]
- },
- "eclair": {
- "create_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "amountMsat": 555000
- },
- "response_type": "json",
- "response": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- }
- ]
- },
- "lnbits": {
- "create_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "out": false,
- "amount": 555000,
- "memo": "Test Invoice"
- },
- "response_type": "json",
- "response": {
- "payment_request": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
- }
- }
- ]
- }
- }
- },
- {
- "description": "bad json",
- "call_params": {
- "amount": 555,
- "memo": "Test Invoice",
- "label": "test-label"
- },
- "expect": {
- "success": false,
- "checking_id": null,
- "payment_request": null,
- "error_message": "Server error: 'invalid json response'"
- },
- "mocks": {
- "corelightningrest": {
- "create_invoice_endpoint": [
- {
- "request_type": "data",
- "request_body": {
- "amount": 555000,
- "description": "Test Invoice",
- "label": "test-label"
- },
- "response_type": "data",
- "response": "data-not-json"
- }
- ]
- },
- "lndrest": {
- "create_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "value": 555,
- "memo": "Test Invoice",
- "private": true
- },
- "response_type": "data",
- "response": "data-not-json"
- }
- ]
- },
- "alby": {
- "create_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "value": 555,
- "memo": "Test Invoice"
- },
- "response_type": "data",
- "response": "data-not-json"
- }
- ]
- },
- "eclair": {
- "create_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "amountMsat": 555000
- },
- "response_type": "data",
- "response": "data-not-json"
- }
- ]
- },
- "lnbits": {
- "create_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "out": false,
- "amount": 555000,
- "memo": "Test Invoice"
- },
- "response_type": "data",
- "response": "data-not-json"
- }
- ]
- }
- }
- },
- {
- "description": "http 404",
- "call_params": {
- "amount": 555,
- "memo": "Test Invoice",
- "label": "test-label"
- },
- "expect": {
- "success": false,
- "checking_id": null,
- "payment_request": null,
- "error_message": "Unable to connect to http://127.0.0.1:8555."
- },
- "mocks": {
- "corelightningrest": {
- "create_invoice_endpoint": [
- {
- "request_type": "data",
- "request_body": {
- "amount": 555000,
- "description": "Test Invoice",
- "label": "test-label"
- },
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ]
- },
- "lndrest": {
- "create_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "value": 555,
- "memo": "Test Invoice",
- "private": true
- },
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ]
- },
- "alby": {
- "create_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "value": 555,
- "memo": "Test Invoice"
- },
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ]
- },
- "eclair": {
- "create_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "amountMsat": 555000
- },
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ]
- },
- "lnbits": {
- "create_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "out": false,
- "amount": 555000,
- "memo": "Test Invoice"
- },
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ]
- }
- }
- },
- {
- "description": "no mocks",
- "call_params": {
- "amount": 555,
- "memo": "Test Invoice",
- "label": "test-label"
- },
- "expect": {
- "success": false,
- "checking_id": null,
- "payment_request": null,
- "error_message": "Unable to connect to http://127.0.0.1:8555."
- }
- }
- ]
+ "method": "POST"
+ }
},
- "pay_invoice": {
- "mocks": {
- "corelightningrest": {
- "pay_invoice_endpoint": {
- "uri": "/v1/pay",
- "headers": {
- "macaroon": "eNcRyPtEdMaCaRoOn",
- "encodingtype": "hex",
- "accept": "application/json",
- "User-Agent": "LNbits/Tests"
- },
- "method": "POST"
- }
- },
- "lndrest": {
- "pay_invoice_endpoint": {
- "uri": "/v1/channels/transactions",
- "headers": {
- "Grpc-Metadata-macaroon": "eNcRyPtEdMaCaRoOn",
- "User-Agent": "LNbits/Tests"
- },
- "method": "POST"
- }
- },
- "alby": {
- "pay_invoice_endpoint": {
- "uri": "/payments/bolt11",
- "headers": {
- "Authorization": "Bearer mock-alby-access-token",
- "User-Agent": "LNbits/Tests"
- },
- "method": "POST"
- }
- },
- "eclair": {
- "pay_invoice_endpoint": {
- "uri": "/payinvoice",
- "headers": {
- "Authorization": "Basic OnNlY3JldA==",
- "User-Agent": "LNbits/Tests"
- },
- "method": "POST"
- },
- "get_payment_status_endpoint": {
- "uri": "/getsentinfo",
- "headers": {
- "Authorization": "Basic OnNlY3JldA==",
- "User-Agent": "LNbits/Tests"
- },
- "method": "POST"
- }
- },
- "lnbits": {
- "pay_invoice_endpoint": {
- "uri": "/api/v1/payments",
- "headers": {
- "X-Api-Key": "f171ba022a764e679eef950b21fb1c04",
- "User-Agent": "LNbits/Tests"
- },
- "method": "POST"
- },
- "get_payment_status_endpoint": {
- "uri": "/api/v1/payments/e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "headers": {
- "X-Api-Key": "f171ba022a764e679eef950b21fb1c04",
- "User-Agent": "LNbits/Tests"
- },
- "method": "GET"
- }
- }
+ "alby": {
+ "create_invoice_endpoint": {
+ "uri": "/invoices",
+ "headers": {
+ "Authorization": "Bearer mock-alby-access-token",
+ "User-Agent": "LNbits/Tests"
},
- "tests": [
- {
- "description": "success",
- "call_params": {
- "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "fee_limit_msat": 25000
- },
- "expect": {
- "error_message": null,
- "success": true,
- "pending": false,
- "failed": false,
- "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "fee_msat": 50,
- "preimage": "0000000000000000000000000000000000000000000000000000000000000000"
- },
- "mocks": {
- "corelightningrest": {
- "pay_invoice_endpoint": [
- {
- "request_type": "data",
- "request_body": {
- "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "maxfeepercent": "119.04761905",
- "exemptfee": 0
- },
- "response_type": "json",
- "response": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "payment_preimage": "0000000000000000000000000000000000000000000000000000000000000000",
- "msatoshi": 21000,
- "msatoshi_sent": 21050,
- "status": "paid"
- }
- }
- ]
- },
- "lndrest": {
- "pay_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "payment_request": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "fee_limit": 25000
- },
- "response_type": "json",
- "response": {
- "payment_hash": "41UmpD0E6YVZTA36uEiBT1JLHHhlmOyaY77dstcmrJY=",
- "payment_route": {
- "total_fees_msat": 50
- },
- "payment_preimage": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
- }
- }
- ]
- },
- "alby": {
- "pay_invoice_endpoint": [
- {
- "skip": true,
- "request_type": "json",
- "request_body": {
- "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
- },
- "response_type": "json",
- "response": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "fee": 50,
- "payment_preimage": "0000000000000000000000000000000000000000000000000000000000000000"
- }
- }
- ]
- },
- "eclair": {
- "pay_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "blocking": true,
- "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
- },
- "response_type": "json",
- "response": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "paymentPreimage": "0000000000000000000000000000000000000000000000000000000000000000",
- "type": "mock"
- }
- }
- ],
- "get_payment_status_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "response_type": "json",
- "response": [
- {
- "status": {
- "type": "sent",
- "feesPaid": -50,
- "paymentPreimage": "0000000000000000000000000000000000000000000000000000000000000000"
- }
- }
- ]
- }
- ]
- },
- "lnbits": {
- "pay_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "out": true,
- "blt11": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
- },
- "response_type": "json",
- "response": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- }
- ],
- "get_payment_status_endpoint": [
- {
- "response_type": "json",
- "response": {
- "paid": true,
- "preimage": "0000000000000000000000000000000000000000000000000000000000000000",
- "details": {
- "fee": 50
- }
- }
- }
- ]
- }
- }
- },
- {
- "description": "pending, no fee",
- "call_params": {
- "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "fee_limit_msat": 25000
- },
- "expect": {
- "success": false,
- "pending": true,
- "failed": false,
- "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "fee_msat": null,
- "preimage": "0000000000000000000000000000000000000000000000000000000000000000"
- },
- "mocks": {
- "corelightningrest": {},
- "lndrest": {},
- "alby": {},
- "eclair": [
- {
- "pay_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "blocking": true,
- "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
- },
- "response_type": "json",
- "response": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "paymentPreimage": "0000000000000000000000000000000000000000000000000000000000000000",
- "type": "mock"
- }
- }
- ],
- "get_payment_status_endpoint": [
- {
- "description": "get paid invoice: error",
- "request_type": "json",
- "request_body": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "response_type": "json",
- "response": {
- "error": "Test Error"
- }
- }
- ]
- },
- {
- "pay_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "blocking": true,
- "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
- },
- "response_type": "json",
- "response": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "paymentPreimage": "0000000000000000000000000000000000000000000000000000000000000000",
- "type": "mock"
- }
- }
- ],
- "get_payment_status_endpoint": [
- {
- "description": "get paid invoice: no data",
- "request_type": "json",
- "request_body": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "response_type": "json",
- "response": {}
- }
- ]
- },
- {
- "pay_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "blocking": true,
- "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
- },
- "response_type": "json",
- "response": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "paymentPreimage": "0000000000000000000000000000000000000000000000000000000000000000",
- "type": "mock"
- }
- }
- ],
- "get_payment_status_endpoint": [
- {
- "description": "get paid invoice: bad json",
- "request_type": "json",
- "request_body": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "response_type": "data",
- "response": "data-not-json"
- }
- ]
- },
- {
- "pay_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "blocking": true,
- "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
- },
- "response_type": "json",
- "response": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "paymentPreimage": "0000000000000000000000000000000000000000000000000000000000000000",
- "type": "mock"
- }
- }
- ],
- "get_payment_status_endpoint": [
- {
- "description": "get paid invoice: pending status",
- "request_type": "json",
- "request_body": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "response_type": "json",
- "response": [
- {
- "status": {
- "type": "pending"
- }
- }
- ]
- }
- ]
- }
- ],
- "lnbits": []
- }
- },
- {
- "description": "error",
- "call_params": {
- "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "fee_limit_msat": 25000
- },
- "expect": {
- "success": false,
- "pending": false,
- "failed": true,
- "checking_id": null,
- "fee_msat": null,
- "preimage": null,
- "error_message": "Test Error"
- },
- "mocks": {
- "corelightningrest": {
- "pay_invoice_endpoint": [
- {
- "request_type": "data",
- "request_body": {
- "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "maxfeepercent": "119.04761905",
- "exemptfee": 0
- },
- "response_type": "json",
- "response": {
- "error": "Test Error"
- }
- }
- ]
- },
- "lndrest": {
- "pay_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "payment_request": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "fee_limit": 25000
- },
- "response_type": "json",
- "response": {
- "payment_error": "Test Error"
- }
- }
- ]
- },
- "alby": {
- "pay_invoice_endpoint": []
- },
- "eclair": {
- "pay_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "blocking": true,
- "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
- },
- "response_type": "json",
- "response": {
- "error": "Test Error"
- }
- }
- ],
- "get_payment_status_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "response_type": "json",
- "response": []
- }
- ]
- },
- "lnbits": {
- "pay_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "out": true,
- "blt11": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
- },
- "response_type": "json",
- "response": {
- "detail": "Test Error"
- }
- }
- ],
- "get_payment_status_endpoint": [
- {
- "response_type": "json",
- "response": {
- "paid": true,
- "preimage": "0000000000000000000000000000000000000000000000000000000000000000",
- "details": {
- "fee": 50
- }
- }
- }
- ]
- }
- }
- },
- {
- "description": "missing data",
- "call_params": {
- "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "fee_limit_msat": 25000
- },
- "expect": {
- "error_message": "Server error: 'missing required fields'",
- "success": false,
- "pending": false,
- "failed": true,
- "checking_id": null,
- "fee_msat": null,
- "preimage": null
- },
- "mocks": {
- "corelightningrest": {
- "pay_invoice_endpoint": [
- {
- "request_type": "data",
- "request_body": {
- "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "maxfeepercent": "119.04761905",
- "exemptfee": 0
- },
- "response_type": "json",
- "response": {}
- }
- ]
- },
- "lndrest": {
- "pay_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "payment_request": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "fee_limit": 25000
- },
- "response_type": "json",
- "response": {}
- }
- ]
- },
- "alby": {
- "pay_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
- },
- "response_type": "json",
- "response": {}
- }
- ]
- },
- "eclair": {
- "pay_invoice_endpoint": [
- {
- "description": "no data from pay invoice",
- "request_type": "json",
- "request_body": {
- "blocking": true,
- "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
- },
- "response_type": "json",
- "response": {}
- }
- ],
- "get_payment_status_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "response_type": "json",
- "response": []
- }
- ]
- },
- "lnbits": {}
- }
- },
- {
- "description": "bad json",
- "call_params": {
- "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "fee_limit_msat": 25000
- },
- "expect": {
- "error_message": "Server error: 'invalid json response'",
- "success": false,
- "pending": false,
- "failed": true,
- "checking_id": null,
- "fee_msat": null,
- "preimage": null
- },
- "mocks": {
- "corelightningrest": {
- "pay_invoice_endpoint": [
- {
- "request_type": "data",
- "request_body": {
- "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "maxfeepercent": "119.04761905",
- "exemptfee": 0
- },
- "response_type": "data",
- "response": "data-not-json"
- }
- ]
- },
- "lndrest": {
- "pay_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "payment_request": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "fee_limit": 25000
- },
- "response_type": "data",
- "response": "data-not-json"
- }
- ]
- },
- "alby": {
- "pay_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
- },
- "response_type": "data",
- "response": "data-not-json"
- }
- ]
- },
- "eclair": {
- "pay_invoice_endpoint": [
- {
- "description": "no data from pay invoice",
- "request_type": "json",
- "request_body": {
- "blocking": true,
- "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
- },
- "response_type": "data",
- "response": "data-not-json"
- }
- ],
- "get_payment_status_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "response_type": "json",
- "response": []
- }
- ]
- },
- "lnbits": {
- "pay_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "out": true,
- "blt11": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
- },
- "response_type": "data",
- "response": "data-not-json"
- }
- ],
- "get_payment_status_endpoint": [
- {
- "response_type": "json",
- "response": {
- "paid": true,
- "preimage": "0000000000000000000000000000000000000000000000000000000000000000",
- "details": {
- "fee": 50
- }
- }
- }
- ]
- }
- }
- },
- {
- "description": "http 404",
- "call_params": {
- "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "fee_limit_msat": 25000
- },
- "expect": {
- "error_message": "Unable to connect to http://127.0.0.1:8555.",
- "success": false,
- "pending": false,
- "failed": true,
- "checking_id": null,
- "fee_msat": null,
- "preimage": null
- },
- "mocks": {
- "corelightningrest": {
- "pay_invoice_endpoint": [
- {
- "request_type": "data",
- "request_body": {
- "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "maxfeepercent": "119.04761905",
- "exemptfee": 0
- },
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ]
- },
- "lndrest": {
- "pay_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "payment_request": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "fee_limit": 25000
- },
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ]
- },
- "alby": {
- "pay_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
- },
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ]
- },
- "eclair": {
- "pay_invoice_endpoint": [
- {
- "description": "no data from pay invoice",
- "request_type": "json",
- "request_body": {
- "blocking": true,
- "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
- },
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ],
- "get_payment_status_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "response_type": "json",
- "response": []
- }
- ]
- },
- "lnbits": {
- "pay_invoice_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "out": true,
- "blt11": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
- },
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ],
- "get_payment_status_endpoint": [
- {
- "response_type": "json",
- "response": {}
- }
- ]
- }
- }
- },
- {
- "description": "no mocks",
- "call_params": {
- "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "fee_limit_msat": 25000
- },
- "expect": {
- "error_message": "Unable to connect to http://127.0.0.1:8555.",
- "success": false,
- "pending": false,
- "failed": true,
- "checking_id": null,
- "fee_msat": null,
- "preimage": null
- }
- }
- ]
+ "method": "POST"
+ }
},
- "get_invoice_status": {
- "mocks": {
- "corelightningrest": {
- "get_invoice_status_endpoint": {
- "uri": "/v1/invoice/listInvoices",
- "query_params": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "headers": {
- "macaroon": "eNcRyPtEdMaCaRoOn",
- "encodingtype": "hex",
- "accept": "application/json",
- "User-Agent": "LNbits/Tests"
- },
- "method": "GET"
- }
- },
- "lndrest": {
- "get_invoice_status_endpoint": {
- "uri": "/v1/invoice/e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "headers": {
- "Grpc-Metadata-macaroon": "eNcRyPtEdMaCaRoOn",
- "User-Agent": "LNbits/Tests"
- },
- "method": "GET"
- }
- },
- "alby": {
- "get_invoice_status_endpoint": {
- "uri": "/invoices/e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "headers": {
- "Authorization": "Bearer mock-alby-access-token",
- "User-Agent": "LNbits/Tests"
- },
- "method": "GET"
- }
- },
- "eclair": {
- "get_invoice_status_endpoint": {
- "uri": "/getreceivedinfo",
- "headers": {
- "Authorization": "Basic OnNlY3JldA==",
- "User-Agent": "LNbits/Tests"
- },
- "method": "POST"
- }
- },
- "lnbits": {
- "get_invoice_status_endpoint": {
- "uri": "/api/v1/payments/e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "headers": {
- "X-Api-Key": "f171ba022a764e679eef950b21fb1c04",
- "User-Agent": "LNbits/Tests"
- },
- "method": "GET"
- }
- }
+ "eclair": {
+ "create_invoice_endpoint": {
+ "uri": "/createinvoice",
+ "headers": {
+ "Authorization": "Basic OnNlY3JldA==",
+ "User-Agent": "LNbits/Tests"
},
- "tests": [
- {
- "description": "paid",
- "call_params": {
- "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "expect": {
- "success": true,
- "failed": false,
- "pending": false
- },
- "mocks": {
- "corelightningrest": {
- "get_invoice_status_endpoint": [
- {
- "response_type": "json",
- "response": {
- "invoices": [
- {
- "status": "paid"
- }
- ]
- }
- },
- {
- "response_type": "json",
- "response": {
- "invoices": [
- {
- "status": "complete"
- }
- ]
- }
- }
- ]
- },
- "lndrest": {
- "get_invoice_status_endpoint": [
- {
- "response_type": "json",
- "response": {
- "settled": true
- }
- }
- ]
- },
- "alby": {
- "get_invoice_status_endpoint": [
- {
- "response_type": "json",
- "response": {
- "state": "SETTLED"
- }
- }
- ]
- },
- "eclair": {
- "get_invoice_status_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "response_type": "json",
- "response": {
- "status": {
- "type": "received"
- }
- }
- }
- ]
- },
- "lnbits": {
- "get_invoice_status_endpoint": [
- {
- "response_type": "json",
- "response": {
- "paid": true
- }
- }
- ]
- }
- }
- },
- {
- "description": "failed",
- "description1": "pending should be false in the 'expect', this is a bug",
- "call_params": {
- "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "expect": {
- "success": false,
- "failed": true,
- "pending": true
- },
- "mocks": {
- "corelightningrest": {
- "get_invoice_status_endpoint": [
- {
- "response_type": "json",
- "response": {
- "invoices": [
- {
- "status": "failed"
- }
- ]
- }
- }
- ]
- },
- "lndrest": {
- "description": "lndrest.py doesn't handle the 'failed' status for `get_invoice_status`",
- "get_invoice_status_endpoint": []
- },
- "alby": {
- "description": "alby.py doesn't handle the 'failed' status for `get_invoice_status`",
- "get_invoice_status_endpoint": []
- },
- "eclair": {
- "get_invoice_status_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "response_type": "json",
- "response": {
- "status": {
- "type": "expired"
- }
- }
- }
- ]
- },
- "lnbits": {
- "description": "lnbits.py doesn't handle the 'failed' status for `get_invoice_status`",
- "get_invoice_status_endpoint": []
- }
- }
- },
- {
- "description": "pending",
- "call_params": {
- "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "expect": {
- "success": false,
- "failed": false,
- "pending": true
- },
- "mocks": {
- "corelightningrest": {
- "get_invoice_status_endpoint": [
- {
- "description": "no data",
- "response_type": "json",
- "response": {}
- },
- {
- "description": "error status",
- "response_type": "json",
- "response": {
- "error": "test-error"
- }
- },
- {
- "description": "bad json",
- "response_type": "data",
- "response": "data-not-json"
- },
- {
- "description": "http 404",
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ]
- },
- "lndrest": {
- "get_invoice_status_endpoint": [
- {
- "description": "no data",
- "response_type": "json",
- "response": {}
- },
- {
- "description": "error status",
- "response_type": "json",
- "response": {
- "seetled": false
- }
- },
- {
- "description": "bad json",
- "response_type": "data",
- "response": "data-not-json"
- },
- {
- "description": "http 404",
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ]
- },
- "alby": {
- "get_invoice_status_endpoint": [
- {
- "description": "no data",
- "response_type": "json",
- "response": {}
- },
- {
- "description": "error status",
- "response_type": "json",
- "response": {
- "status": "CREATED"
- }
- },
- {
- "description": "bad json",
- "response_type": "data",
- "response": "data-not-json"
- },
- {
- "description": "http 404",
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ]
- },
- "eclair": {
- "get_invoice_status_endpoint": [
- {
- "description": "no data",
- "request_type": "json",
- "request_body": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "response_type": "json",
- "response": {}
- },
- {
- "description": "pending status",
- "request_type": "json",
- "request_body": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "response_type": "json",
- "response": {
- "status": {
- "type": "pending"
- }
- }
- },
- {
- "description": "bad json",
- "request_type": "json",
- "request_body": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "response_type": "data",
- "response": "data-not-json"
- },
- {
- "description": "http 404",
- "request_type": "json",
- "request_body": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ]
- },
- "lnbits": {
- "get_invoice_status_endpoint": [
- {
- "description": "no data",
- "response_type": "json",
- "response": {}
- },
- {
- "description": "pending true",
- "response_type": "json",
- "response": {
- "paid": false,
- "details": {
- "pending": true
- }
- }
- },
- {
- "description": "bad json",
- "response_type": "data",
- "response": "data-not-json"
- },
- {
- "description": "http 404",
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ]
- }
- }
- },
- {
- "description": "no mocks",
- "call_params": {
- "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "expect": {
- "success": false,
- "failed": false,
- "pending": true
- }
- }
- ]
+ "method": "POST"
+ }
},
- "get_payment_status": {
- "mocks": {
- "corelightningrest": {
- "get_payment_status_endpoint": {
- "uri": "/v1/pay/listPays",
- "query_params": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "headers": {
- "macaroon": "eNcRyPtEdMaCaRoOn",
- "encodingtype": "hex",
- "accept": "application/json",
- "User-Agent": "LNbits/Tests"
- },
- "method": "GET"
- }
- },
- "lndrest": {
- "get_payment_status_endpoint": {
- "uri": "/v2/router/track/41UmpD0E6YVZTA36uEiBT1JLHHhlmOyaY77dstcmrJY=",
- "headers": {
- "Grpc-Metadata-macaroon": "eNcRyPtEdMaCaRoOn",
- "User-Agent": "LNbits/Tests"
- },
- "method": "GET"
- }
- },
- "alby": {
- "get_payment_status_endpoint": {
- "uri": "/invoices/e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "headers": {
- "Authorization": "Bearer mock-alby-access-token",
- "User-Agent": "LNbits/Tests"
- },
- "method": "GET"
- }
- },
- "eclair": {
- "get_payment_status_endpoint": {
- "uri": "/getsentinfo",
- "headers": {
- "Authorization": "Basic OnNlY3JldA==",
- "User-Agent": "LNbits/Tests"
- },
- "method": "POST"
- }
- },
- "lnbits": {
- "get_payment_status_endpoint": {
- "uri": "/api/v1/payments/e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "headers": {
- "X-Api-Key": "f171ba022a764e679eef950b21fb1c04",
- "User-Agent": "LNbits/Tests"
- },
- "method": "GET"
- }
- }
+ "lnbits": {
+ "create_invoice_endpoint": {
+ "uri": "/api/v1/payments",
+ "headers": {
+ "X-Api-Key": "f171ba022a764e679eef950b21fb1c04",
+ "User-Agent": "LNbits/Tests"
},
- "tests": [
- {
- "description": "paid",
- "call_params": {
- "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "expect": {
- "fee_msat": 1000,
- "preimage": "0000000000000000000000000000000000000000000000000000000000000000",
- "success": true,
- "failed": false,
- "pending": false
- },
- "mocks": {
- "corelightningrest": {
- "get_payment_status_endpoint": [
- {
- "response_type": "json",
- "response": {
- "pays": [
- {
- "status": "complete",
- "amount_msat": "21000msat",
- "amount_sent_msat": "-22000msat",
- "preimage": "0000000000000000000000000000000000000000000000000000000000000000"
- }
- ]
- }
- }
- ]
- },
- "lndrest": {
- "get_payment_status_endpoint": [
- {
- "response_type": "stream",
- "response": {
- "result": {
- "status": "SUCCEEDED",
- "fee_msat": 1000,
- "payment_preimage": "0000000000000000000000000000000000000000000000000000000000000000"
- }
- }
- }
- ]
- },
- "alby": {
- "get_payment_status_endpoint": [
- {
- "skip": true,
- "response_type": "json",
- "response": {
- "result": {
- "status": "SETTLED"
- }
- }
- }
- ]
- },
- "eclair": {
- "get_payment_status_endpoint": [
- {
- "request_type": "json",
- "request_body": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "response_type": "json",
- "response": [
- {
- "status": {
- "type": "sent",
- "feesPaid": -1000,
- "paymentPreimage": "0000000000000000000000000000000000000000000000000000000000000000"
- }
- }
- ]
- }
- ]
- },
- "lnbits": {
- "get_payment_status_endpoint": [
- {
- "response_type": "json",
- "response": {
- "paid": true,
- "preimage": "0000000000000000000000000000000000000000000000000000000000000000",
- "details": {
- "fee": 1000
- }
- }
- }
- ]
- }
- }
- },
- {
- "description": "failed",
- "description1": "pending should be false in the 'expect', this is a bug",
- "call_params": {
- "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "expect": {
- "preimage": null,
- "success": false,
- "failed": true,
- "pending": true
- },
- "mocks": {
- "corelightningrest": {
- "get_payment_status_endpoint": [
- {
- "response_type": "json",
- "response": {
- "pays": [
- {
- "status": "failed"
- }
- ]
- }
- }
- ]
- },
- "lndrest": {
- "get_payment_status_endpoint": [
- {
- "response_type": "stream",
- "response": {
- "result": {
- "status": "FAILED"
- }
- }
- },
- {
- "description": "error code 5",
- "response_type": "stream",
- "response": {
- "error": {
- "code": 5,
- "message": "payment isn't initiated"
- }
- }
- }
- ]
- },
- "alby": {
- "get_payment_status_endpoint": []
- },
- "eclair": {
- "get_payment_status_endpoint": [
- {
- "description": "failed status",
- "request_type": "json",
- "request_body": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "response_type": "json",
- "response": [
- {
- "status": {
- "type": "failed"
- }
- }
- ]
- }
- ]
- },
- "lnbits": {
- "get_payment_status_endpoint": []
- }
- }
- },
- {
- "description": "pending",
- "call_params": {
- "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "expect": {
- "preimage": null,
- "success": false,
- "failed": false,
- "pending": true
- },
- "mocks": {
- "corelightningrest": {
- "get_payment_status_endpoint": [
- {
- "description": "pending status",
- "response_type": "json",
- "response": {
- "pays": [
- {
- "status": "pending"
- }
- ]
- }
- },
- {
- "description": "no data",
- "response_type": "json",
- "response": {}
- },
- {
- "description": "error status",
- "response_type": "json",
- "response": {
- "error": "test-error"
- }
- },
- {
- "description": "bad json",
- "response_type": "data",
- "response": "data-not-json"
- },
- {
- "description": "http 404",
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ]
- },
- "lndrest": {
- "get_payment_status_endpoint": [
- {
- "description": "UNKNOWN",
- "response_type": "stream",
- "response": {
- "result": {
- "status": "UNKNOWN"
- }
- }
- },
- {
- "description": "IN_FLIGHT",
- "response_type": "stream",
- "response": {
- "result": {
- "status": "IN_FLIGHT"
- }
- }
- },
- {
- "description": "error code 4",
- "response_type": "stream",
- "response": {
- "error": {
- "code": 5,
- "message": "should not fail"
- }
- }
- },
- {
- "description": "no data",
- "response_type": "stream",
- "response": {}
- },
- {
- "description": "bad json",
- "response_type": "stream",
- "response": "data-not-json"
- },
- {
- "description": "http 404",
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ]
- },
- "alby": {
- "get_payment_status_endpoint": [
- {
- "description": "CREATED",
- "response_type": "stream",
- "response": {
- "state": "CREATED"
- }
- },
- {
- "description": "no data",
- "response_type": "stream",
- "response": {}
- },
- {
- "description": "bad json",
- "response_type": "stream",
- "response": "data-not-json"
- },
- {
- "description": "http 404",
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ]
- },
- "eclair": {
- "get_payment_status_endpoint": [
- {
- "description": "no data",
- "request_type": "json",
- "request_body": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "response_type": "json",
- "response": []
- },
- {
- "description": "pending status",
- "request_type": "json",
- "request_body": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "response_type": "json",
- "response": [
- {
- "status": {
- "type": "pending"
- }
- }
- ]
- },
- {
- "description": "bad json",
- "request_type": "json",
- "request_body": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "response_type": "data",
- "response": "data-not-json"
- },
- {
- "description": "http 404",
- "request_type": "json",
- "request_body": {
- "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ]
- },
- "lnbits": {
- "get_payment_status_endpoint": [
- {
- "description": "pending true",
- "response_type": "json",
- "response": {
- "paid": false,
- "details": {
- "pending": true
- }
- }
- },
- {
- "description": "no data",
- "response_type": "json",
- "response": {}
- },
- {
- "description": "missing 'paid' field",
- "response_type": "json",
- "response": {
- "details": {
- "pending": true
- }
- }
- },
- {
- "description": "missing 'details' field",
- "response_type": "json",
- "response": {
- "paid": true
- }
- },
- {
- "description": "bad json",
- "response_type": "data",
- "response": "data-not-json"
- },
- {
- "description": "http 404",
- "response_type": "response",
- "response": {
- "response": "Not Found",
- "status": 404
- }
- }
- ]
- }
- }
- },
- {
- "description": "no mocks",
- "call_params": {
- "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "expect": {
- "preimage": null,
- "success": false,
- "failed": false,
- "pending": true
- }
- }
- ]
+ "method": "POST"
+ }
}
+ },
+ "tests": [
+ {
+ "description": "success",
+ "call_params": {
+ "amount": 555,
+ "memo": "Test Invoice",
+ "label": "test-label"
+ },
+ "expect": {
+ "error_message": null,
+ "success": true,
+ "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "payment_request": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
+ },
+ "mocks": {
+ "corelightningrest": {
+ "create_invoice_endpoint": [
+ {
+ "request_type": "data",
+ "request_body": {
+ "amount": 555000,
+ "description": "Test Invoice",
+ "label": "test-label"
+ },
+ "response_type": "json",
+ "response": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "bolt11": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
+ }
+ }
+ ]
+ },
+ "lndrest": {
+ "create_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "value": 555,
+ "memo": "Test Invoice",
+ "private": true
+ },
+ "response_type": "json",
+ "response": {
+ "r_hash": "41UmpD0E6YVZTA36uEiBT1JLHHhlmOyaY77dstcmrJY=",
+ "payment_request": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
+ }
+ }
+ ]
+ },
+ "alby": {
+ "create_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "value": 555,
+ "memo": "Test Invoice"
+ },
+ "response_type": "json",
+ "response": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "payment_request": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
+ }
+ }
+ ]
+ },
+ "eclair": {
+ "create_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "amountMsat": 555000
+ },
+ "response_type": "json",
+ "response": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "serialized": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
+ }
+ }
+ ]
+ },
+ "lnbits": {
+ "create_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "out": false,
+ "amount": 555000,
+ "memo": "Test Invoice"
+ },
+ "response_type": "json",
+ "response": {
+ "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "payment_request": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "error",
+ "call_params": {
+ "amount": 555,
+ "memo": "Test Invoice",
+ "label": "test-label"
+ },
+ "expect": {
+ "error_message": "Server error: 'Test Error'",
+ "success": false,
+ "checking_id": null,
+ "payment_request": null
+ },
+ "mocks": {
+ "corelightningrest": {
+ "create_invoice_endpoint": [
+ {
+ "request_type": "data",
+ "request_body": {
+ "amount": 555000,
+ "description": "Test Invoice",
+ "label": "test-label"
+ },
+ "response_type": "json",
+ "response": {
+ "error": "Test Error"
+ }
+ }
+ ]
+ },
+ "lndrest": {
+ "create_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "value": 555,
+ "memo": "Test Invoice",
+ "private": true
+ },
+ "response_type": "json",
+ "response": {
+ "error": "Test Error"
+ }
+ }
+ ]
+ },
+ "alby": {
+ "create_invoice_endpoint": []
+ },
+ "eclair": {
+ "create_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "amountMsat": 555000
+ },
+ "response_type": "json",
+ "response": {
+ "error": "Test Error"
+ }
+ }
+ ]
+ },
+ "lnbits": {
+ "create_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "out": false,
+ "amount": 555000,
+ "memo": "Test Invoice"
+ },
+ "response_type": "json",
+ "response": {
+ "detail": "Test Error"
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "missing data",
+ "call_params": {
+ "amount": 555,
+ "memo": "Test Invoice",
+ "label": "test-label"
+ },
+ "expect": {
+ "error_message": "Server error: 'missing required fields'",
+ "success": false,
+ "checking_id": null,
+ "payment_request": null
+ },
+ "mocks": {
+ "corelightningrest": {
+ "create_invoice_endpoint": [
+ {
+ "request_type": "data",
+ "request_body": {
+ "amount": 555000,
+ "description": "Test Invoice",
+ "label": "test-label"
+ },
+ "response_type": "json",
+ "response": {
+ "some_field": "but the required fields are mising"
+ }
+ }
+ ]
+ },
+ "lndrest": {
+ "create_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "value": 555,
+ "memo": "Test Invoice",
+ "private": true
+ },
+ "response_type": "json",
+ "response": {
+ "some_field": "but the required fields are mising"
+ }
+ }
+ ]
+ },
+ "alby": {
+ "create_invoice_endpoint": [
+ {
+ "description": "missing payment request",
+ "request_type": "json",
+ "request_body": {
+ "value": 555,
+ "memo": "Test Invoice"
+ },
+ "response_type": "json",
+ "response": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ }
+ ]
+ },
+ "eclair": {
+ "create_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "amountMsat": 555000
+ },
+ "response_type": "json",
+ "response": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ }
+ ]
+ },
+ "lnbits": {
+ "create_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "out": false,
+ "amount": 555000,
+ "memo": "Test Invoice"
+ },
+ "response_type": "json",
+ "response": {
+ "payment_request": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "bad json",
+ "call_params": {
+ "amount": 555,
+ "memo": "Test Invoice",
+ "label": "test-label"
+ },
+ "expect": {
+ "success": false,
+ "checking_id": null,
+ "payment_request": null,
+ "error_message": "Server error: 'invalid json response'"
+ },
+ "mocks": {
+ "corelightningrest": {
+ "create_invoice_endpoint": [
+ {
+ "request_type": "data",
+ "request_body": {
+ "amount": 555000,
+ "description": "Test Invoice",
+ "label": "test-label"
+ },
+ "response_type": "data",
+ "response": "data-not-json"
+ }
+ ]
+ },
+ "lndrest": {
+ "create_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "value": 555,
+ "memo": "Test Invoice",
+ "private": true
+ },
+ "response_type": "data",
+ "response": "data-not-json"
+ }
+ ]
+ },
+ "alby": {
+ "create_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "value": 555,
+ "memo": "Test Invoice"
+ },
+ "response_type": "data",
+ "response": "data-not-json"
+ }
+ ]
+ },
+ "eclair": {
+ "create_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "amountMsat": 555000
+ },
+ "response_type": "data",
+ "response": "data-not-json"
+ }
+ ]
+ },
+ "lnbits": {
+ "create_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "out": false,
+ "amount": 555000,
+ "memo": "Test Invoice"
+ },
+ "response_type": "data",
+ "response": "data-not-json"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "http 404",
+ "call_params": {
+ "amount": 555,
+ "memo": "Test Invoice",
+ "label": "test-label"
+ },
+ "expect": {
+ "success": false,
+ "checking_id": null,
+ "payment_request": null,
+ "error_message": "Unable to connect to http://127.0.0.1:8555."
+ },
+ "mocks": {
+ "corelightningrest": {
+ "create_invoice_endpoint": [
+ {
+ "request_type": "data",
+ "request_body": {
+ "amount": 555000,
+ "description": "Test Invoice",
+ "label": "test-label"
+ },
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ]
+ },
+ "lndrest": {
+ "create_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "value": 555,
+ "memo": "Test Invoice",
+ "private": true
+ },
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ]
+ },
+ "alby": {
+ "create_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "value": 555,
+ "memo": "Test Invoice"
+ },
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ]
+ },
+ "eclair": {
+ "create_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "amountMsat": 555000
+ },
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ]
+ },
+ "lnbits": {
+ "create_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "out": false,
+ "amount": 555000,
+ "memo": "Test Invoice"
+ },
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "no mocks",
+ "call_params": {
+ "amount": 555,
+ "memo": "Test Invoice",
+ "label": "test-label"
+ },
+ "expect": {
+ "success": false,
+ "checking_id": null,
+ "payment_request": null,
+ "error_message": "Unable to connect to http://127.0.0.1:8555."
+ }
+ }
+ ]
+ },
+ "pay_invoice": {
+ "mocks": {
+ "corelightningrest": {
+ "pay_invoice_endpoint": {
+ "uri": "/v1/pay",
+ "headers": {
+ "macaroon": "eNcRyPtEdMaCaRoOn",
+ "encodingtype": "hex",
+ "accept": "application/json",
+ "User-Agent": "LNbits/Tests"
+ },
+ "method": "POST"
+ }
+ },
+ "lndrest": {
+ "pay_invoice_endpoint": {
+ "uri": "/v1/channels/transactions",
+ "headers": {
+ "Grpc-Metadata-macaroon": "eNcRyPtEdMaCaRoOn",
+ "User-Agent": "LNbits/Tests"
+ },
+ "method": "POST"
+ }
+ },
+ "alby": {
+ "pay_invoice_endpoint": {
+ "uri": "/payments/bolt11",
+ "headers": {
+ "Authorization": "Bearer mock-alby-access-token",
+ "User-Agent": "LNbits/Tests"
+ },
+ "method": "POST"
+ }
+ },
+ "eclair": {
+ "pay_invoice_endpoint": {
+ "uri": "/payinvoice",
+ "headers": {
+ "Authorization": "Basic OnNlY3JldA==",
+ "User-Agent": "LNbits/Tests"
+ },
+ "method": "POST"
+ },
+ "get_payment_status_endpoint": {
+ "uri": "/getsentinfo",
+ "headers": {
+ "Authorization": "Basic OnNlY3JldA==",
+ "User-Agent": "LNbits/Tests"
+ },
+ "method": "POST"
+ }
+ },
+ "lnbits": {
+ "pay_invoice_endpoint": {
+ "uri": "/api/v1/payments",
+ "headers": {
+ "X-Api-Key": "f171ba022a764e679eef950b21fb1c04",
+ "User-Agent": "LNbits/Tests"
+ },
+ "method": "POST"
+ },
+ "get_payment_status_endpoint": {
+ "uri": "/api/v1/payments/e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "headers": {
+ "X-Api-Key": "f171ba022a764e679eef950b21fb1c04",
+ "User-Agent": "LNbits/Tests"
+ },
+ "method": "GET"
+ }
+ }
+ },
+ "tests": [
+ {
+ "description": "success",
+ "call_params": {
+ "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "fee_limit_msat": 25000
+ },
+ "expect": {
+ "error_message": null,
+ "success": true,
+ "pending": false,
+ "failed": false,
+ "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "fee_msat": 50,
+ "preimage": "0000000000000000000000000000000000000000000000000000000000000000"
+ },
+ "mocks": {
+ "corelightningrest": {
+ "pay_invoice_endpoint": [
+ {
+ "request_type": "data",
+ "request_body": {
+ "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "maxfeepercent": "119.04761905",
+ "exemptfee": 0
+ },
+ "response_type": "json",
+ "response": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "payment_preimage": "0000000000000000000000000000000000000000000000000000000000000000",
+ "msatoshi": 21000,
+ "msatoshi_sent": 21050,
+ "status": "paid"
+ }
+ }
+ ]
+ },
+ "lndrest": {
+ "pay_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "payment_request": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "fee_limit": 25000
+ },
+ "response_type": "json",
+ "response": {
+ "payment_hash": "41UmpD0E6YVZTA36uEiBT1JLHHhlmOyaY77dstcmrJY=",
+ "payment_route": {
+ "total_fees_msat": 50
+ },
+ "payment_preimage": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
+ }
+ }
+ ]
+ },
+ "alby": {
+ "pay_invoice_endpoint": [
+ {
+ "skip": true,
+ "request_type": "json",
+ "request_body": {
+ "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
+ },
+ "response_type": "json",
+ "response": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "fee": 50,
+ "payment_preimage": "0000000000000000000000000000000000000000000000000000000000000000"
+ }
+ }
+ ]
+ },
+ "eclair": {
+ "pay_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "blocking": true,
+ "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
+ },
+ "response_type": "json",
+ "response": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "paymentPreimage": "0000000000000000000000000000000000000000000000000000000000000000",
+ "type": "mock"
+ }
+ }
+ ],
+ "get_payment_status_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "response_type": "json",
+ "response": [
+ {
+ "status": {
+ "type": "sent",
+ "feesPaid": -50,
+ "paymentPreimage": "0000000000000000000000000000000000000000000000000000000000000000"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "lnbits": {
+ "pay_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "out": true,
+ "blt11": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
+ },
+ "response_type": "json",
+ "response": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ }
+ ],
+ "get_payment_status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {
+ "paid": true,
+ "preimage": "0000000000000000000000000000000000000000000000000000000000000000",
+ "details": {
+ "fee": 50
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "pending, no fee",
+ "call_params": {
+ "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "fee_limit_msat": 25000
+ },
+ "expect": {
+ "success": false,
+ "pending": true,
+ "failed": false,
+ "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "fee_msat": null,
+ "preimage": "0000000000000000000000000000000000000000000000000000000000000000"
+ },
+ "mocks": {
+ "corelightningrest": {},
+ "lndrest": {},
+ "alby": {},
+ "eclair": [
+ {
+ "pay_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "blocking": true,
+ "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
+ },
+ "response_type": "json",
+ "response": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "paymentPreimage": "0000000000000000000000000000000000000000000000000000000000000000",
+ "type": "mock"
+ }
+ }
+ ],
+ "get_payment_status_endpoint": [
+ {
+ "description": "get paid invoice: error",
+ "request_type": "json",
+ "request_body": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "response_type": "json",
+ "response": {
+ "error": "Test Error"
+ }
+ }
+ ]
+ },
+ {
+ "pay_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "blocking": true,
+ "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
+ },
+ "response_type": "json",
+ "response": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "paymentPreimage": "0000000000000000000000000000000000000000000000000000000000000000",
+ "type": "mock"
+ }
+ }
+ ],
+ "get_payment_status_endpoint": [
+ {
+ "description": "get paid invoice: no data",
+ "request_type": "json",
+ "request_body": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "response_type": "json",
+ "response": {}
+ }
+ ]
+ },
+ {
+ "pay_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "blocking": true,
+ "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
+ },
+ "response_type": "json",
+ "response": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "paymentPreimage": "0000000000000000000000000000000000000000000000000000000000000000",
+ "type": "mock"
+ }
+ }
+ ],
+ "get_payment_status_endpoint": [
+ {
+ "description": "get paid invoice: bad json",
+ "request_type": "json",
+ "request_body": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "response_type": "data",
+ "response": "data-not-json"
+ }
+ ]
+ },
+ {
+ "pay_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "blocking": true,
+ "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
+ },
+ "response_type": "json",
+ "response": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "paymentPreimage": "0000000000000000000000000000000000000000000000000000000000000000",
+ "type": "mock"
+ }
+ }
+ ],
+ "get_payment_status_endpoint": [
+ {
+ "description": "get paid invoice: pending status",
+ "request_type": "json",
+ "request_body": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "response_type": "json",
+ "response": [
+ {
+ "status": {
+ "type": "pending"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "lnbits": []
+ }
+ },
+ {
+ "description": "error",
+ "call_params": {
+ "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "fee_limit_msat": 25000
+ },
+ "expect": {
+ "success": false,
+ "pending": false,
+ "failed": true,
+ "checking_id": null,
+ "fee_msat": null,
+ "preimage": null,
+ "error_message": "Test Error"
+ },
+ "mocks": {
+ "corelightningrest": {
+ "pay_invoice_endpoint": [
+ {
+ "request_type": "data",
+ "request_body": {
+ "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "maxfeepercent": "119.04761905",
+ "exemptfee": 0
+ },
+ "response_type": "json",
+ "response": {
+ "error": "Test Error"
+ }
+ }
+ ]
+ },
+ "lndrest": {
+ "pay_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "payment_request": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "fee_limit": 25000
+ },
+ "response_type": "json",
+ "response": {
+ "payment_error": "Test Error"
+ }
+ }
+ ]
+ },
+ "alby": {
+ "pay_invoice_endpoint": []
+ },
+ "eclair": {
+ "pay_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "blocking": true,
+ "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
+ },
+ "response_type": "json",
+ "response": {
+ "error": "Test Error"
+ }
+ }
+ ],
+ "get_payment_status_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "response_type": "json",
+ "response": []
+ }
+ ]
+ },
+ "lnbits": {
+ "pay_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "out": true,
+ "blt11": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
+ },
+ "response_type": "json",
+ "response": {
+ "detail": "Test Error"
+ }
+ }
+ ],
+ "get_payment_status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {
+ "paid": true,
+ "preimage": "0000000000000000000000000000000000000000000000000000000000000000",
+ "details": {
+ "fee": 50
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "missing data",
+ "call_params": {
+ "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "fee_limit_msat": 25000
+ },
+ "expect": {
+ "error_message": "Server error: 'missing required fields'",
+ "success": false,
+ "pending": false,
+ "failed": true,
+ "checking_id": null,
+ "fee_msat": null,
+ "preimage": null
+ },
+ "mocks": {
+ "corelightningrest": {
+ "pay_invoice_endpoint": [
+ {
+ "request_type": "data",
+ "request_body": {
+ "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "maxfeepercent": "119.04761905",
+ "exemptfee": 0
+ },
+ "response_type": "json",
+ "response": {}
+ }
+ ]
+ },
+ "lndrest": {
+ "pay_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "payment_request": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "fee_limit": 25000
+ },
+ "response_type": "json",
+ "response": {}
+ }
+ ]
+ },
+ "alby": {
+ "pay_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
+ },
+ "response_type": "json",
+ "response": {}
+ }
+ ]
+ },
+ "eclair": {
+ "pay_invoice_endpoint": [
+ {
+ "description": "no data from pay invoice",
+ "request_type": "json",
+ "request_body": {
+ "blocking": true,
+ "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
+ },
+ "response_type": "json",
+ "response": {}
+ }
+ ],
+ "get_payment_status_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "response_type": "json",
+ "response": []
+ }
+ ]
+ },
+ "lnbits": {}
+ }
+ },
+ {
+ "description": "bad json",
+ "call_params": {
+ "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "fee_limit_msat": 25000
+ },
+ "expect": {
+ "error_message": "Server error: 'invalid json response'",
+ "success": false,
+ "pending": false,
+ "failed": true,
+ "checking_id": null,
+ "fee_msat": null,
+ "preimage": null
+ },
+ "mocks": {
+ "corelightningrest": {
+ "pay_invoice_endpoint": [
+ {
+ "request_type": "data",
+ "request_body": {
+ "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "maxfeepercent": "119.04761905",
+ "exemptfee": 0
+ },
+ "response_type": "data",
+ "response": "data-not-json"
+ }
+ ]
+ },
+ "lndrest": {
+ "pay_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "payment_request": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "fee_limit": 25000
+ },
+ "response_type": "data",
+ "response": "data-not-json"
+ }
+ ]
+ },
+ "alby": {
+ "pay_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
+ },
+ "response_type": "data",
+ "response": "data-not-json"
+ }
+ ]
+ },
+ "eclair": {
+ "pay_invoice_endpoint": [
+ {
+ "description": "no data from pay invoice",
+ "request_type": "json",
+ "request_body": {
+ "blocking": true,
+ "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
+ },
+ "response_type": "data",
+ "response": "data-not-json"
+ }
+ ],
+ "get_payment_status_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "response_type": "json",
+ "response": []
+ }
+ ]
+ },
+ "lnbits": {
+ "pay_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "out": true,
+ "blt11": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
+ },
+ "response_type": "data",
+ "response": "data-not-json"
+ }
+ ],
+ "get_payment_status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {
+ "paid": true,
+ "preimage": "0000000000000000000000000000000000000000000000000000000000000000",
+ "details": {
+ "fee": 50
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "http 404",
+ "call_params": {
+ "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "fee_limit_msat": 25000
+ },
+ "expect": {
+ "error_message": "Unable to connect to http://127.0.0.1:8555.",
+ "success": false,
+ "pending": false,
+ "failed": true,
+ "checking_id": null,
+ "fee_msat": null,
+ "preimage": null
+ },
+ "mocks": {
+ "corelightningrest": {
+ "pay_invoice_endpoint": [
+ {
+ "request_type": "data",
+ "request_body": {
+ "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "maxfeepercent": "119.04761905",
+ "exemptfee": 0
+ },
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ]
+ },
+ "lndrest": {
+ "pay_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "payment_request": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "fee_limit": 25000
+ },
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ]
+ },
+ "alby": {
+ "pay_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
+ },
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ]
+ },
+ "eclair": {
+ "pay_invoice_endpoint": [
+ {
+ "description": "no data from pay invoice",
+ "request_type": "json",
+ "request_body": {
+ "blocking": true,
+ "invoice": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu"
+ },
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ],
+ "get_payment_status_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "response_type": "json",
+ "response": []
+ }
+ ]
+ },
+ "lnbits": {
+ "pay_invoice_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "out": true,
+ "blt11": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
+ },
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ],
+ "get_payment_status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {}
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "no mocks",
+ "call_params": {
+ "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "fee_limit_msat": 25000
+ },
+ "expect": {
+ "error_message": "Unable to connect to http://127.0.0.1:8555.",
+ "success": false,
+ "pending": false,
+ "failed": true,
+ "checking_id": null,
+ "fee_msat": null,
+ "preimage": null
+ }
+ }
+ ]
+ },
+ "get_invoice_status": {
+ "mocks": {
+ "corelightningrest": {
+ "get_invoice_status_endpoint": {
+ "uri": "/v1/invoice/listInvoices",
+ "query_params": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "headers": {
+ "macaroon": "eNcRyPtEdMaCaRoOn",
+ "encodingtype": "hex",
+ "accept": "application/json",
+ "User-Agent": "LNbits/Tests"
+ },
+ "method": "GET"
+ }
+ },
+ "lndrest": {
+ "get_invoice_status_endpoint": {
+ "uri": "/v1/invoice/e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "headers": {
+ "Grpc-Metadata-macaroon": "eNcRyPtEdMaCaRoOn",
+ "User-Agent": "LNbits/Tests"
+ },
+ "method": "GET"
+ }
+ },
+ "alby": {
+ "get_invoice_status_endpoint": {
+ "uri": "/invoices/e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "headers": {
+ "Authorization": "Bearer mock-alby-access-token",
+ "User-Agent": "LNbits/Tests"
+ },
+ "method": "GET"
+ }
+ },
+ "eclair": {
+ "get_invoice_status_endpoint": {
+ "uri": "/getreceivedinfo",
+ "headers": {
+ "Authorization": "Basic OnNlY3JldA==",
+ "User-Agent": "LNbits/Tests"
+ },
+ "method": "POST"
+ }
+ },
+ "lnbits": {
+ "get_invoice_status_endpoint": {
+ "uri": "/api/v1/payments/e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "headers": {
+ "X-Api-Key": "f171ba022a764e679eef950b21fb1c04",
+ "User-Agent": "LNbits/Tests"
+ },
+ "method": "GET"
+ }
+ }
+ },
+ "tests": [
+ {
+ "description": "paid",
+ "call_params": {
+ "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "expect": {
+ "success": true,
+ "failed": false,
+ "pending": false
+ },
+ "mocks": {
+ "corelightningrest": {
+ "get_invoice_status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {
+ "invoices": [
+ {
+ "status": "paid"
+ }
+ ]
+ }
+ },
+ {
+ "response_type": "json",
+ "response": {
+ "invoices": [
+ {
+ "status": "complete"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "lndrest": {
+ "get_invoice_status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {
+ "settled": true
+ }
+ }
+ ]
+ },
+ "alby": {
+ "get_invoice_status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {
+ "state": "SETTLED"
+ }
+ }
+ ]
+ },
+ "eclair": {
+ "get_invoice_status_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "response_type": "json",
+ "response": {
+ "status": {
+ "type": "received"
+ }
+ }
+ }
+ ]
+ },
+ "lnbits": {
+ "get_invoice_status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {
+ "paid": true
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "failed",
+ "description1": "pending should be false in the 'expect', this is a bug",
+ "call_params": {
+ "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "expect": {
+ "success": false,
+ "failed": true,
+ "pending": true
+ },
+ "mocks": {
+ "corelightningrest": {
+ "get_invoice_status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {
+ "invoices": [
+ {
+ "status": "failed"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "lndrest": {
+ "description": "lndrest.py doesn't handle the 'failed' status for `get_invoice_status`",
+ "get_invoice_status_endpoint": []
+ },
+ "alby": {
+ "description": "alby.py doesn't handle the 'failed' status for `get_invoice_status`",
+ "get_invoice_status_endpoint": []
+ },
+ "eclair": {
+ "get_invoice_status_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "response_type": "json",
+ "response": {
+ "status": {
+ "type": "expired"
+ }
+ }
+ }
+ ]
+ },
+ "lnbits": {
+ "description": "lnbits.py doesn't handle the 'failed' status for `get_invoice_status`",
+ "get_invoice_status_endpoint": []
+ }
+ }
+ },
+ {
+ "description": "pending",
+ "call_params": {
+ "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "expect": {
+ "success": false,
+ "failed": false,
+ "pending": true
+ },
+ "mocks": {
+ "corelightningrest": {
+ "get_invoice_status_endpoint": [
+ {
+ "description": "no data",
+ "response_type": "json",
+ "response": {}
+ },
+ {
+ "description": "error status",
+ "response_type": "json",
+ "response": {
+ "error": "test-error"
+ }
+ },
+ {
+ "description": "bad json",
+ "response_type": "data",
+ "response": "data-not-json"
+ },
+ {
+ "description": "http 404",
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ]
+ },
+ "lndrest": {
+ "get_invoice_status_endpoint": [
+ {
+ "description": "no data",
+ "response_type": "json",
+ "response": {}
+ },
+ {
+ "description": "error status",
+ "response_type": "json",
+ "response": {
+ "seetled": false
+ }
+ },
+ {
+ "description": "bad json",
+ "response_type": "data",
+ "response": "data-not-json"
+ },
+ {
+ "description": "http 404",
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ]
+ },
+ "alby": {
+ "get_invoice_status_endpoint": [
+ {
+ "description": "no data",
+ "response_type": "json",
+ "response": {}
+ },
+ {
+ "description": "error status",
+ "response_type": "json",
+ "response": {
+ "status": "CREATED"
+ }
+ },
+ {
+ "description": "bad json",
+ "response_type": "data",
+ "response": "data-not-json"
+ },
+ {
+ "description": "http 404",
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ]
+ },
+ "eclair": {
+ "get_invoice_status_endpoint": [
+ {
+ "description": "no data",
+ "request_type": "json",
+ "request_body": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "response_type": "json",
+ "response": {}
+ },
+ {
+ "description": "pending status",
+ "request_type": "json",
+ "request_body": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "response_type": "json",
+ "response": {
+ "status": {
+ "type": "pending"
+ }
+ }
+ },
+ {
+ "description": "bad json",
+ "request_type": "json",
+ "request_body": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "response_type": "data",
+ "response": "data-not-json"
+ },
+ {
+ "description": "http 404",
+ "request_type": "json",
+ "request_body": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ]
+ },
+ "lnbits": {
+ "get_invoice_status_endpoint": [
+ {
+ "description": "no data",
+ "response_type": "json",
+ "response": {}
+ },
+ {
+ "description": "pending true",
+ "response_type": "json",
+ "response": {
+ "paid": false,
+ "details": {
+ "pending": true
+ }
+ }
+ },
+ {
+ "description": "bad json",
+ "response_type": "data",
+ "response": "data-not-json"
+ },
+ {
+ "description": "http 404",
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "no mocks",
+ "call_params": {
+ "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "expect": {
+ "success": false,
+ "failed": false,
+ "pending": true
+ }
+ }
+ ]
+ },
+ "get_payment_status": {
+ "mocks": {
+ "corelightningrest": {
+ "get_payment_status_endpoint": {
+ "uri": "/v1/pay/listPays",
+ "query_params": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "headers": {
+ "macaroon": "eNcRyPtEdMaCaRoOn",
+ "encodingtype": "hex",
+ "accept": "application/json",
+ "User-Agent": "LNbits/Tests"
+ },
+ "method": "GET"
+ }
+ },
+ "lndrest": {
+ "get_payment_status_endpoint": {
+ "uri": "/v2/router/track/41UmpD0E6YVZTA36uEiBT1JLHHhlmOyaY77dstcmrJY=",
+ "headers": {
+ "Grpc-Metadata-macaroon": "eNcRyPtEdMaCaRoOn",
+ "User-Agent": "LNbits/Tests"
+ },
+ "method": "GET"
+ }
+ },
+ "alby": {
+ "get_payment_status_endpoint": {
+ "uri": "/invoices/e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "headers": {
+ "Authorization": "Bearer mock-alby-access-token",
+ "User-Agent": "LNbits/Tests"
+ },
+ "method": "GET"
+ }
+ },
+ "eclair": {
+ "get_payment_status_endpoint": {
+ "uri": "/getsentinfo",
+ "headers": {
+ "Authorization": "Basic OnNlY3JldA==",
+ "User-Agent": "LNbits/Tests"
+ },
+ "method": "POST"
+ }
+ },
+ "lnbits": {
+ "get_payment_status_endpoint": {
+ "uri": "/api/v1/payments/e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "headers": {
+ "X-Api-Key": "f171ba022a764e679eef950b21fb1c04",
+ "User-Agent": "LNbits/Tests"
+ },
+ "method": "GET"
+ }
+ }
+ },
+ "tests": [
+ {
+ "description": "paid",
+ "call_params": {
+ "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "expect": {
+ "fee_msat": 1000,
+ "preimage": "0000000000000000000000000000000000000000000000000000000000000000",
+ "success": true,
+ "failed": false,
+ "pending": false
+ },
+ "mocks": {
+ "corelightningrest": {
+ "get_payment_status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {
+ "pays": [
+ {
+ "status": "complete",
+ "amount_msat": "21000msat",
+ "amount_sent_msat": "-22000msat",
+ "preimage": "0000000000000000000000000000000000000000000000000000000000000000"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "lndrest": {
+ "get_payment_status_endpoint": [
+ {
+ "response_type": "stream",
+ "response": {
+ "result": {
+ "status": "SUCCEEDED",
+ "fee_msat": 1000,
+ "payment_preimage": "0000000000000000000000000000000000000000000000000000000000000000"
+ }
+ }
+ }
+ ]
+ },
+ "alby": {
+ "get_payment_status_endpoint": [
+ {
+ "skip": true,
+ "response_type": "json",
+ "response": {
+ "result": {
+ "status": "SETTLED"
+ }
+ }
+ }
+ ]
+ },
+ "eclair": {
+ "get_payment_status_endpoint": [
+ {
+ "request_type": "json",
+ "request_body": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "response_type": "json",
+ "response": [
+ {
+ "status": {
+ "type": "sent",
+ "feesPaid": -1000,
+ "paymentPreimage": "0000000000000000000000000000000000000000000000000000000000000000"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "lnbits": {
+ "get_payment_status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {
+ "paid": true,
+ "preimage": "0000000000000000000000000000000000000000000000000000000000000000",
+ "details": {
+ "fee": 1000
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "failed",
+ "description1": "pending should be false in the 'expect', this is a bug",
+ "call_params": {
+ "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "expect": {
+ "preimage": null,
+ "success": false,
+ "failed": true,
+ "pending": true
+ },
+ "mocks": {
+ "corelightningrest": {
+ "get_payment_status_endpoint": [
+ {
+ "response_type": "json",
+ "response": {
+ "pays": [
+ {
+ "status": "failed"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "lndrest": {
+ "get_payment_status_endpoint": [
+ {
+ "response_type": "stream",
+ "response": {
+ "result": {
+ "status": "FAILED"
+ }
+ }
+ },
+ {
+ "description": "error code 5",
+ "response_type": "stream",
+ "response": {
+ "error": {
+ "code": 5,
+ "message": "payment isn't initiated"
+ }
+ }
+ }
+ ]
+ },
+ "alby": {
+ "get_payment_status_endpoint": []
+ },
+ "eclair": {
+ "get_payment_status_endpoint": [
+ {
+ "description": "failed status",
+ "request_type": "json",
+ "request_body": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "response_type": "json",
+ "response": [
+ {
+ "status": {
+ "type": "failed"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "lnbits": {
+ "get_payment_status_endpoint": []
+ }
+ }
+ },
+ {
+ "description": "pending",
+ "call_params": {
+ "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "expect": {
+ "preimage": null,
+ "success": false,
+ "failed": false,
+ "pending": true
+ },
+ "mocks": {
+ "corelightningrest": {
+ "get_payment_status_endpoint": [
+ {
+ "description": "pending status",
+ "response_type": "json",
+ "response": {
+ "pays": [
+ {
+ "status": "pending"
+ }
+ ]
+ }
+ },
+ {
+ "description": "no data",
+ "response_type": "json",
+ "response": {}
+ },
+ {
+ "description": "error status",
+ "response_type": "json",
+ "response": {
+ "error": "test-error"
+ }
+ },
+ {
+ "description": "bad json",
+ "response_type": "data",
+ "response": "data-not-json"
+ },
+ {
+ "description": "http 404",
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ]
+ },
+ "lndrest": {
+ "get_payment_status_endpoint": [
+ {
+ "description": "UNKNOWN",
+ "response_type": "stream",
+ "response": {
+ "result": {
+ "status": "UNKNOWN"
+ }
+ }
+ },
+ {
+ "description": "IN_FLIGHT",
+ "response_type": "stream",
+ "response": {
+ "result": {
+ "status": "IN_FLIGHT"
+ }
+ }
+ },
+ {
+ "description": "error code 4",
+ "response_type": "stream",
+ "response": {
+ "error": {
+ "code": 5,
+ "message": "should not fail"
+ }
+ }
+ },
+ {
+ "description": "no data",
+ "response_type": "stream",
+ "response": {}
+ },
+ {
+ "description": "bad json",
+ "response_type": "stream",
+ "response": "data-not-json"
+ },
+ {
+ "description": "http 404",
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ]
+ },
+ "alby": {
+ "get_payment_status_endpoint": [
+ {
+ "description": "CREATED",
+ "response_type": "stream",
+ "response": {
+ "state": "CREATED"
+ }
+ },
+ {
+ "description": "no data",
+ "response_type": "stream",
+ "response": {}
+ },
+ {
+ "description": "bad json",
+ "response_type": "stream",
+ "response": "data-not-json"
+ },
+ {
+ "description": "http 404",
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ]
+ },
+ "eclair": {
+ "get_payment_status_endpoint": [
+ {
+ "description": "no data",
+ "request_type": "json",
+ "request_body": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "response_type": "json",
+ "response": []
+ },
+ {
+ "description": "pending status",
+ "request_type": "json",
+ "request_body": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "response_type": "json",
+ "response": [
+ {
+ "status": {
+ "type": "pending"
+ }
+ }
+ ]
+ },
+ {
+ "description": "bad json",
+ "request_type": "json",
+ "request_body": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "response_type": "data",
+ "response": "data-not-json"
+ },
+ {
+ "description": "http 404",
+ "request_type": "json",
+ "request_body": {
+ "paymentHash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ]
+ },
+ "lnbits": {
+ "get_payment_status_endpoint": [
+ {
+ "description": "pending true",
+ "response_type": "json",
+ "response": {
+ "paid": false,
+ "details": {
+ "pending": true
+ }
+ }
+ },
+ {
+ "description": "no data",
+ "response_type": "json",
+ "response": {}
+ },
+ {
+ "description": "missing 'paid' field",
+ "response_type": "json",
+ "response": {
+ "details": {
+ "pending": true
+ }
+ }
+ },
+ {
+ "description": "missing 'details' field",
+ "response_type": "json",
+ "response": {
+ "paid": true
+ }
+ },
+ {
+ "description": "bad json",
+ "response_type": "data",
+ "response": "data-not-json"
+ },
+ {
+ "description": "http 404",
+ "response_type": "response",
+ "response": {
+ "response": "Not Found",
+ "status": 404
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "no mocks",
+ "call_params": {
+ "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "expect": {
+ "preimage": null,
+ "success": false,
+ "failed": false,
+ "pending": true
+ }
+ }
+ ]
}
+ }
}
diff --git a/tests/wallets/fixtures/json/fixtures_rpc.json b/tests/wallets/fixtures/json/fixtures_rpc.json
index 650f520b..6e0980ee 100644
--- a/tests/wallets/fixtures/json/fixtures_rpc.json
+++ b/tests/wallets/fixtures/json/fixtures_rpc.json
@@ -1,2376 +1,2374 @@
{
- "funding_sources": {
+ "funding_sources": {
+ "breez": {
+ "skip": true,
+ "wallet_class": "BreezSdkWallet",
+ "settings": {
+ "breez_api_key": "100",
+ "breez_greenlight_seed": "push divert icon era bracket fade much kind reason injury suffer muffin",
+ "breez_greenlight_device_key": "tests/wallets/certificates/cert.pem",
+ "breez_greenlight_device_cert": "tests/wallets/certificates/breez.crt"
+ }
+ },
+ "corelightning": {
+ "wallet_class": "CoreLightningWallet",
+ "settings": {
+ "corelightning_rpc": "some-mock-value"
+ }
+ },
+ "lndrpc": {
+ "wallet_class": "LndWallet",
+ "settings": {
+ "lnd_grpc_endpoint": "127.0.0.1",
+ "lnd_grpc_port": "10009",
+ "lnd_grpc_cert": "tests/wallets/fixtures/certificates/breez.crt",
+ "lnd_grpc_macaroon": "eNcRyPtEdMaCaRoOn"
+ }
+ }
+ },
+ "functions": {
+ "status": {
+ "mocks": {
"breez": {
- "skip": true,
- "wallet_class": "BreezSdkWallet",
- "settings": {
- "breez_api_key": "100",
- "breez_greenlight_seed": "push divert icon era bracket fade much kind reason injury suffer muffin",
- "breez_greenlight_device_key": "tests/wallets/certificates/cert.pem",
- "breez_greenlight_device_cert": "tests/wallets/certificates/breez.crt"
- }
+ "sdk_services": {
+ "method": "breez_sdk.connect",
+ "request_type": "function"
+ }
},
"corelightning": {
- "wallet_class": "CoreLightningWallet",
- "settings": {
- "corelightning_rpc": "some-mock-value"
+ "ln": {
+ "method": "pyln.client.LightningRpc.__new__",
+ "request_type": "function",
+ "response_type": "data",
+ "response": {
+ "help": {
+ "request_type": "function",
+ "response_type": "json",
+ "response": {
+ "help": [
+ {
+ "command": "some command"
+ }
+ ]
+ }
+ },
+ "listinvoices": {
+ "request_type": "function",
+ "response_type": "json",
+ "response": {
+ "invoices": []
+ }
+ }
}
+ }
},
"lndrpc": {
- "wallet_class": "LndWallet",
- "settings": {
- "lnd_grpc_endpoint": "127.0.0.1",
- "lnd_grpc_port": "10009",
- "lnd_grpc_cert": "tests/wallets/fixtures/certificates/breez.crt",
- "lnd_grpc_macaroon": "eNcRyPtEdMaCaRoOn"
+ "rpc": {
+ "method": "lnbits.wallets.lnd_grpc_files.lightning_pb2_grpc.LightningStub.__new__",
+ "request_type": "function",
+ "response_type": "data",
+ "response": {}
+ }
+ }
+ },
+ "tests": [
+ {
+ "description": "success",
+ "call_params": {},
+ "expect": {
+ "error_message": null,
+ "balance_msat": 55000
+ },
+ "mocks": {
+ "breez": {
+ "sdk_services": [
+ {
+ "response_type": "data",
+ "response": {
+ "node_info": {
+ "request_type": "function",
+ "response_type": "data",
+ "response": {
+ "channels_balance_msat": 55000
+ }
+ }
+ }
+ }
+ ]
+ },
+ "corelightning": {
+ "ln": [
+ {
+ "description": "one channel",
+ "response": {
+ "listfunds": {
+ "request_type": "function",
+ "response_type": "json",
+ "response": {
+ "channels": [
+ {
+ "our_amount_msat": 55000
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ "description": "two channels",
+ "response": {
+ "listfunds": {
+ "request_type": "function",
+ "response_type": "json",
+ "response": {
+ "channels": [
+ {
+ "our_amount_msat": 25000
+ },
+ {
+ "our_amount_msat": 30000
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ },
+ "lndrpc": {
+ "rpc": [
+ {
+ "response": {
+ "ChannelBalance": {
+ "request_type": "async-function",
+ "response_type": "data",
+ "response": {
+ "balance": 55
+ }
+ }
+ }
+ }
+ ]
}
+ }
+ },
+ {
+ "description": "error",
+ "call_params": {},
+ "expect": {
+ "error_message": "Unable to connect, got: 'test-error'",
+ "balance_msat": 0
+ },
+ "mocks": {
+ "breez": {
+ "sdk_services": [
+ {
+ "response_type": "data",
+ "response": {
+ "node_info": {
+ "request_type": "function",
+ "response_type": "exception",
+ "response": {
+ "data": "test-error"
+ }
+ }
+ }
+ }
+ ]
+ },
+ "corelightning": {
+ "ln": [
+ {
+ "response": {
+ "listfunds": {
+ "request_type": "function",
+ "response_type": "exception",
+ "response": {
+ "data": "test-error"
+ }
+ }
+ }
+ }
+ ]
+ },
+ "lndrpc": {
+ "rpc": [
+ {
+ "response": {
+ "ChannelBalance": {
+ "request_type": "async-function",
+ "response_type": "exception",
+ "response": {
+ "data": "test-error"
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "missing data",
+ "call_params": {},
+ "expect": {
+ "error_message": "no data",
+ "balance_msat": 0
+ },
+ "mocks": {
+ "breez": {
+ "sdk_services": []
+ },
+ "corelightning": {
+ "ln": [
+ {
+ "response": {
+ "listfunds": {
+ "request_type": "function",
+ "response_type": "json",
+ "response": {}
+ }
+ }
+ }
+ ]
+ },
+ "lndrpc": {
+ "rpc": []
+ }
+ }
+ },
+ {
+ "description": "RPC call failed:",
+ "call_params": {},
+ "expect": {
+ "error_message": "RPC 'test_method' failed with 'test-error'.",
+ "balance_msat": 0
+ },
+ "mocks": {
+ "breez": {
+ "sdk_services": []
+ },
+ "corelightning": {
+ "ln": [
+ {
+ "response": {
+ "listfunds": {
+ "request_type": "function",
+ "response_type": "exception",
+ "response": {
+ "module": "pyln.client.lightning",
+ "class": "RpcError",
+ "data": {
+ "method": "test_method",
+ "payload": "y",
+ "error": "test-error"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "lndrpc": {
+ "rpc": []
+ }
+ }
}
+ ]
},
- "functions": {
- "status": {
- "mocks": {
- "breez": {
- "sdk_services": {
- "method": "breez_sdk.connect",
- "request_type": "function"
- }
- },
- "corelightning": {
- "ln": {
- "method": "pyln.client.LightningRpc.__new__",
- "request_type": "function",
- "response_type": "data",
- "response": {
- "help": {
- "request_type": "function",
- "response_type": "json",
- "response": {
- "help": [
- {
- "command": "some command"
- }
- ]
- }
- },
- "listinvoices": {
- "request_type": "function",
- "response_type": "json",
- "response": {
- "invoices": []
- }
- }
- }
- }
- },
- "lndrpc": {
- "rpc": {
- "method": "lnbits.wallets.lnd_grpc_files.lightning_pb2_grpc.LightningStub.__new__",
- "request_type": "function",
- "response_type": "data",
- "response": {}
- }
- }
- },
- "tests": [
- {
- "description": "success",
- "call_params": {},
- "expect": {
- "error_message": null,
- "balance_msat": 55000
- },
- "mocks": {
- "breez": {
- "sdk_services": [
- {
- "response_type": "data",
- "response": {
- "node_info": {
- "request_type": "function",
- "response_type": "data",
- "response": {
- "channels_balance_msat": 55000
- }
- }
- }
- }
- ]
- },
- "corelightning": {
- "ln": [
- {
- "description": "one channel",
- "response": {
- "listfunds": {
- "request_type": "function",
- "response_type": "json",
- "response": {
- "channels": [
- {
- "our_amount_msat": 55000
- }
- ]
- }
- }
- }
- },
- {
- "description": "two channels",
- "response": {
- "listfunds": {
- "request_type": "function",
- "response_type": "json",
- "response": {
- "channels": [
- {
- "our_amount_msat": 25000
- },
- {
- "our_amount_msat": 30000
- }
- ]
- }
- }
- }
- }
- ]
- },
- "lndrpc": {
- "rpc": [
- {
- "response": {
- "ChannelBalance": {
- "request_type": "async-function",
- "response_type": "data",
- "response": {
- "balance": 55
- }
- }
- }
- }
- ]
- }
- }
- },
- {
- "description": "error",
- "call_params": {},
- "expect": {
- "error_message": "Unable to connect, got: 'test-error'",
- "balance_msat": 0
- },
- "mocks": {
- "breez": {
- "sdk_services": [
- {
- "response_type": "data",
- "response": {
- "node_info": {
- "request_type": "function",
- "response_type": "exception",
- "response": {
- "data": "test-error"
- }
- }
- }
- }
- ]
- },
- "corelightning": {
- "ln": [
- {
- "response": {
- "listfunds": {
- "request_type": "function",
- "response_type": "exception",
- "response": {
- "data": "test-error"
- }
- }
- }
- }
- ]
- },
- "lndrpc": {
- "rpc": [
- {
- "response": {
- "ChannelBalance": {
- "request_type": "async-function",
- "response_type": "exception",
- "response": {
- "data": "test-error"
- }
- }
- }
- }
- ]
- }
- }
- },
- {
- "description": "missing data",
- "call_params": {},
- "expect": {
- "error_message": "no data",
- "balance_msat": 0
- },
- "mocks": {
- "breez": {
- "sdk_services": []
- },
- "corelightning": {
- "ln": [
- {
- "response": {
- "listfunds": {
- "request_type": "function",
- "response_type": "json",
- "response": {}
- }
- }
- }
- ]
- },
- "lndrpc": {
- "rpc": []
- }
- }
- },
- {
- "description": "RPC call failed:",
- "call_params": {},
- "expect": {
- "error_message": "RPC 'test_method' failed with 'test-error'.",
- "balance_msat": 0
- },
- "mocks": {
- "breez": {
- "sdk_services": []
- },
- "corelightning": {
- "ln": [
- {
- "response": {
- "listfunds": {
- "request_type": "function",
- "response_type": "exception",
- "response": {
- "module": "pyln.client.lightning",
- "class": "RpcError",
- "data": {
- "method": "test_method",
- "payload": "y",
- "error": "test-error"
- }
- }
- }
- }
- }
- ]
- },
- "lndrpc": {
- "rpc": []
- }
- }
- }
- ]
+ "create_invoice": {
+ "mocks": {
+ "breez": {
+ "sdk_services": {
+ "method": "breez_sdk.connect",
+ "request_type": "function"
+ }
},
- "create_invoice": {
- "mocks": {
- "breez": {
- "sdk_services": {
- "method": "breez_sdk.connect",
- "request_type": "function"
- }
- },
- "corelightning": {
- "ln": {
- "method": "pyln.client.LightningRpc.__new__",
- "request_type": "function",
- "response_type": "data",
- "response": {
- "help": {
- "request_type": "function",
- "response_type": "json",
- "response": {
- "help": [
- {
- "command": "some command"
- }
- ]
- }
- },
- "listinvoices": {
- "request_type": "function",
- "response_type": "json",
- "response": {
- "invoices": []
- }
- }
- }
- }
- },
- "lndrpc": {
- "rpc": {
- "method": "lnbits.wallets.lnd_grpc_files.lightning_pb2_grpc.LightningStub.__new__",
- "request_type": "function",
- "response_type": "data",
- "response": {}
+ "corelightning": {
+ "ln": {
+ "method": "pyln.client.LightningRpc.__new__",
+ "request_type": "function",
+ "response_type": "data",
+ "response": {
+ "help": {
+ "request_type": "function",
+ "response_type": "json",
+ "response": {
+ "help": [
+ {
+ "command": "some command"
}
+ ]
}
- },
- "tests": [
- {
- "description": "success",
- "call_params": {
- "amount": 555,
- "memo": "Test Invoice",
- "label": "test-label"
- },
- "expect": {
- "success": true,
- "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "payment_request": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n",
- "error_message": null
- },
- "mocks": {
- "breez": {
- "sdk_services": [
- {
- "response_type": "data",
- "response": {
- "receive_payment": {
- "request_type": "function",
- "request_data": {
- "klass": "breez_sdk.ReceivePaymentRequest",
- "kwargs": {
- "amount_msat": 555000,
- "description": "Test Invoice",
- "preimage": null,
- "opening_fee_params": null,
- "use_description_hash": null
- }
- },
- "response_type": "data",
- "response": {
- "ln_invoice": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "bolt11": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
- }
- }
- }
- }
- }
- ]
- },
- "corelightning": {
- "ln": [
- {
- "description": "one channel",
- "response": {
- "invoice": {
- "request_type": "function",
- "request_data": {
- "kwargs": {
- "deschashonly": false,
- "description": "Test Invoice",
- "expiry": null,
- "exposeprivatechannels": true,
- "label": "test-label",
- "msatoshi": 555000
- }
- },
- "response_type": "json",
- "response": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "bolt11": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
- }
- }
- }
- }
- ]
- },
- "lndrpc": {
- "rpc": [
- {
- "response": {
- "AddInvoice": {
- "request_type": "async-function",
- "request_data": {
- "klass": "lnbits.wallets.lnd_grpc_files.lightning_pb2.Invoice",
- "kwargs": {
- "value": 555,
- "private": true,
- "memo": "Test Invoice"
- }
- },
- "response_type": "data",
- "response": {
- "__eval__:r_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")",
- "payment_request": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
- }
- }
- }
- }
- ]
- }
- }
- },
- {
- "description": "error",
- "call_params": {
- "amount": 555,
- "memo": "Test Invoice",
- "label": "test-label"
- },
- "expect": {
- "success": false,
- "checking_id": null,
- "payment_request": null,
- "error_message": "test-error"
- },
- "mocks": {
- "breez": {
- "sdk_services": [
- {
- "response_type": "data",
- "response": {
- "receive_payment": {
- "request_type": "function",
- "request_data": {
- "klass": "breez_sdk.ReceivePaymentRequest",
- "kwargs": {
- "amount_msat": 555000,
- "description": "Test Invoice",
- "preimage": null,
- "opening_fee_params": null,
- "use_description_hash": null
- }
- },
- "response_type": "exception",
- "response": {
- "data": "test-error"
- }
- }
- }
- }
- ]
- },
- "corelightning": {
- "ln": [
- {
- "response": {
- "invoice": {
- "request_type": "function",
- "request_data": {
- "kwargs": {
- "deschashonly": false,
- "description": "Test Invoice",
- "expiry": null,
- "exposeprivatechannels": true,
- "label": "test-label",
- "msatoshi": 555000
- }
- },
- "response_type": "exception",
- "response": {
- "data": "test-error"
- }
- }
- }
- },
- {
- "response": {
- "invoice": {
- "request_type": "function",
- "request_data": {
- "kwargs": {
- "deschashonly": false,
- "description": "Test Invoice",
- "expiry": null,
- "exposeprivatechannels": true,
- "label": "test-label",
- "msatoshi": 555000
- }
- },
- "response_type": "json",
- "response": {
- "code": -1,
- "message": "test-error"
- }
- }
- }
- }
- ]
- },
- "lndrpc": {
- "rpc": [
- {
- "response": {
- "AddInvoice": {
- "request_type": "async-function",
- "request_data": {
- "klass": "lnbits.wallets.lnd_grpc_files.lightning_pb2.Invoice",
- "kwargs": {
- "value": 555,
- "private": true,
- "memo": "Test Invoice"
- }
- },
- "response_type": "exception",
- "response": {
- "data": "test-error"
- }
- }
- }
- }
- ]
- }
- }
- },
- {
- "description": "missing data",
- "call_params": {
- "amount": 555,
- "memo": "Test Invoice",
- "label": "test-label"
- },
- "expect": {
- "success": false,
- "checking_id": null,
- "payment_request": null,
- "error_message": "Server error: 'missing required fields'"
- },
- "mocks": {
- "breez": {
- "sdk_services": []
- },
- "corelightning": {
- "ln": [
- {
- "response": {
- "invoice": {
- "request_type": "function",
- "request_data": {
- "kwargs": {
- "deschashonly": false,
- "description": "Test Invoice",
- "expiry": null,
- "exposeprivatechannels": true,
- "label": "test-label",
- "msatoshi": 555000
- }
- },
- "response_type": "json",
- "response": {}
- }
- }
- }
- ]
- }
- }
- },
- {
- "description": "rpc error",
- "call_params": {
- "amount": 555,
- "memo": "Test Invoice",
- "label": "test-label"
- },
- "expect": {
- "success": false,
- "checking_id": null,
- "payment_request": null,
- "error_message": "RPC 'test_method' failed with 'test-error'."
- },
- "mocks": {
- "breez": {
- "sdk_services": []
- },
- "corelightning": {
- "ln": [
- {
- "response": {
- "invoice": {
- "request_type": "function",
- "request_data": {
- "kwargs": {
- "deschashonly": false,
- "description": "Test Invoice",
- "expiry": null,
- "exposeprivatechannels": true,
- "label": "test-label",
- "msatoshi": 555000
- }
- },
- "response_type": "exception",
- "response": {
- "module": "pyln.client.lightning",
- "class": "RpcError",
- "data": {
- "method": "test_method",
- "payload": "y",
- "error": "test-error"
- }
- }
- }
- }
- }
- ]
- }
- }
+ },
+ "listinvoices": {
+ "request_type": "function",
+ "response_type": "json",
+ "response": {
+ "invoices": []
}
- ]
+ }
+ }
+ }
},
- "pay_invoice": {
- "mocks": {
- "breez": {
- "sdk_services": {
- "method": "breez_sdk.connect",
- "request_type": "function"
- }
- },
- "corelightning": {
- "ln": {
- "method": "pyln.client.LightningRpc.__new__",
- "request_type": "function",
- "response_type": "data",
- "response": {
- "help": {
- "request_type": "function",
- "response_type": "json",
- "response": {
- "help": [
- {
- "command": "some command"
- }
- ]
- }
- },
- "listinvoices": {
- "request_type": "function",
- "response_type": "json",
- "response": {
- "invoices": []
- }
- },
- "listpays": {
- "description": "no data, pending",
- "request_type": "function",
- "response_type": "json",
- "response": {}
- }
- }
- }
- },
- "lndrpc": {
- "rpc": {
- "method": "lnbits.wallets.lnd_grpc_files.lightning_pb2_grpc.LightningStub.__new__",
- "request_type": "function",
- "response_type": "data",
- "response": {}
- },
- "routerpc": {
- "method": "lnbits.wallets.lnd_grpc_files.router_pb2_grpc.RouterStub.__new__",
- "request_type": "function",
- "response_type": "data",
- "response": {}
- }
- }
- },
- "tests": [
- {
- "description": "success",
- "call_params": {
- "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "fee_limit_msat": 25000
- },
- "expect": {
- "error_message": null,
- "success": true,
- "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "fee_msat": 50,
- "preimage": "0000000000000000000000000000000000000000000000000000000000000000"
- },
- "mocks": {
- "breez": {
- "sdk_services": [
- {
- "response_type": "data",
- "response": {
- "send_payment": {
- "request_type": "function",
- "response_type": "data",
- "response": {
- "status": {
- "value": 2
- },
- "fee_msat": 50,
- "details": {
- "data": {
- "payment_preimage": "0000000000000000000000000000000000000000000000000000000000000000"
- }
- }
- }
- }
- }
- }
- ]
- },
- "corelightning": {
- "ln": [
- {
- "response": {
- "call": {
- "description": "indirect call to `pay` (via `call`)",
- "request_type": "function",
- "request_data": {
- "args": [
- "pay",
- {
- "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "description": "Unit Test Invoice",
- "exemptfee": 0,
- "maxfeepercent": "119.04761905"
- }
- ]
- },
- "response_type": "json",
- "response": {
- "amount_sent_msat": 21000,
- "amount_msat": 21050,
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "payment_preimage": "0000000000000000000000000000000000000000000000000000000000000000"
- }
- }
- }
- }
- ]
- },
- "lndrpc": {
- "rpc": [
- {
- "response": {}
- }
- ],
- "routerpc": [
- {
- "description": "one HTLCs",
- "response": {
- "SendPaymentV2": {
- "request_type": "function",
- "response_type": "function",
- "response": {
- "read": {
- "request_type": "async-function",
- "response_type": "data",
- "response": {
- "status": 2,
- "htlcs": [
- {
- "route": {
- "total_fees_msat": -50
- }
- }
- ],
- "payment_preimage": "0000000000000000000000000000000000000000000000000000000000000000",
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- }
- }
- }
- }
- },
- {
- "description": "two HTLCs",
- "response": {
- "SendPaymentV2": {
- "request_type": "function",
- "response_type": "function",
- "response": {
- "read": {
- "request_type": "async-function",
- "response_type": "data",
- "response": {
- "status": 2,
- "htlcs": [
- {
- "route": {
- "total_fees_msat": -100
- }
- },
- {
- "route": {
- "total_fees_msat": -50
- }
- }
- ],
- "payment_preimage": "0000000000000000000000000000000000000000000000000000000000000000",
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- }
- }
- }
- }
- }
- ]
- }
- }
- },
- {
- "description": "error",
- "call_params": {
- "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "fee_limit_msat": 25000
- },
- "expect": {
- "__eval__:error_message": "\"Payment failed: \" in \"{error_message}\"",
- "success": false,
- "checking_id": null,
- "fee_msat": null,
- "preimage": null
- },
- "mocks": {
- "breez": {
- "sdk_services": [
- {
- "response_type": "data",
- "response": {
- "send_payment": {
- "request_type": "function",
- "response_type": "exception",
- "response": {
- "data": "test-error"
- }
- }
- }
- }
- ]
- },
- "corelightning": {
- "ln": [
- {
- "description": "test-error",
- "response": {
- "call": {
- "description": "indirect call to `pay` (via `call`)",
- "request_type": "function",
- "request_data": {
- "args": [
- "pay",
- {
- "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "description": "Unit Test Invoice",
- "exemptfee": 0,
- "maxfeepercent": "119.04761905"
- }
- ]
- },
- "response_type": "exception",
- "response": {
- "data": "test-error"
- }
- }
- }
- }
- ]
- },
- "lndrpc": {
- "rpc": [
- {
- "response": {}
- }
- ],
- "routerpc": [
- {
- "description": "No error given.",
- "response": {
- "SendPaymentV2": {
- "request_type": "function",
- "response_type": "function",
- "response": {
- "read": {
- "request_type": "async-function",
- "response_type": "data",
- "response": {
- "status": 3,
- "failure_reason": 0
- }
- }
- }
- }
- }
- },
- {
- "description": "Payment timed out.",
- "response": {
- "SendPaymentV2": {
- "request_type": "function",
- "response_type": "function",
- "response": {
- "read": {
- "request_type": "async-function",
- "response_type": "data",
- "response": {
- "status": 3,
- "failure_reason": 1
- }
- }
- }
- }
- }
- },
- {
- "description": "No route to destination.",
- "response": {
- "SendPaymentV2": {
- "request_type": "function",
- "response_type": "function",
- "response": {
- "read": {
- "request_type": "async-function",
- "response_type": "data",
- "response": {
- "status": 3,
- "failure_reason": 2
- }
- }
- }
- }
- }
- },
- {
- "description": "Error.",
- "response": {
- "SendPaymentV2": {
- "request_type": "function",
- "response_type": "function",
- "response": {
- "read": {
- "request_type": "async-function",
- "response_type": "data",
- "response": {
- "status": 3,
- "failure_reason": 3
- }
- }
- }
- }
- }
- },
- {
- "description": "Incorrect payment details.",
- "response": {
- "SendPaymentV2": {
- "request_type": "function",
- "response_type": "function",
- "response": {
- "read": {
- "request_type": "async-function",
- "response_type": "data",
- "response": {
- "status": 3,
- "failure_reason": 4
- }
- }
- }
- }
- }
- },
- {
- "description": "Insufficient balance.",
- "response": {
- "SendPaymentV2": {
- "request_type": "function",
- "response_type": "function",
- "response": {
- "read": {
- "request_type": "async-function",
- "response_type": "data",
- "response": {
- "status": 3,
- "failure_reason": 5
- }
- }
- }
- }
- }
- },
- {
- "description": "RPC error.",
- "response": {
- "SendPaymentV2": {
- "request_type": "function",
- "response_type": "function",
- "response": {
- "read": {
- "request_type": "async-function",
- "response_type": "exception",
- "response": {
- "data": "Payment failed: 'rpc maybe'"
- }
- }
- }
- }
- }
- }
- ]
- }
- }
- },
- {
- "description": "missing data",
- "call_params": {
- "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "fee_limit_msat": 25000
- },
- "expect": {
- "success": false,
- "checking_id": null,
- "fee_msat": null,
- "preimage": null,
- "error_message": "Server error: 'missing required fields'"
- },
- "mocks": {
- "breez": {
- "sdk_services": []
- },
- "corelightning": {
- "ln": [
- {
- "response": {
- "call": {
- "description": "indirect call to `pay` (via `call`)",
- "request_type": "function",
- "request_data": {
- "args": [
- "pay",
- {
- "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "description": "Unit Test Invoice",
- "exemptfee": 0,
- "maxfeepercent": "119.04761905"
- }
- ]
- },
- "response_type": "json",
- "response": {}
- }
- }
- }
- ]
- },
- "lndrpc": {
- "rpc": [],
- "routerpc": []
- }
- }
- },
- {
- "description": "rpc error",
- "call_params": {
- "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "fee_limit_msat": 25000
- },
- "expect": {
- "success": false,
- "checking_id": null,
- "fee_msat": null,
- "preimage": null,
- "error_message": "RPC 'test_method' failed with 'test-error'."
- },
- "mocks": {
- "breez": {
- "sdk_services": []
- },
- "corelightning": {
- "ln": [
- {
- "response": {
- "call": {
- "description": "indirect call to `pay` (via `call`)",
- "request_type": "function",
- "request_data": {
- "args": [
- "pay",
- {
- "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "description": "Unit Test Invoice",
- "exemptfee": 0,
- "maxfeepercent": "119.04761905"
- }
- ]
- },
- "response_type": "exception",
- "response": {
- "module": "pyln.client.lightning",
- "class": "RpcError",
- "data": {
- "method": "test_method",
- "payload": "y",
- "error": {
- "attempts": [
- {
- "fail_reason": "RPC 'test_method' failed with 'test-error'."
- }
- ]
- }
- }
- }
- }
- }
- },
- {
- "response": {
- "call": {
- "description": "indirect call to `pay` (via `call`)",
- "request_type": "function",
- "request_data": {
- "args": [
- "pay",
- {
- "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
- "description": "Unit Test Invoice",
- "exemptfee": 0,
- "maxfeepercent": "119.04761905"
- }
- ]
- },
- "response_type": "exception",
- "response": {
- "module": "pyln.client.lightning",
- "class": "RpcError",
- "data": {
- "method": "test_method",
- "payload": "y",
- "error": "test-error"
- }
- }
- }
- }
- }
- ]
- }
- }
- }
- ]
- },
- "get_invoice_status": {
- "mocks": {
- "breez": {
- "sdk_services": {
- "method": "breez_sdk.connect",
- "request_type": "function"
- }
- },
- "corelightning": {
- "ln": {
- "method": "pyln.client.LightningRpc.__new__",
- "request_type": "function",
- "response_type": "data",
- "response": {
- "help": {
- "request_type": "function",
- "response_type": "json",
- "response": {
- "help": [
- {
- "command": "some command"
- }
- ]
- }
- }
- }
- }
- },
- "lndrpc": {
- "rpc": {
- "method": "lnbits.wallets.lnd_grpc_files.lightning_pb2_grpc.LightningStub.__new__",
- "request_type": "function",
- "response_type": "data",
- "response": {}
- },
- "routerpc": {
- "method": "lnbits.wallets.lnd_grpc_files.router_pb2_grpc.RouterStub.__new__",
- "request_type": "function",
- "response_type": "data",
- "response": {}
- }
- }
- },
- "tests": [
- {
- "description": "success",
- "call_params": {
- "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "expect": {
- "success": true,
- "failed": false,
- "pending": false
- },
- "mocks": {
- "breez": {
- "sdk_services": [
- {
- "response_type": "data",
- "response": {
- "payment_by_hash": {
- "request_type": "function",
- "response_type": "data",
- "response": {
- "payment_type": {
- "value": 2
- },
- "status": {
- "value": 2
- }
- }
- }
- }
- }
- ]
- },
- "corelightning": {
- "ln": [
- {
- "description": "one invoice",
- "response": {
- "listinvoices": [
- {
- "request_type": "function",
- "request_data": {
- "kwargs": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- },
- "response_type": "json",
- "response": {
- "invoices": []
- }
- },
- {
- "request_type": "function",
- "response_type": "json",
- "response": {
- "invoices": [
- {
- "status": "paid",
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- ]
- }
- }
- ]
- }
- }
- ]
- },
- "lndrpc": {
- "routerpc": [
- {
- "response": {}
- }
- ],
- "rpc": [
- {
- "response": {
- "LookupInvoice": {
- "request_type": "async-function",
- "request_data": {
- "klass": "lnbits.wallets.lnd_grpc_files.lightning_pb2.PaymentHash",
- "kwargs": {
- "__eval__:r_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
- }
- },
- "response_type": "data",
- "response": {
- "settled": true
- }
- }
- }
- }
- ]
- }
- }
- },
- {
- "description": "pending",
- "call_params": {
- "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "expect": {
- "success": false,
- "failed": false,
- "pending": true
- },
- "mocks": {
- "breez": {
- "sdk_services": [
- {
- "response_type": "data",
- "response": {
- "payment_by_hash": {
- "request_type": "function",
- "response_type": "data",
- "response": null
- }
- }
- }
- ]
- },
- "corelightning": {
- "ln": [
- {
- "description": "no invoice",
- "response": {
- "listinvoices": [
- {
- "request_type": "function",
- "request_data": {
- "kwargs": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- },
- "response_type": "json",
- "response": {
- "invoices": []
- }
- },
- {
- "request_type": "function",
- "request_data": {
- "kwargs": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- },
- "response_type": "json",
- "response": {
- "invoices": []
- }
- }
- ]
- }
- },
- {
- "description": "rpc error",
- "response": {
- "listinvoices": [
- {
- "request_type": "function",
- "request_data": {
- "kwargs": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- },
- "response_type": "json",
- "response": {
- "invoices": []
- }
- },
- {
- "request_type": "function",
- "request_data": {
- "kwargs": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- },
- "response_type": "exception",
- "response": {
- "module": "pyln.client.lightning",
- "class": "RpcError",
- "data": {
- "method": "test_method",
- "payload": "y",
- "error": "test-error"
- }
- }
- }
- ]
- }
- },
- {
- "description": "error",
- "response": {
- "listinvoices": [
- {
- "request_type": "function",
- "request_data": {
- "kwargs": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- },
- "response_type": "json",
- "response": {
- "invoices": []
- }
- },
- {
- "request_type": "function",
- "request_data": {
- "kwargs": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- },
- "response_type": "exception",
- "response": {
- "data": "test-error"
- }
- }
- ]
- }
- },
- {
- "description": "no data",
- "response": {
- "listinvoices": [
- {
- "request_type": "function",
- "request_data": {
- "kwargs": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- },
- "response_type": "json",
- "response": {
- "invoices": []
- }
- },
- {
- "request_type": "function",
- "request_data": {
- "kwargs": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- },
- "response_type": "json",
- "response": {}
- }
- ]
- }
- },
- {
- "description": "bad checking_id",
- "response": {
- "listinvoices": [
- {
- "request_type": "function",
- "request_data": {
- "kwargs": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- },
- "response_type": "json",
- "response": {
- "invoices": []
- }
- },
- {
- "request_type": "function",
- "request_data": {
- "kwargs": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- },
- "response_type": "json",
- "response": {
- "invoices": [
- {
- "status": "paid",
- "payment_hash": "baaade35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d72"
- }
- ]
- }
- }
- ]
- }
- },
- {
- "description": "unpaid",
- "response": {
- "listinvoices": [
- {
- "request_type": "function",
- "request_data": {
- "kwargs": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- },
- "response_type": "json",
- "response": {
- "invoices": []
- }
- },
- {
- "request_type": "function",
- "request_data": {
- "kwargs": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- },
- "response_type": "json",
- "response": {
- "invoices": [
- {
- "status": "unpaid",
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- ]
- }
- }
- ]
- }
- }
- ]
- },
- "lndrpc": {
- "routerpc": [
- {
- "response": {}
- }
- ],
- "rpc": [
- {
- "description": "not settled",
- "response": {
- "LookupInvoice": {
- "request_type": "async-function",
- "request_data": {
- "klass": "lnbits.wallets.lnd_grpc_files.lightning_pb2.PaymentHash",
- "kwargs": {
- "__eval__:r_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
- }
- },
- "response_type": "data",
- "response": {
- "settled": false
- }
- }
- }
- },
- {
- "description": "rpc error",
- "response": {
- "LookupInvoice": {
- "request_type": "async-function",
- "request_data": {
- "klass": "lnbits.wallets.lnd_grpc_files.lightning_pb2.PaymentHash",
- "kwargs": {
- "__eval__:r_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
- }
- },
- "response_type": "exception",
- "response": {
- "module": "grpc",
- "class": "RpcError",
- "data": {}
- }
- }
- }
- },
- {
- "description": "rpc error",
- "response": {
- "LookupInvoice": {
- "request_type": "async-function",
- "request_data": {
- "klass": "lnbits.wallets.lnd_grpc_files.lightning_pb2.PaymentHash",
- "kwargs": {
- "__eval__:r_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
- }
- },
- "response_type": "exception",
- "response": {
- "data": "test-error"
- }
- }
- }
- }
- ]
- }
- }
- },
- {
- "description": "pending - incorrect checking_id",
- "call_params": {
- "checking_id": "e35526a43d04e985594c0dfab848814f"
- },
- "expect": {
- "success": false,
- "failed": false,
- "pending": true
- },
- "mocks": {
- "breez": {
- "sdk_services": [
- {
- "response_type": "data",
- "response": {
- "payment_by_hash": {
- "request_type": "function",
- "response_type": "data",
- "response": null
- }
- }
- }
- ]
- },
- "corelightning": {
- "ln": [
- {
- "description": "validation should be added",
- "response": {
- "listinvoices": [
- {
- "request_type": "function",
- "request_data": {
- "kwargs": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f"
- }
- },
- "response_type": "json",
- "response": {
- "invoices": []
- }
- }
- ]
- }
- }
- ]
- },
- "lndrpc": {
- "routerpc": [
- {
- "response": {}
- }
- ],
- "rpc": [
- {
- "response": {}
- }
- ]
- }
- }
- },
- {
- "description": "failed",
- "description1": "pending should be false in the 'expect', this is a bug",
- "call_params": {
- "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "expect": {
- "success": false,
- "failed": true,
- "pending": true
- },
- "mocks": {
- "breez": {
- "sdk_services": [
- {
- "description": "FAILED",
- "response_type": "data",
- "response": {
- "payment_by_hash": {
- "request_type": "function",
- "response_type": "data",
- "response": {
- "payment_type": {
- "value": 2
- },
- "status": {
- "value": 1
- }
- }
- }
- }
- }
- ]
- },
- "corelightning": {
- "ln": [
- {
- "description": "expired",
- "response": {
- "listinvoices": [
- {
- "request_type": "function",
- "request_data": {
- "kwargs": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- },
- "response_type": "json",
- "response": {
- "invoices": []
- }
- },
- {
- "request_type": "function",
- "request_data": {
- "kwargs": {
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- },
- "response_type": "json",
- "response": {
- "invoices": [
- {
- "status": "expired",
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- ]
- }
- }
- ]
- }
- }
- ]
- },
- "lndrpc": {
- "routerpc": [],
- "rpc": []
- }
- }
- }
- ]
- },
- "get_payment_status": {
- "mocks": {
- "breez": {
- "sdk_services": {
- "method": "breez_sdk.connect",
- "request_type": "function"
- }
- },
- "corelightning": {
- "ln": {
- "method": "pyln.client.LightningRpc.__new__",
- "request_type": "function",
- "response_type": "data",
- "response": {
- "help": {
- "request_type": "function",
- "response_type": "json",
- "response": {
- "help": [
- {
- "command": "some command"
- }
- ]
- }
- },
- "listinvoices": {
- "request_type": "function",
- "response_type": "json",
- "response": {
- "invoices": []
- }
- }
- }
- }
- },
- "lndrpc": {
- "rpc": {
- "method": "lnbits.wallets.lnd_grpc_files.lightning_pb2_grpc.LightningStub.__new__",
- "request_type": "function",
- "response_type": "data",
- "response": {}
- },
- "routerpc": {
- "method": "lnbits.wallets.lnd_grpc_files.router_pb2_grpc.RouterStub.__new__",
- "request_type": "function",
- "response_type": "data",
- "response": {}
- }
- }
- },
- "tests": [
- {
- "description": "success",
- "call_params": {
- "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "expect": {
- "success": true,
- "failed": false,
- "pending": false,
- "fee_msat": 50,
- "preimage": "0000000000000000000000000000000000000000000000000000000000000000"
- },
- "mocks": {
- "breez": {
- "sdk_services": [
- {
- "response_type": "data",
- "response": {
- "payment_by_hash": {
- "request_type": "function",
- "response_type": "data",
- "response": {
- "fee_msat": 50,
- "details": {
- "data": {
- "payment_preimage": "0000000000000000000000000000000000000000000000000000000000000000"
- }
- },
- "payment_type": {
- "value": 1
- },
- "status": {
- "value": 2
- }
- }
- }
- }
- }
- ]
- },
- "corelightning": {
- "ln": [
- {
- "response": {
- "listpays": [
- {
- "request_type": "function",
- "response_type": "json",
- "response": {
- "pays": [
- {
- "status": "complete",
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
- "preimage": "0000000000000000000000000000000000000000000000000000000000000000",
- "amount_sent_msat": 21000,
- "amount_msat": 21050
- }
- ]
- }
- }
- ]
- }
- }
- ]
- },
- "lndrpc": {
- "rpc": [
- {
- "response": {}
- }
- ],
- "routerpc": [
- {
- "description": "two HTLC",
- "response": {
- "TrackPaymentV2": {
- "request_type": "function",
- "request_data": {
- "klass": "lnbits.wallets.lnd_grpc_files.router_pb2.TrackPaymentRequest",
- "kwargs": {
- "__eval__:payment_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
- }
- },
- "response_type": "__aiter__",
- "response": [
- {
- "status": 2,
- "htlcs": [
- {
- "route": {
- "total_fees_msat": -100
- },
- "preimage": "0000000000000000000000000000000000000000000000000000000000000000"
- },
- {
- "route": {
- "total_fees_msat": -50
- },
- "__eval__:preimage": "bytes.fromhex(\"0000000000000000000000000000000000000000000000000000000000000000\")"
- }
- ]
- }
- ]
- }
- }
- }
- ]
- }
- }
- },
- {
- "description": "success status, no payment found",
- "call_params": {
- "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "expect": {
- "success": true,
- "failed": false,
- "pending": false,
- "fee_msat": null,
- "preimage": null
- },
- "mocks": {
- "breez": {},
- "corelightning": {},
- "lndrpc": {
- "rpc": [
- {
- "response": {}
- }
- ],
- "routerpc": [
- {
- "description": "two HTLC",
- "response": {
- "TrackPaymentV2": {
- "request_type": "function",
- "request_data": {
- "klass": "lnbits.wallets.lnd_grpc_files.router_pb2.TrackPaymentRequest",
- "kwargs": {
- "__eval__:payment_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
- }
- },
- "response_type": "__aiter__",
- "response": [
- {
- "status": 2,
- "htlcs": []
- }
- ]
- }
- }
- }
- ]
- }
- }
- },
- {
- "description": "pending",
- "call_params": {
- "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "expect": {
- "success": false,
- "failed": false,
- "pending": true,
- "fee_msat": null
- },
- "mocks": {
- "breez": {
- "sdk_services": [
- {
- "description": "no data",
- "response_type": "data",
- "response": {
- "payment_by_hash": {
- "request_type": "function",
- "response_type": "data",
- "response": null
- }
- }
- },
- {
- "description": "error",
- "response_type": "data",
- "response": {
- "payment_by_hash": {
- "request_type": "function",
- "response_type": "exception",
- "response": {
- "data": "test-error"
- }
- }
- }
- },
- {
- "description": "pending",
- "response_type": "data",
- "response": {
- "payment_by_hash": {
- "request_type": "function",
- "response_type": "data",
- "response": {
- "status": {
- "value": 1
- },
- "payment_type": {
- "value": 1
- }
- }
- }
- }
- }
- ]
- },
- "corelightning": {
- "ln": [
- {
- "response": {
- "listpays": [
- {
- "description": "no data",
- "request_type": "function",
- "response_type": "json",
- "response": {}
- }
- ]
- }
- },
- {
- "description": "error",
- "response_type": "data",
- "response": {
- "listpays": {
- "request_type": "function",
- "response_type": "exception",
- "response": {
- "data": "test-error"
- }
- }
- }
- },
- {
- "response": {
- "listpays": [
- {
- "description": "pending status",
- "request_type": "function",
- "response_type": "json",
- "response": {
- "pays": [
- {
- "status": "pending",
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- ]
- }
- }
- ]
- }
- },
- {
- "response": {
- "listpays": [
- {
- "description": "bad checking_id",
- "request_type": "function",
- "response_type": "json",
- "response": {
- "pays": [
- {
- "status": "complete",
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d7bbbbbb"
- }
- ]
- }
- }
- ]
- }
- }
- ]
- },
- "lndrpc": {
- "rpc": [
- {
- "response": {}
- }
- ],
- "routerpc": [
- {
- "description": "no HTLC",
- "response": {
- "TrackPaymentV2": {
- "request_type": "function",
- "request_data": {
- "klass": "lnbits.wallets.lnd_grpc_files.router_pb2.TrackPaymentRequest",
- "kwargs": {
- "__eval__:payment_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
- }
- },
- "response_type": "__aiter__",
- "response": [
- {
- "status": 0,
- "htlcs": []
- }
- ]
- }
- }
- },
- {
- "description": "no payments",
- "response": {
- "TrackPaymentV2": {
- "request_type": "function",
- "request_data": {
- "klass": "lnbits.wallets.lnd_grpc_files.router_pb2.TrackPaymentRequest",
- "kwargs": {
- "__eval__:payment_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
- }
- },
- "response_type": "__aiter__",
- "response": []
- }
- }
- },
- {
- "description": "no status",
- "response": {
- "TrackPaymentV2": {
- "request_type": "function",
- "request_data": {
- "klass": "lnbits.wallets.lnd_grpc_files.router_pb2.TrackPaymentRequest",
- "kwargs": {
- "__eval__:payment_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
- }
- },
- "response_type": "__aiter__",
- "response": [
- {}
- ]
- }
- }
- },
- {
- "description": "status: non-existend",
- "response": {
- "TrackPaymentV2": {
- "request_type": "function",
- "request_data": {
- "klass": "lnbits.wallets.lnd_grpc_files.router_pb2.TrackPaymentRequest",
- "kwargs": {
- "__eval__:payment_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
- }
- },
- "response_type": "__aiter__",
- "response": [
- {
- "status": 0,
- "htlcs": [
- {
- "route": {
- "total_fees_msat": -50
- },
- "__eval__:preimage": "bytes.fromhex(\"0000000000000000000000000000000000000000000000000000000000000000\")"
- }
- ]
- }
- ]
- }
- }
- },
- {
- "description": "status: in-flight",
- "response": {
- "TrackPaymentV2": {
- "request_type": "function",
- "request_data": {
- "klass": "lnbits.wallets.lnd_grpc_files.router_pb2.TrackPaymentRequest",
- "kwargs": {
- "__eval__:payment_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
- }
- },
- "response_type": "__aiter__",
- "response": [
- {
- "status": 1,
- "htlcs": [
- {
- "route": {
- "total_fees_msat": -50
- },
- "__eval__:preimage": "bytes.fromhex(\"0000000000000000000000000000000000000000000000000000000000000000\")"
- }
- ]
- }
- ]
- }
- }
- },
- {
- "description": "status: unknown",
- "response": {
- "TrackPaymentV2": {
- "request_type": "function",
- "request_data": {
- "klass": "lnbits.wallets.lnd_grpc_files.router_pb2.TrackPaymentRequest",
- "kwargs": {
- "__eval__:payment_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
- }
- },
- "response_type": "__aiter__",
- "response": [
- {
- "status": 999,
- "htlcs": [
- {
- "route": {
- "total_fees_msat": -50
- },
- "__eval__:preimage": "bytes.fromhex(\"0000000000000000000000000000000000000000000000000000000000000000\")"
- }
- ]
- }
- ]
- }
- }
- },
- {
- "description": "raise error",
- "response": {
- "TrackPaymentV2": {
- "request_type": "function",
- "request_data": {
- "klass": "lnbits.wallets.lnd_grpc_files.router_pb2.TrackPaymentRequest",
- "kwargs": {
- "__eval__:payment_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
- }
- },
- "response_type": "exception",
- "response": {
- "data": "test-error"
- }
- }
- }
- }
- ]
- }
- }
- },
- {
- "description": "pending - incorrect checking_id",
- "call_params": {
- "checking_id": "e35526a43d04e985594c0dfab848814f"
- },
- "expect": {
- "success": false,
- "failed": false,
- "pending": true,
- "fee_msat": null
- },
- "mocks": {
- "breez": {},
- "corelightning": {
- "ln": [
- {
- "response": {
- "listpays": [
- {
- "description": "no data",
- "request_type": "function",
- "response_type": "json",
- "response": {}
- }
- ]
- }
- }
- ]
- },
- "lndrpc": {
- "rpc": [
- {
- "response": {}
- }
- ],
- "routerpc": [
- {
- "description": "no HTLC",
- "response": {}
- }
- ]
- }
- }
- },
- {
- "description": "failed",
- "description1": "pending should be false in the 'expect', this is a bug",
- "call_params": {
- "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- },
- "expect": {
- "success": false,
- "failed": true,
- "pending": true,
- "fee_msat": null,
- "preimage": null
- },
- "mocks": {
- "breez": {
- "sdk_services": [
- {
- "description": "failed status",
- "response_type": "data",
- "response": {
- "payment_by_hash": {
- "request_type": "function",
- "response_type": "data",
- "response": {
- "status": {
- "value": 3
- },
- "payment_type": {
- "value": 1
- }
- }
- }
- }
- }
- ]
- },
- "corelightning": {
- "ln": [
- {
- "response": {
- "listpays": [
- {
- "request_type": "function",
- "response_type": "json",
- "response": {
- "pays": [
- {
- "status": "failed",
- "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
- }
- ]
- }
- }
- ]
- }
- }
- ]
- },
- "lndrpc": {
- "rpc": [
- {
- "response": {}
- }
- ],
- "routerpc": [
- {
- "description": "two HTLC",
- "response": {
- "TrackPaymentV2": {
- "request_type": "function",
- "request_data": {
- "klass": "lnbits.wallets.lnd_grpc_files.router_pb2.TrackPaymentRequest",
- "kwargs": {
- "__eval__:payment_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
- }
- },
- "response_type": "__aiter__",
- "response": [
- {
- "status": 3,
- "htlcs": []
- }
- ]
- }
- }
- }
- ]
- }
- }
- }
- ]
+ "lndrpc": {
+ "rpc": {
+ "method": "lnbits.wallets.lnd_grpc_files.lightning_pb2_grpc.LightningStub.__new__",
+ "request_type": "function",
+ "response_type": "data",
+ "response": {}
+ }
}
+ },
+ "tests": [
+ {
+ "description": "success",
+ "call_params": {
+ "amount": 555,
+ "memo": "Test Invoice",
+ "label": "test-label"
+ },
+ "expect": {
+ "success": true,
+ "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "payment_request": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n",
+ "error_message": null
+ },
+ "mocks": {
+ "breez": {
+ "sdk_services": [
+ {
+ "response_type": "data",
+ "response": {
+ "receive_payment": {
+ "request_type": "function",
+ "request_data": {
+ "klass": "breez_sdk.ReceivePaymentRequest",
+ "kwargs": {
+ "amount_msat": 555000,
+ "description": "Test Invoice",
+ "preimage": null,
+ "opening_fee_params": null,
+ "use_description_hash": null
+ }
+ },
+ "response_type": "data",
+ "response": {
+ "ln_invoice": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "bolt11": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "corelightning": {
+ "ln": [
+ {
+ "description": "one channel",
+ "response": {
+ "invoice": {
+ "request_type": "function",
+ "request_data": {
+ "kwargs": {
+ "deschashonly": false,
+ "description": "Test Invoice",
+ "expiry": null,
+ "exposeprivatechannels": true,
+ "label": "test-label",
+ "msatoshi": 555000
+ }
+ },
+ "response_type": "json",
+ "response": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "bolt11": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
+ }
+ }
+ }
+ }
+ ]
+ },
+ "lndrpc": {
+ "rpc": [
+ {
+ "response": {
+ "AddInvoice": {
+ "request_type": "async-function",
+ "request_data": {
+ "klass": "lnbits.wallets.lnd_grpc_files.lightning_pb2.Invoice",
+ "kwargs": {
+ "value": 555,
+ "private": true,
+ "memo": "Test Invoice"
+ }
+ },
+ "response_type": "data",
+ "response": {
+ "__eval__:r_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")",
+ "payment_request": "lnbc5550n1pnq9jg3sp52rvwstvjcypjsaenzdh0h30jazvzsf8aaye0julprtth9kysxtuspp5e5s3z7felv4t9zrcc6wpn7ehvjl5yzewanzl5crljdl3jgeffyhqdq2f38xy6t5wvxqzjccqpjrzjq0yzeq76ney45hmjlnlpvu0nakzy2g35hqh0dujq8ujdpr2e42pf2rrs6vqpgcsqqqqqqqqqqqqqqeqqyg9qxpqysgqwftcx89k5pp28435pgxfl2vx3ksemzxccppw2j9yjn0ngr6ed7wj8ztc0d5kmt2mvzdlcgrludhz7jncd5l5l9w820hc4clpwhtqj3gq62g66n"
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "error",
+ "call_params": {
+ "amount": 555,
+ "memo": "Test Invoice",
+ "label": "test-label"
+ },
+ "expect": {
+ "success": false,
+ "checking_id": null,
+ "payment_request": null,
+ "error_message": "test-error"
+ },
+ "mocks": {
+ "breez": {
+ "sdk_services": [
+ {
+ "response_type": "data",
+ "response": {
+ "receive_payment": {
+ "request_type": "function",
+ "request_data": {
+ "klass": "breez_sdk.ReceivePaymentRequest",
+ "kwargs": {
+ "amount_msat": 555000,
+ "description": "Test Invoice",
+ "preimage": null,
+ "opening_fee_params": null,
+ "use_description_hash": null
+ }
+ },
+ "response_type": "exception",
+ "response": {
+ "data": "test-error"
+ }
+ }
+ }
+ }
+ ]
+ },
+ "corelightning": {
+ "ln": [
+ {
+ "response": {
+ "invoice": {
+ "request_type": "function",
+ "request_data": {
+ "kwargs": {
+ "deschashonly": false,
+ "description": "Test Invoice",
+ "expiry": null,
+ "exposeprivatechannels": true,
+ "label": "test-label",
+ "msatoshi": 555000
+ }
+ },
+ "response_type": "exception",
+ "response": {
+ "data": "test-error"
+ }
+ }
+ }
+ },
+ {
+ "response": {
+ "invoice": {
+ "request_type": "function",
+ "request_data": {
+ "kwargs": {
+ "deschashonly": false,
+ "description": "Test Invoice",
+ "expiry": null,
+ "exposeprivatechannels": true,
+ "label": "test-label",
+ "msatoshi": 555000
+ }
+ },
+ "response_type": "json",
+ "response": {
+ "code": -1,
+ "message": "test-error"
+ }
+ }
+ }
+ }
+ ]
+ },
+ "lndrpc": {
+ "rpc": [
+ {
+ "response": {
+ "AddInvoice": {
+ "request_type": "async-function",
+ "request_data": {
+ "klass": "lnbits.wallets.lnd_grpc_files.lightning_pb2.Invoice",
+ "kwargs": {
+ "value": 555,
+ "private": true,
+ "memo": "Test Invoice"
+ }
+ },
+ "response_type": "exception",
+ "response": {
+ "data": "test-error"
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "missing data",
+ "call_params": {
+ "amount": 555,
+ "memo": "Test Invoice",
+ "label": "test-label"
+ },
+ "expect": {
+ "success": false,
+ "checking_id": null,
+ "payment_request": null,
+ "error_message": "Server error: 'missing required fields'"
+ },
+ "mocks": {
+ "breez": {
+ "sdk_services": []
+ },
+ "corelightning": {
+ "ln": [
+ {
+ "response": {
+ "invoice": {
+ "request_type": "function",
+ "request_data": {
+ "kwargs": {
+ "deschashonly": false,
+ "description": "Test Invoice",
+ "expiry": null,
+ "exposeprivatechannels": true,
+ "label": "test-label",
+ "msatoshi": 555000
+ }
+ },
+ "response_type": "json",
+ "response": {}
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "rpc error",
+ "call_params": {
+ "amount": 555,
+ "memo": "Test Invoice",
+ "label": "test-label"
+ },
+ "expect": {
+ "success": false,
+ "checking_id": null,
+ "payment_request": null,
+ "error_message": "RPC 'test_method' failed with 'test-error'."
+ },
+ "mocks": {
+ "breez": {
+ "sdk_services": []
+ },
+ "corelightning": {
+ "ln": [
+ {
+ "response": {
+ "invoice": {
+ "request_type": "function",
+ "request_data": {
+ "kwargs": {
+ "deschashonly": false,
+ "description": "Test Invoice",
+ "expiry": null,
+ "exposeprivatechannels": true,
+ "label": "test-label",
+ "msatoshi": 555000
+ }
+ },
+ "response_type": "exception",
+ "response": {
+ "module": "pyln.client.lightning",
+ "class": "RpcError",
+ "data": {
+ "method": "test_method",
+ "payload": "y",
+ "error": "test-error"
+ }
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+ },
+ "pay_invoice": {
+ "mocks": {
+ "breez": {
+ "sdk_services": {
+ "method": "breez_sdk.connect",
+ "request_type": "function"
+ }
+ },
+ "corelightning": {
+ "ln": {
+ "method": "pyln.client.LightningRpc.__new__",
+ "request_type": "function",
+ "response_type": "data",
+ "response": {
+ "help": {
+ "request_type": "function",
+ "response_type": "json",
+ "response": {
+ "help": [
+ {
+ "command": "some command"
+ }
+ ]
+ }
+ },
+ "listinvoices": {
+ "request_type": "function",
+ "response_type": "json",
+ "response": {
+ "invoices": []
+ }
+ },
+ "listpays": {
+ "description": "no data, pending",
+ "request_type": "function",
+ "response_type": "json",
+ "response": {}
+ }
+ }
+ }
+ },
+ "lndrpc": {
+ "rpc": {
+ "method": "lnbits.wallets.lnd_grpc_files.lightning_pb2_grpc.LightningStub.__new__",
+ "request_type": "function",
+ "response_type": "data",
+ "response": {}
+ },
+ "routerpc": {
+ "method": "lnbits.wallets.lnd_grpc_files.router_pb2_grpc.RouterStub.__new__",
+ "request_type": "function",
+ "response_type": "data",
+ "response": {}
+ }
+ }
+ },
+ "tests": [
+ {
+ "description": "success",
+ "call_params": {
+ "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "fee_limit_msat": 25000
+ },
+ "expect": {
+ "error_message": null,
+ "success": true,
+ "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "fee_msat": 50,
+ "preimage": "0000000000000000000000000000000000000000000000000000000000000000"
+ },
+ "mocks": {
+ "breez": {
+ "sdk_services": [
+ {
+ "response_type": "data",
+ "response": {
+ "send_payment": {
+ "request_type": "function",
+ "response_type": "data",
+ "response": {
+ "status": {
+ "value": 2
+ },
+ "fee_msat": 50,
+ "details": {
+ "data": {
+ "payment_preimage": "0000000000000000000000000000000000000000000000000000000000000000"
+ }
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "corelightning": {
+ "ln": [
+ {
+ "response": {
+ "call": {
+ "description": "indirect call to `pay` (via `call`)",
+ "request_type": "function",
+ "request_data": {
+ "args": [
+ "pay",
+ {
+ "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "description": "Unit Test Invoice",
+ "exemptfee": 0,
+ "maxfeepercent": "119.04761905"
+ }
+ ]
+ },
+ "response_type": "json",
+ "response": {
+ "amount_sent_msat": 21000,
+ "amount_msat": 21050,
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "payment_preimage": "0000000000000000000000000000000000000000000000000000000000000000"
+ }
+ }
+ }
+ }
+ ]
+ },
+ "lndrpc": {
+ "rpc": [
+ {
+ "response": {}
+ }
+ ],
+ "routerpc": [
+ {
+ "description": "one HTLCs",
+ "response": {
+ "SendPaymentV2": {
+ "request_type": "function",
+ "response_type": "function",
+ "response": {
+ "read": {
+ "request_type": "async-function",
+ "response_type": "data",
+ "response": {
+ "status": 2,
+ "htlcs": [
+ {
+ "route": {
+ "total_fees_msat": -50
+ }
+ }
+ ],
+ "payment_preimage": "0000000000000000000000000000000000000000000000000000000000000000",
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ }
+ }
+ }
+ }
+ },
+ {
+ "description": "two HTLCs",
+ "response": {
+ "SendPaymentV2": {
+ "request_type": "function",
+ "response_type": "function",
+ "response": {
+ "read": {
+ "request_type": "async-function",
+ "response_type": "data",
+ "response": {
+ "status": 2,
+ "htlcs": [
+ {
+ "route": {
+ "total_fees_msat": -100
+ }
+ },
+ {
+ "route": {
+ "total_fees_msat": -50
+ }
+ }
+ ],
+ "payment_preimage": "0000000000000000000000000000000000000000000000000000000000000000",
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ }
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "error",
+ "call_params": {
+ "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "fee_limit_msat": 25000
+ },
+ "expect": {
+ "__eval__:error_message": "\"Payment failed: \" in \"{error_message}\"",
+ "success": false,
+ "checking_id": null,
+ "fee_msat": null,
+ "preimage": null
+ },
+ "mocks": {
+ "breez": {
+ "sdk_services": [
+ {
+ "response_type": "data",
+ "response": {
+ "send_payment": {
+ "request_type": "function",
+ "response_type": "exception",
+ "response": {
+ "data": "test-error"
+ }
+ }
+ }
+ }
+ ]
+ },
+ "corelightning": {
+ "ln": [
+ {
+ "description": "test-error",
+ "response": {
+ "call": {
+ "description": "indirect call to `pay` (via `call`)",
+ "request_type": "function",
+ "request_data": {
+ "args": [
+ "pay",
+ {
+ "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "description": "Unit Test Invoice",
+ "exemptfee": 0,
+ "maxfeepercent": "119.04761905"
+ }
+ ]
+ },
+ "response_type": "exception",
+ "response": {
+ "data": "test-error"
+ }
+ }
+ }
+ }
+ ]
+ },
+ "lndrpc": {
+ "rpc": [
+ {
+ "response": {}
+ }
+ ],
+ "routerpc": [
+ {
+ "description": "No error given.",
+ "response": {
+ "SendPaymentV2": {
+ "request_type": "function",
+ "response_type": "function",
+ "response": {
+ "read": {
+ "request_type": "async-function",
+ "response_type": "data",
+ "response": {
+ "status": 3,
+ "failure_reason": 0
+ }
+ }
+ }
+ }
+ }
+ },
+ {
+ "description": "Payment timed out.",
+ "response": {
+ "SendPaymentV2": {
+ "request_type": "function",
+ "response_type": "function",
+ "response": {
+ "read": {
+ "request_type": "async-function",
+ "response_type": "data",
+ "response": {
+ "status": 3,
+ "failure_reason": 1
+ }
+ }
+ }
+ }
+ }
+ },
+ {
+ "description": "No route to destination.",
+ "response": {
+ "SendPaymentV2": {
+ "request_type": "function",
+ "response_type": "function",
+ "response": {
+ "read": {
+ "request_type": "async-function",
+ "response_type": "data",
+ "response": {
+ "status": 3,
+ "failure_reason": 2
+ }
+ }
+ }
+ }
+ }
+ },
+ {
+ "description": "Error.",
+ "response": {
+ "SendPaymentV2": {
+ "request_type": "function",
+ "response_type": "function",
+ "response": {
+ "read": {
+ "request_type": "async-function",
+ "response_type": "data",
+ "response": {
+ "status": 3,
+ "failure_reason": 3
+ }
+ }
+ }
+ }
+ }
+ },
+ {
+ "description": "Incorrect payment details.",
+ "response": {
+ "SendPaymentV2": {
+ "request_type": "function",
+ "response_type": "function",
+ "response": {
+ "read": {
+ "request_type": "async-function",
+ "response_type": "data",
+ "response": {
+ "status": 3,
+ "failure_reason": 4
+ }
+ }
+ }
+ }
+ }
+ },
+ {
+ "description": "Insufficient balance.",
+ "response": {
+ "SendPaymentV2": {
+ "request_type": "function",
+ "response_type": "function",
+ "response": {
+ "read": {
+ "request_type": "async-function",
+ "response_type": "data",
+ "response": {
+ "status": 3,
+ "failure_reason": 5
+ }
+ }
+ }
+ }
+ }
+ },
+ {
+ "description": "RPC error.",
+ "response": {
+ "SendPaymentV2": {
+ "request_type": "function",
+ "response_type": "function",
+ "response": {
+ "read": {
+ "request_type": "async-function",
+ "response_type": "exception",
+ "response": {
+ "data": "Payment failed: 'rpc maybe'"
+ }
+ }
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "missing data",
+ "call_params": {
+ "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "fee_limit_msat": 25000
+ },
+ "expect": {
+ "success": false,
+ "checking_id": null,
+ "fee_msat": null,
+ "preimage": null,
+ "error_message": "Server error: 'missing required fields'"
+ },
+ "mocks": {
+ "breez": {
+ "sdk_services": []
+ },
+ "corelightning": {
+ "ln": [
+ {
+ "response": {
+ "call": {
+ "description": "indirect call to `pay` (via `call`)",
+ "request_type": "function",
+ "request_data": {
+ "args": [
+ "pay",
+ {
+ "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "description": "Unit Test Invoice",
+ "exemptfee": 0,
+ "maxfeepercent": "119.04761905"
+ }
+ ]
+ },
+ "response_type": "json",
+ "response": {}
+ }
+ }
+ }
+ ]
+ },
+ "lndrpc": {
+ "rpc": [],
+ "routerpc": []
+ }
+ }
+ },
+ {
+ "description": "rpc error",
+ "call_params": {
+ "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "fee_limit_msat": 25000
+ },
+ "expect": {
+ "success": false,
+ "checking_id": null,
+ "fee_msat": null,
+ "preimage": null,
+ "error_message": "RPC 'test_method' failed with 'test-error'."
+ },
+ "mocks": {
+ "breez": {
+ "sdk_services": []
+ },
+ "corelightning": {
+ "ln": [
+ {
+ "response": {
+ "call": {
+ "description": "indirect call to `pay` (via `call`)",
+ "request_type": "function",
+ "request_data": {
+ "args": [
+ "pay",
+ {
+ "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "description": "Unit Test Invoice",
+ "exemptfee": 0,
+ "maxfeepercent": "119.04761905"
+ }
+ ]
+ },
+ "response_type": "exception",
+ "response": {
+ "module": "pyln.client.lightning",
+ "class": "RpcError",
+ "data": {
+ "method": "test_method",
+ "payload": "y",
+ "error": {
+ "attempts": [
+ {
+ "fail_reason": "RPC 'test_method' failed with 'test-error'."
+ }
+ ]
+ }
+ }
+ }
+ }
+ }
+ },
+ {
+ "response": {
+ "call": {
+ "description": "indirect call to `pay` (via `call`)",
+ "request_type": "function",
+ "request_data": {
+ "args": [
+ "pay",
+ {
+ "bolt11": "lnbc210n1pjlgal5sp5xr3uwlfm7ltumdjyukhys0z2rw6grgm8me9k4w9vn05zt9svzzjspp5ud2jdfpaqn5c2k2vphatsjypfafyk8rcvkvwexnrhmwm94ex4jtqdqu24hxjapq23jhxapqf9h8vmmfvdjscqpjrzjqta942048v7qxh5x7pxwplhmtwfl0f25cq23jh87rhx7lgrwwvv86r90guqqnwgqqqqqqqqqqqqqqpsqyg9qxpqysgqylngsyg960lltngzy90e8n22v4j2hvjs4l4ttuy79qqefjv8q87q9ft7uhwdjakvnsgk44qyhalv6ust54x98whl3q635hkwgsyw8xgqjl7jwu",
+ "description": "Unit Test Invoice",
+ "exemptfee": 0,
+ "maxfeepercent": "119.04761905"
+ }
+ ]
+ },
+ "response_type": "exception",
+ "response": {
+ "module": "pyln.client.lightning",
+ "class": "RpcError",
+ "data": {
+ "method": "test_method",
+ "payload": "y",
+ "error": "test-error"
+ }
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+ },
+ "get_invoice_status": {
+ "mocks": {
+ "breez": {
+ "sdk_services": {
+ "method": "breez_sdk.connect",
+ "request_type": "function"
+ }
+ },
+ "corelightning": {
+ "ln": {
+ "method": "pyln.client.LightningRpc.__new__",
+ "request_type": "function",
+ "response_type": "data",
+ "response": {
+ "help": {
+ "request_type": "function",
+ "response_type": "json",
+ "response": {
+ "help": [
+ {
+ "command": "some command"
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "lndrpc": {
+ "rpc": {
+ "method": "lnbits.wallets.lnd_grpc_files.lightning_pb2_grpc.LightningStub.__new__",
+ "request_type": "function",
+ "response_type": "data",
+ "response": {}
+ },
+ "routerpc": {
+ "method": "lnbits.wallets.lnd_grpc_files.router_pb2_grpc.RouterStub.__new__",
+ "request_type": "function",
+ "response_type": "data",
+ "response": {}
+ }
+ }
+ },
+ "tests": [
+ {
+ "description": "success",
+ "call_params": {
+ "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "expect": {
+ "success": true,
+ "failed": false,
+ "pending": false
+ },
+ "mocks": {
+ "breez": {
+ "sdk_services": [
+ {
+ "response_type": "data",
+ "response": {
+ "payment_by_hash": {
+ "request_type": "function",
+ "response_type": "data",
+ "response": {
+ "payment_type": {
+ "value": 2
+ },
+ "status": {
+ "value": 2
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "corelightning": {
+ "ln": [
+ {
+ "description": "one invoice",
+ "response": {
+ "listinvoices": [
+ {
+ "request_type": "function",
+ "request_data": {
+ "kwargs": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ },
+ "response_type": "json",
+ "response": {
+ "invoices": []
+ }
+ },
+ {
+ "request_type": "function",
+ "response_type": "json",
+ "response": {
+ "invoices": [
+ {
+ "status": "paid",
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "lndrpc": {
+ "routerpc": [
+ {
+ "response": {}
+ }
+ ],
+ "rpc": [
+ {
+ "response": {
+ "LookupInvoice": {
+ "request_type": "async-function",
+ "request_data": {
+ "klass": "lnbits.wallets.lnd_grpc_files.lightning_pb2.PaymentHash",
+ "kwargs": {
+ "__eval__:r_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
+ }
+ },
+ "response_type": "data",
+ "response": {
+ "settled": true
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "pending",
+ "call_params": {
+ "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "expect": {
+ "success": false,
+ "failed": false,
+ "pending": true
+ },
+ "mocks": {
+ "breez": {
+ "sdk_services": [
+ {
+ "response_type": "data",
+ "response": {
+ "payment_by_hash": {
+ "request_type": "function",
+ "response_type": "data",
+ "response": null
+ }
+ }
+ }
+ ]
+ },
+ "corelightning": {
+ "ln": [
+ {
+ "description": "no invoice",
+ "response": {
+ "listinvoices": [
+ {
+ "request_type": "function",
+ "request_data": {
+ "kwargs": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ },
+ "response_type": "json",
+ "response": {
+ "invoices": []
+ }
+ },
+ {
+ "request_type": "function",
+ "request_data": {
+ "kwargs": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ },
+ "response_type": "json",
+ "response": {
+ "invoices": []
+ }
+ }
+ ]
+ }
+ },
+ {
+ "description": "rpc error",
+ "response": {
+ "listinvoices": [
+ {
+ "request_type": "function",
+ "request_data": {
+ "kwargs": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ },
+ "response_type": "json",
+ "response": {
+ "invoices": []
+ }
+ },
+ {
+ "request_type": "function",
+ "request_data": {
+ "kwargs": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ },
+ "response_type": "exception",
+ "response": {
+ "module": "pyln.client.lightning",
+ "class": "RpcError",
+ "data": {
+ "method": "test_method",
+ "payload": "y",
+ "error": "test-error"
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "description": "error",
+ "response": {
+ "listinvoices": [
+ {
+ "request_type": "function",
+ "request_data": {
+ "kwargs": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ },
+ "response_type": "json",
+ "response": {
+ "invoices": []
+ }
+ },
+ {
+ "request_type": "function",
+ "request_data": {
+ "kwargs": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ },
+ "response_type": "exception",
+ "response": {
+ "data": "test-error"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "description": "no data",
+ "response": {
+ "listinvoices": [
+ {
+ "request_type": "function",
+ "request_data": {
+ "kwargs": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ },
+ "response_type": "json",
+ "response": {
+ "invoices": []
+ }
+ },
+ {
+ "request_type": "function",
+ "request_data": {
+ "kwargs": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ },
+ "response_type": "json",
+ "response": {}
+ }
+ ]
+ }
+ },
+ {
+ "description": "bad checking_id",
+ "response": {
+ "listinvoices": [
+ {
+ "request_type": "function",
+ "request_data": {
+ "kwargs": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ },
+ "response_type": "json",
+ "response": {
+ "invoices": []
+ }
+ },
+ {
+ "request_type": "function",
+ "request_data": {
+ "kwargs": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ },
+ "response_type": "json",
+ "response": {
+ "invoices": [
+ {
+ "status": "paid",
+ "payment_hash": "baaade35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d72"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "description": "unpaid",
+ "response": {
+ "listinvoices": [
+ {
+ "request_type": "function",
+ "request_data": {
+ "kwargs": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ },
+ "response_type": "json",
+ "response": {
+ "invoices": []
+ }
+ },
+ {
+ "request_type": "function",
+ "request_data": {
+ "kwargs": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ },
+ "response_type": "json",
+ "response": {
+ "invoices": [
+ {
+ "status": "unpaid",
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "lndrpc": {
+ "routerpc": [
+ {
+ "response": {}
+ }
+ ],
+ "rpc": [
+ {
+ "description": "not settled",
+ "response": {
+ "LookupInvoice": {
+ "request_type": "async-function",
+ "request_data": {
+ "klass": "lnbits.wallets.lnd_grpc_files.lightning_pb2.PaymentHash",
+ "kwargs": {
+ "__eval__:r_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
+ }
+ },
+ "response_type": "data",
+ "response": {
+ "settled": false
+ }
+ }
+ }
+ },
+ {
+ "description": "rpc error",
+ "response": {
+ "LookupInvoice": {
+ "request_type": "async-function",
+ "request_data": {
+ "klass": "lnbits.wallets.lnd_grpc_files.lightning_pb2.PaymentHash",
+ "kwargs": {
+ "__eval__:r_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
+ }
+ },
+ "response_type": "exception",
+ "response": {
+ "module": "grpc",
+ "class": "RpcError",
+ "data": {}
+ }
+ }
+ }
+ },
+ {
+ "description": "rpc error",
+ "response": {
+ "LookupInvoice": {
+ "request_type": "async-function",
+ "request_data": {
+ "klass": "lnbits.wallets.lnd_grpc_files.lightning_pb2.PaymentHash",
+ "kwargs": {
+ "__eval__:r_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
+ }
+ },
+ "response_type": "exception",
+ "response": {
+ "data": "test-error"
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "pending - incorrect checking_id",
+ "call_params": {
+ "checking_id": "e35526a43d04e985594c0dfab848814f"
+ },
+ "expect": {
+ "success": false,
+ "failed": false,
+ "pending": true
+ },
+ "mocks": {
+ "breez": {
+ "sdk_services": [
+ {
+ "response_type": "data",
+ "response": {
+ "payment_by_hash": {
+ "request_type": "function",
+ "response_type": "data",
+ "response": null
+ }
+ }
+ }
+ ]
+ },
+ "corelightning": {
+ "ln": [
+ {
+ "description": "validation should be added",
+ "response": {
+ "listinvoices": [
+ {
+ "request_type": "function",
+ "request_data": {
+ "kwargs": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f"
+ }
+ },
+ "response_type": "json",
+ "response": {
+ "invoices": []
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "lndrpc": {
+ "routerpc": [
+ {
+ "response": {}
+ }
+ ],
+ "rpc": [
+ {
+ "response": {}
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "failed",
+ "description1": "pending should be false in the 'expect', this is a bug",
+ "call_params": {
+ "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "expect": {
+ "success": false,
+ "failed": true,
+ "pending": true
+ },
+ "mocks": {
+ "breez": {
+ "sdk_services": [
+ {
+ "description": "FAILED",
+ "response_type": "data",
+ "response": {
+ "payment_by_hash": {
+ "request_type": "function",
+ "response_type": "data",
+ "response": {
+ "payment_type": {
+ "value": 2
+ },
+ "status": {
+ "value": 1
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "corelightning": {
+ "ln": [
+ {
+ "description": "expired",
+ "response": {
+ "listinvoices": [
+ {
+ "request_type": "function",
+ "request_data": {
+ "kwargs": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ },
+ "response_type": "json",
+ "response": {
+ "invoices": []
+ }
+ },
+ {
+ "request_type": "function",
+ "request_data": {
+ "kwargs": {
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ },
+ "response_type": "json",
+ "response": {
+ "invoices": [
+ {
+ "status": "expired",
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "lndrpc": {
+ "routerpc": [],
+ "rpc": []
+ }
+ }
+ }
+ ]
+ },
+ "get_payment_status": {
+ "mocks": {
+ "breez": {
+ "sdk_services": {
+ "method": "breez_sdk.connect",
+ "request_type": "function"
+ }
+ },
+ "corelightning": {
+ "ln": {
+ "method": "pyln.client.LightningRpc.__new__",
+ "request_type": "function",
+ "response_type": "data",
+ "response": {
+ "help": {
+ "request_type": "function",
+ "response_type": "json",
+ "response": {
+ "help": [
+ {
+ "command": "some command"
+ }
+ ]
+ }
+ },
+ "listinvoices": {
+ "request_type": "function",
+ "response_type": "json",
+ "response": {
+ "invoices": []
+ }
+ }
+ }
+ }
+ },
+ "lndrpc": {
+ "rpc": {
+ "method": "lnbits.wallets.lnd_grpc_files.lightning_pb2_grpc.LightningStub.__new__",
+ "request_type": "function",
+ "response_type": "data",
+ "response": {}
+ },
+ "routerpc": {
+ "method": "lnbits.wallets.lnd_grpc_files.router_pb2_grpc.RouterStub.__new__",
+ "request_type": "function",
+ "response_type": "data",
+ "response": {}
+ }
+ }
+ },
+ "tests": [
+ {
+ "description": "success",
+ "call_params": {
+ "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "expect": {
+ "success": true,
+ "failed": false,
+ "pending": false,
+ "fee_msat": 50,
+ "preimage": "0000000000000000000000000000000000000000000000000000000000000000"
+ },
+ "mocks": {
+ "breez": {
+ "sdk_services": [
+ {
+ "response_type": "data",
+ "response": {
+ "payment_by_hash": {
+ "request_type": "function",
+ "response_type": "data",
+ "response": {
+ "fee_msat": 50,
+ "details": {
+ "data": {
+ "payment_preimage": "0000000000000000000000000000000000000000000000000000000000000000"
+ }
+ },
+ "payment_type": {
+ "value": 1
+ },
+ "status": {
+ "value": 2
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "corelightning": {
+ "ln": [
+ {
+ "response": {
+ "listpays": [
+ {
+ "request_type": "function",
+ "response_type": "json",
+ "response": {
+ "pays": [
+ {
+ "status": "complete",
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96",
+ "preimage": "0000000000000000000000000000000000000000000000000000000000000000",
+ "amount_sent_msat": 21000,
+ "amount_msat": 21050
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "lndrpc": {
+ "rpc": [
+ {
+ "response": {}
+ }
+ ],
+ "routerpc": [
+ {
+ "description": "two HTLC",
+ "response": {
+ "TrackPaymentV2": {
+ "request_type": "function",
+ "request_data": {
+ "klass": "lnbits.wallets.lnd_grpc_files.router_pb2.TrackPaymentRequest",
+ "kwargs": {
+ "__eval__:payment_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
+ }
+ },
+ "response_type": "__aiter__",
+ "response": [
+ {
+ "status": 2,
+ "htlcs": [
+ {
+ "route": {
+ "total_fees_msat": -100
+ },
+ "preimage": "0000000000000000000000000000000000000000000000000000000000000000"
+ },
+ {
+ "route": {
+ "total_fees_msat": -50
+ },
+ "__eval__:preimage": "bytes.fromhex(\"0000000000000000000000000000000000000000000000000000000000000000\")"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "success status, no payment found",
+ "call_params": {
+ "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "expect": {
+ "success": true,
+ "failed": false,
+ "pending": false,
+ "fee_msat": null,
+ "preimage": null
+ },
+ "mocks": {
+ "breez": {},
+ "corelightning": {},
+ "lndrpc": {
+ "rpc": [
+ {
+ "response": {}
+ }
+ ],
+ "routerpc": [
+ {
+ "description": "two HTLC",
+ "response": {
+ "TrackPaymentV2": {
+ "request_type": "function",
+ "request_data": {
+ "klass": "lnbits.wallets.lnd_grpc_files.router_pb2.TrackPaymentRequest",
+ "kwargs": {
+ "__eval__:payment_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
+ }
+ },
+ "response_type": "__aiter__",
+ "response": [
+ {
+ "status": 2,
+ "htlcs": []
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "pending",
+ "call_params": {
+ "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "expect": {
+ "success": false,
+ "failed": false,
+ "pending": true,
+ "fee_msat": null
+ },
+ "mocks": {
+ "breez": {
+ "sdk_services": [
+ {
+ "description": "no data",
+ "response_type": "data",
+ "response": {
+ "payment_by_hash": {
+ "request_type": "function",
+ "response_type": "data",
+ "response": null
+ }
+ }
+ },
+ {
+ "description": "error",
+ "response_type": "data",
+ "response": {
+ "payment_by_hash": {
+ "request_type": "function",
+ "response_type": "exception",
+ "response": {
+ "data": "test-error"
+ }
+ }
+ }
+ },
+ {
+ "description": "pending",
+ "response_type": "data",
+ "response": {
+ "payment_by_hash": {
+ "request_type": "function",
+ "response_type": "data",
+ "response": {
+ "status": {
+ "value": 1
+ },
+ "payment_type": {
+ "value": 1
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "corelightning": {
+ "ln": [
+ {
+ "response": {
+ "listpays": [
+ {
+ "description": "no data",
+ "request_type": "function",
+ "response_type": "json",
+ "response": {}
+ }
+ ]
+ }
+ },
+ {
+ "description": "error",
+ "response_type": "data",
+ "response": {
+ "listpays": {
+ "request_type": "function",
+ "response_type": "exception",
+ "response": {
+ "data": "test-error"
+ }
+ }
+ }
+ },
+ {
+ "response": {
+ "listpays": [
+ {
+ "description": "pending status",
+ "request_type": "function",
+ "response_type": "json",
+ "response": {
+ "pays": [
+ {
+ "status": "pending",
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "response": {
+ "listpays": [
+ {
+ "description": "bad checking_id",
+ "request_type": "function",
+ "response_type": "json",
+ "response": {
+ "pays": [
+ {
+ "status": "complete",
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d7bbbbbb"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "lndrpc": {
+ "rpc": [
+ {
+ "response": {}
+ }
+ ],
+ "routerpc": [
+ {
+ "description": "no HTLC",
+ "response": {
+ "TrackPaymentV2": {
+ "request_type": "function",
+ "request_data": {
+ "klass": "lnbits.wallets.lnd_grpc_files.router_pb2.TrackPaymentRequest",
+ "kwargs": {
+ "__eval__:payment_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
+ }
+ },
+ "response_type": "__aiter__",
+ "response": [
+ {
+ "status": 0,
+ "htlcs": []
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "no payments",
+ "response": {
+ "TrackPaymentV2": {
+ "request_type": "function",
+ "request_data": {
+ "klass": "lnbits.wallets.lnd_grpc_files.router_pb2.TrackPaymentRequest",
+ "kwargs": {
+ "__eval__:payment_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
+ }
+ },
+ "response_type": "__aiter__",
+ "response": []
+ }
+ }
+ },
+ {
+ "description": "no status",
+ "response": {
+ "TrackPaymentV2": {
+ "request_type": "function",
+ "request_data": {
+ "klass": "lnbits.wallets.lnd_grpc_files.router_pb2.TrackPaymentRequest",
+ "kwargs": {
+ "__eval__:payment_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
+ }
+ },
+ "response_type": "__aiter__",
+ "response": [{}]
+ }
+ }
+ },
+ {
+ "description": "status: non-existend",
+ "response": {
+ "TrackPaymentV2": {
+ "request_type": "function",
+ "request_data": {
+ "klass": "lnbits.wallets.lnd_grpc_files.router_pb2.TrackPaymentRequest",
+ "kwargs": {
+ "__eval__:payment_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
+ }
+ },
+ "response_type": "__aiter__",
+ "response": [
+ {
+ "status": 0,
+ "htlcs": [
+ {
+ "route": {
+ "total_fees_msat": -50
+ },
+ "__eval__:preimage": "bytes.fromhex(\"0000000000000000000000000000000000000000000000000000000000000000\")"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "status: in-flight",
+ "response": {
+ "TrackPaymentV2": {
+ "request_type": "function",
+ "request_data": {
+ "klass": "lnbits.wallets.lnd_grpc_files.router_pb2.TrackPaymentRequest",
+ "kwargs": {
+ "__eval__:payment_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
+ }
+ },
+ "response_type": "__aiter__",
+ "response": [
+ {
+ "status": 1,
+ "htlcs": [
+ {
+ "route": {
+ "total_fees_msat": -50
+ },
+ "__eval__:preimage": "bytes.fromhex(\"0000000000000000000000000000000000000000000000000000000000000000\")"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "status: unknown",
+ "response": {
+ "TrackPaymentV2": {
+ "request_type": "function",
+ "request_data": {
+ "klass": "lnbits.wallets.lnd_grpc_files.router_pb2.TrackPaymentRequest",
+ "kwargs": {
+ "__eval__:payment_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
+ }
+ },
+ "response_type": "__aiter__",
+ "response": [
+ {
+ "status": 999,
+ "htlcs": [
+ {
+ "route": {
+ "total_fees_msat": -50
+ },
+ "__eval__:preimage": "bytes.fromhex(\"0000000000000000000000000000000000000000000000000000000000000000\")"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "raise error",
+ "response": {
+ "TrackPaymentV2": {
+ "request_type": "function",
+ "request_data": {
+ "klass": "lnbits.wallets.lnd_grpc_files.router_pb2.TrackPaymentRequest",
+ "kwargs": {
+ "__eval__:payment_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
+ }
+ },
+ "response_type": "exception",
+ "response": {
+ "data": "test-error"
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "pending - incorrect checking_id",
+ "call_params": {
+ "checking_id": "e35526a43d04e985594c0dfab848814f"
+ },
+ "expect": {
+ "success": false,
+ "failed": false,
+ "pending": true,
+ "fee_msat": null
+ },
+ "mocks": {
+ "breez": {},
+ "corelightning": {
+ "ln": [
+ {
+ "response": {
+ "listpays": [
+ {
+ "description": "no data",
+ "request_type": "function",
+ "response_type": "json",
+ "response": {}
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "lndrpc": {
+ "rpc": [
+ {
+ "response": {}
+ }
+ ],
+ "routerpc": [
+ {
+ "description": "no HTLC",
+ "response": {}
+ }
+ ]
+ }
+ }
+ },
+ {
+ "description": "failed",
+ "description1": "pending should be false in the 'expect', this is a bug",
+ "call_params": {
+ "checking_id": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ },
+ "expect": {
+ "success": false,
+ "failed": true,
+ "pending": true,
+ "fee_msat": null,
+ "preimage": null
+ },
+ "mocks": {
+ "breez": {
+ "sdk_services": [
+ {
+ "description": "failed status",
+ "response_type": "data",
+ "response": {
+ "payment_by_hash": {
+ "request_type": "function",
+ "response_type": "data",
+ "response": {
+ "status": {
+ "value": 3
+ },
+ "payment_type": {
+ "value": 1
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "corelightning": {
+ "ln": [
+ {
+ "response": {
+ "listpays": [
+ {
+ "request_type": "function",
+ "response_type": "json",
+ "response": {
+ "pays": [
+ {
+ "status": "failed",
+ "payment_hash": "e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "lndrpc": {
+ "rpc": [
+ {
+ "response": {}
+ }
+ ],
+ "routerpc": [
+ {
+ "description": "two HTLC",
+ "response": {
+ "TrackPaymentV2": {
+ "request_type": "function",
+ "request_data": {
+ "klass": "lnbits.wallets.lnd_grpc_files.router_pb2.TrackPaymentRequest",
+ "kwargs": {
+ "__eval__:payment_hash": "bytes.fromhex(\"e35526a43d04e985594c0dfab848814f524b1c786598ec9a63beddb2d726ac96\")"
+ }
+ },
+ "response_type": "__aiter__",
+ "response": [
+ {
+ "status": 3,
+ "htlcs": []
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
}
+ }
}