Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: CI

on:
push:
branches: [main]
pull_request:
branches: [main]

jobs:
test:
name: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Set up pixi
uses: prefix-dev/setup-pixi@v0.8.8
with:
manifest-path: pixi.toml
locked: true

- name: Run tests
run: pixi run test
84 changes: 84 additions & 0 deletions conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
"""Shared fixtures: fake Venmo client/transaction objects so tests never touch the network."""

from types import SimpleNamespace

import pytest


def make_user(user_id, username="user", display_name="User"):
return SimpleNamespace(id=user_id, username=username, display_name=display_name)


def make_txn(
*,
txn_id="1",
payment_type="pay",
amount=10.0,
note="note",
status="settled",
audience="private",
date_created="1780887063",
actor=None,
target=None,
):
return SimpleNamespace(
id=txn_id,
payment_type=payment_type,
amount=amount,
note=note,
status=status,
audience=audience,
date_created=date_created,
actor=actor,
target=target,
)


class FakeUserApi:
"""Records which read method was called and returns a canned page (a plain list)."""

def __init__(self, txns):
self._txns = txns
self.calls = []

def get_user_transactions(self, user_id=None, limit=50, before_id=None):
self.calls.append(
{"method": "get_user_transactions", "user_id": user_id, "limit": limit, "before_id": before_id}
)
return list(self._txns)

def get_transaction_between_two_users(
self, user_id_one=None, user_id_two=None, limit=50, before_id=None
):
self.calls.append(
{
"method": "get_transaction_between_two_users",
"user_id_one": user_id_one,
"user_id_two": user_id_two,
"limit": limit,
"before_id": before_id,
}
)
return list(self._txns)


class FakeClient:
def __init__(self, txns, my_id):
self.user = FakeUserApi(txns)
self._my_id = my_id

def my_profile(self):
return SimpleNamespace(id=self._my_id)


@pytest.fixture
def fake_client_factory(monkeypatch):
"""Patch server.get_client to return a FakeClient; hand the client back for assertions."""
import server

def _factory(txns, my_id="me"):
client = FakeClient(txns, my_id)
monkeypatch.setattr(server, "get_client", lambda: client)
return client

return _factory
Loading
Loading