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
5 changes: 5 additions & 0 deletions finary_uapi/user_me.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,8 @@ def get_user_me(session: requests.Session) -> Any:
def get_user_me_institution_connections(session: requests.Session) -> Any:
url = f"{API_ROOT}/users/me/institution_connections/details"
return get_and_print(session, url)


def get_user_me_subscription_details(session: requests.Session) -> Any:
url = f"{API_ROOT}/users/me/subscription_details"
return get_and_print(session, url)
8 changes: 8 additions & 0 deletions tests/test_get.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from importlib import import_module
from finary_uapi.signin import signin
from finary_uapi.auth import prepare_session
from finary_uapi.securities import get_securities


def test_signin() -> None:
Expand Down Expand Up @@ -40,6 +41,7 @@ def session() -> requests.Session:
), # TODO change name and add _user_
("user_me", "", {}),
("user_me", "get_user_me_institution_connections", {}),
("user_me", "get_user_me_subscription_details", {}),
("user_portfolio", "get_portfolio_crowdlendings", {}),
("user_portfolio", "get_portfolio_crowdlendings_distribution", {}),
("user_portfolio", "get_portfolio_cryptos", {}),
Expand Down Expand Up @@ -78,3 +80,9 @@ def test_generic_test(
assert result["message"] == "OK"
assert result["error"] is None
assert len(result["result"]) > 0


def test_get_security_error(session: requests.Session) -> None:
securities = get_securities(session, "US5949181045")
assert securities
assert securities["result"] == []
123 changes: 123 additions & 0 deletions tests/test_utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
import pytest
import requests
from finary_uapi.bank_account_types import get_bank_account_type_per_name
from finary_uapi.currencies import get_cryptocurrency_by_code
from finary_uapi.signin import signin
from finary_uapi.auth import prepare_session
from finary_uapi.user_holdings_accounts import get_holdings_account_per_name_or_id
from finary_uapi.user_cryptos import get_user_crypto_by_code
from finary_uapi.securities import guess_security


def test_signin() -> None:
"""test signin"""
result = signin()
assert result["message"] == "Created"
assert result["error"] is None


@pytest.fixture
def session() -> requests.Session:
return prepare_session()


@pytest.mark.parametrize(
"type, name, display_name",
[
("invest", "lifeinsurance", "Assurance vie"),
("cash", "checking", "Compte courant"),
],
)
def test_get_bank_account_type_per_name(
session: requests.Session, type: str, name: str, display_name: str
) -> None:
account = get_bank_account_type_per_name(session, type, display_name)
assert account["name"] == name
assert account["display_name"] == display_name


def test_get_bank_account_type_per_name_error(session: requests.Session) -> None:
account = get_bank_account_type_per_name(session, "cash", "foo")
assert not account


@pytest.mark.parametrize(
"code, name",
[
("BTC", "Bitcoin"),
("SushiToken", "SushiToken"),
],
)
def test_get_cryptocurrency_by_code(
session: requests.Session, code: str, name: str
) -> None:
crypto = get_cryptocurrency_by_code(session, code)
assert crypto
assert crypto["name"] == name


def test_get_cryptocurrency_by_code_error(session: requests.Session) -> None:
crypto = get_cryptocurrency_by_code(session, "foobar")
assert not crypto


@pytest.mark.parametrize(
"name_id",
[
("Assurance CM"),
("90e407ad-fb28-48e1-a0c9-742fd9e4913d"),
],
)
def test_get_holdings_account_per_name_or_id(
session: requests.Session, name_id: str
) -> None:
account = get_holdings_account_per_name_or_id(session, name_id)
assert account["name"] == name_id or account["id"] == name_id


def test_get_user_crypto_by_code(session: requests.Session) -> None:
crypto = get_user_crypto_by_code(
session, "BTC", "4492f61e-2f89-4ace-bc55-f9358cbcbd82"
)
assert crypto["quantity"] == 1


def test_get_user_crypto_by_code_error(session: requests.Session) -> None:
crypto = get_user_crypto_by_code(
session, "foo", "4492f61e-2f89-4ace-bc55-f9358cbcbd82"
)
assert crypto == {}


@pytest.mark.parametrize(
"isin_code, description, currency, check",
[
("FR0000120271", "TotalEnergies", "EUR", "TTE"),
("NONEXISTENT", "NONEXISTENT", "EUR", "error"),
("0P00000H2W", "Regard", "EUR", "0P00000H2W"),
("0P00000H2W", "", "EUR", "0P00000H2W"),
("0P00000H2W", "ZZZZZ", "EUR", "error"),
("TTE", "TotalEnergies", "EUR", "TTE"),
("FR0000120271", "", "EUR", "TTE"),
("FR0000120271", "ZZZZZ", "EUR", "error"),
("wayfair", "", "GBP", "error"),
],
)
def test_guess_security(
session: requests.Session,
isin_code: str,
description: str,
currency: str,
check: str,
) -> None:
security = {}
security["isin_code"] = isin_code
security["description"] = description
security["currency"] = currency
security = guess_security(session, security)
if check == "error":
assert security == {}
else:
assert security
assert security["symbol"] == check
assert security["currency"]["code"] == currency # type: ignore