diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 95be9061..53459421 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,8 +17,8 @@ jobs: poetry-version: ["1.7.1"] mint-cache-secrets: ["false", "true"] mint-only-deprecated: ["false", "true"] - # db-url: ["", "postgres://cashu:cashu@localhost:5432/cashu"] # TODO: Postgres test not working - db-url: [""] + mint-database: ["./test_data/test_mint", "postgres://cashu:cashu@localhost:5432/cashu"] + # mint-database: [""] backend-wallet-class: ["FakeWallet"] uses: ./.github/workflows/tests.yml with: @@ -27,6 +27,7 @@ jobs: poetry-version: ${{ matrix.poetry-version }} mint-cache-secrets: ${{ matrix.mint-cache-secrets }} mint-only-deprecated: ${{ matrix.mint-only-deprecated }} + mint-database: ${{ matrix.mint-database }} regtest: uses: ./.github/workflows/regtest.yml strategy: @@ -38,3 +39,4 @@ jobs: with: python-version: ${{ matrix.python-version }} backend-wallet-class: ${{ matrix.backend-wallet-class }} + mint-database: "./test_data/test_mint" diff --git a/.github/workflows/regtest.yml b/.github/workflows/regtest.yml index 48653736..46e2d8ed 100644 --- a/.github/workflows/regtest.yml +++ b/.github/workflows/regtest.yml @@ -12,7 +12,7 @@ on: os-version: default: "ubuntu-latest" type: string - db-url: + mint-database: default: "" type: string backend-wallet-class: @@ -23,6 +23,20 @@ jobs: regtest: runs-on: ${{ inputs.os-version }} timeout-minutes: 10 + services: + postgres: + image: postgres:latest + env: + POSTGRES_USER: cashu + POSTGRES_PASSWORD: cashu + POSTGRES_DB: cashu + ports: + - 5432:5432 + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 steps: - uses: actions/checkout@v3 @@ -47,7 +61,7 @@ jobs: WALLET_NAME: test_wallet MINT_HOST: localhost MINT_PORT: 3337 - MINT_DATABASE: ${{ inputs.db-url }} + MINT_TEST_DATABASE: ${{ inputs.mint-database }} TOR: false MINT_LIGHTNING_BACKEND: ${{ inputs.backend-wallet-class }} MINT_LNBITS_ENDPOINT: http://localhost:5001 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 6659b06a..cf1a176b 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -9,7 +9,7 @@ on: poetry-version: default: "1.7.1" type: string - db-url: + mint-database: default: "" type: string os: @@ -24,7 +24,7 @@ on: jobs: poetry: - name: Run (mint-cache-secrets ${{ inputs.mint-cache-secrets }}, mint-only-deprecated ${{ inputs.mint-only-deprecated }}) + name: Run (mint-cache-secrets ${{ inputs.mint-cache-secrets }}, mint-only-deprecated ${{ inputs.mint-only-deprecated }}, mint-database ${{ inputs.mint-database }}) runs-on: ${{ inputs.os }} services: postgres: @@ -53,7 +53,7 @@ jobs: WALLET_NAME: test_wallet MINT_HOST: localhost MINT_PORT: 3337 - MINT_DATABASE: ${{ inputs.db-url }} + MINT_TEST_DATABASE: ${{ inputs.mint-database }} MINT_CACHE_SECRETS: ${{ inputs.mint-cache-secrets }} DEBUG_MINT_ONLY_DEPRECATED: ${{ inputs.mint-only-deprecated }} TOR: false diff --git a/cashu/core/settings.py b/cashu/core/settings.py index ace76940..5bf13d4a 100644 --- a/cashu/core/settings.py +++ b/cashu/core/settings.py @@ -56,6 +56,7 @@ class MintSettings(CashuSettings): mint_listen_port: int = Field(default=3338) mint_lightning_backend: str = Field(default="LNbitsWallet") mint_database: str = Field(default="data/mint") + mint_test_database: str = Field(default="test_data/test_mint") mint_peg_out_only: bool = Field( default=False, title="Peg-out only", diff --git a/tests/conftest.py b/tests/conftest.py index 53a36c4a..231853eb 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -35,7 +35,7 @@ settings.fakewallet_brr = True settings.fakewallet_delay_payment = False settings.fakewallet_stochastic_invoice = False -settings.mint_database = "./test_data/test_mint" +settings.mint_database = settings.mint_test_database settings.mint_derivation_path = "m/0'/0'/0'" settings.mint_derivation_path_list = [] settings.mint_private_key = "TEST_PRIVATE_KEY" @@ -100,6 +100,13 @@ async def start_mint_init(ledger: Ledger): db_file = os.path.join(settings.mint_database, "mint.sqlite3") if os.path.exists(db_file): os.remove(db_file) + else: + # clear postgres database + db = Database("mint", settings.mint_database) + async with db.connect() as conn: + await conn.execute("DROP SCHEMA public CASCADE;") + await conn.execute("CREATE SCHEMA public;") + wallets_module = importlib.import_module("cashu.lightning") lightning_backend = getattr(wallets_module, settings.mint_lightning_backend)() backends = { diff --git a/tests/helpers.py b/tests/helpers.py index f121711d..94fe729b 100644 --- a/tests/helpers.py +++ b/tests/helpers.py @@ -31,6 +31,7 @@ async def get_random_invoice_data(): is_regtest: bool = not is_fake is_deprecated_api_only = settings.debug_mint_only_deprecated is_github_actions = os.getenv("GITHUB_ACTIONS") == "true" +is_postgres = settings.mint_database.startswith("postgres") docker_lightning_cli = [ "docker", diff --git a/tests/test_mint_db.py b/tests/test_mint_db.py index d45a4200..1d006a2f 100644 --- a/tests/test_mint_db.py +++ b/tests/test_mint_db.py @@ -6,6 +6,7 @@ from cashu.wallet.wallet import Wallet from cashu.wallet.wallet import Wallet as Wallet1 from tests.conftest import SERVER_ENDPOINT +from tests.helpers import is_postgres async def assert_err(f, msg): @@ -61,3 +62,10 @@ async def test_melt_quote(wallet1: Wallet, ledger: Ledger): assert quote.checking_id == invoice.payment_hash assert quote.paid_time is None assert quote.created_time + + +@pytest.mark.asyncio +@pytest.mark.skipif(not is_postgres, reason="only works with Postgres") +async def test_postgres_working(): + assert is_postgres + assert True