From c29e7a1759789b93413965096d3255811365c480 Mon Sep 17 00:00:00 2001 From: jackstar12 <62219658+jackstar12@users.noreply.github.com> Date: Tue, 12 Sep 2023 12:02:01 +0200 Subject: [PATCH] [TEST] use clean db in postgres tests (#1928) --- tests/conftest.py | 10 ++++++++-- tests/helpers.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 6de8367e..b5fd07ce 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -2,7 +2,7 @@ import asyncio import uvloop -uvloop.install() # noqa +uvloop.install() import pytest import pytest_asyncio @@ -16,7 +16,12 @@ from lnbits.core.services import update_wallet_balance from lnbits.core.views.api import api_payments_create_invoice from lnbits.db import Database from lnbits.settings import settings -from tests.helpers import get_hold_invoice, get_random_invoice_data, get_real_invoice +from tests.helpers import ( + clean_database, + get_hold_invoice, + get_random_invoice_data, + get_real_invoice, +) # override settings for tests settings.lnbits_admin_extensions = [] @@ -35,6 +40,7 @@ def event_loop(): # use session scope to run once before and once after all tests @pytest_asyncio.fixture(scope="session") async def app(): + clean_database(settings) app = create_app() await app.router.startup() yield app diff --git a/tests/helpers.py b/tests/helpers.py index 95bc67fd..e06af92c 100644 --- a/tests/helpers.py +++ b/tests/helpers.py @@ -7,8 +7,12 @@ import time from subprocess import PIPE, Popen, TimeoutExpired from typing import Tuple +import psycopg2 from loguru import logger +from sqlalchemy.engine.url import make_url +from lnbits import core +from lnbits.db import DB_TYPE, POSTGRES from lnbits.wallets import get_wallet_class, set_wallet_class @@ -131,3 +135,28 @@ def pay_onchain(address: str, sats: int) -> str: cmd = docker_bitcoin_cli.copy() cmd.extend(["sendtoaddress", address, str(btc)]) return run_cmd(cmd) + + +def clean_database(settings): + if DB_TYPE == POSTGRES: + db_url = make_url(settings.lnbits_database_url) + + conn = psycopg2.connect(settings.lnbits_database_url) + conn.autocommit = True + with conn.cursor() as cur: + try: + cur.execute("DROP DATABASE lnbits_test") + except psycopg2.errors.InvalidCatalogName: + pass + cur.execute("CREATE DATABASE lnbits_test") + + db_url.database = "lnbits_test" + settings.lnbits_database_url = str(db_url) + + core.db.__init__("database") + + conn.close() + else: + # FIXME: do this once mock data is removed from test data folder + # os.remove(settings.lnbits_data_folder + "/database.sqlite3") + pass