Skip to content

Commit

Permalink
truelayer: remove currency from target account name
Browse files Browse the repository at this point in the history
Previously the account currency would be appended to the baseAccount name.
e.g. RevolutGBP, RevolutUSD

It's now recommended to enable multiple currencies for the baseAccount.

e.g.
```beancount
2015-07-01 open Assets:Current-Assets:Revolut     GBP,USD
```
  • Loading branch information
markferry committed Sep 13, 2021
1 parent f2ba0ae commit 81235c2
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 28 deletions.
9 changes: 3 additions & 6 deletions src/tariochbctools/importers/truelayer/importer.py
Expand Up @@ -96,7 +96,6 @@ def _extract_endpoint_transactions(self, endpoint, headers, invert_sign=False):

for account in r.json()["results"]:
accountId = account["account_id"]
accountCcy = account["currency"]
r = requests.get(
f"https://api.{self.domain}/data/v1/{endpoint}/{accountId}/transactions",
headers=headers,
Expand All @@ -105,14 +104,12 @@ def _extract_endpoint_transactions(self, endpoint, headers, invert_sign=False):

for trx in transactions:
entries.extend(
self._extract_transaction(
trx, accountCcy, transactions, invert_sign
)
self._extract_transaction(trx, transactions, invert_sign)
)

return entries

def _extract_transaction(self, trx, accountCcy, transactions, invert_sign):
def _extract_transaction(self, trx, transactions, invert_sign):
entries = []
metakv = {}

Expand All @@ -133,7 +130,7 @@ def _extract_transaction(self, trx, accountCcy, transactions, invert_sign):

meta = data.new_metadata("", 0, metakv)
trxDate = dateutil.parser.parse(trx["timestamp"]).date()
account = self.baseAccount + accountCcy
account = self.baseAccount

tx_amount = D(str(trx["amount"]))
# avoid pylint invalid-unary-operand-type
Expand Down
30 changes: 8 additions & 22 deletions tests/tariochbctools/importers/test_truelayer.py
Expand Up @@ -87,65 +87,51 @@ def test_identify(importer, tmp_config):


def test_extract_transaction_simple(importer, tmp_trx):
entries = importer._extract_transaction(
tmp_trx, "GBP", [tmp_trx], invert_sign=False
)
entries = importer._extract_transaction(tmp_trx, [tmp_trx], invert_sign=False)
assert entries[0].postings[0].units.number == D(str(tmp_trx["amount"]))


def test_extract_transaction_with_balance(importer, tmp_trx):
entries = importer._extract_transaction(
tmp_trx, "GBP", [tmp_trx], invert_sign=False
)
entries = importer._extract_transaction(tmp_trx, [tmp_trx], invert_sign=False)
# one entry, one balance
assert len(entries) == 2
assert entries[1].amount.number == D(str(tmp_trx["running_balance"]["amount"]))


def test_extract_transaction_invert_sign(importer, tmp_trx):
"""Show that sign inversion works"""
entries = importer._extract_transaction(tmp_trx, "GBP", [tmp_trx], invert_sign=True)
entries = importer._extract_transaction(tmp_trx, [tmp_trx], invert_sign=True)
assert entries[0].postings[0].units.number == -D(str(tmp_trx["amount"]))


@pytest.mark.parametrize("id_field", tlimp.TX_MANDATORY_ID_FIELDS)
def test_extract_transaction_has_transaction_id(importer, tmp_trx, id_field):
"""Ensure mandatory IDs are in extracted transactions."""
entries = importer._extract_transaction(
tmp_trx, "GBP", [tmp_trx], invert_sign=False
)
entries = importer._extract_transaction(tmp_trx, [tmp_trx], invert_sign=False)
assert entries[0].meta[id_field] == tmp_trx[id_field]


@pytest.mark.parametrize("id_field", tlimp.TX_OPTIONAL_ID_FIELDS)
def test_trx_id(importer, tmp_trx, id_field):
entries = importer._extract_transaction(
tmp_trx, "GBP", [tmp_trx], invert_sign=False
)
entries = importer._extract_transaction(tmp_trx, [tmp_trx], invert_sign=False)
assert entries[0].meta[id_field] == tmp_trx[id_field]


@pytest.mark.parametrize("id_field", tlimp.TX_OPTIONAL_ID_FIELDS)
def test_trx_id_is_optional(importer, id_field):
tmp_trx = json.loads(TEST_TRX_WITHOUT_IDS)
entries = importer._extract_transaction(
tmp_trx, "GBP", [tmp_trx], invert_sign=False
)
entries = importer._extract_transaction(tmp_trx, [tmp_trx], invert_sign=False)
assert entries[0].meta.get(id_field) is None


@pytest.mark.parametrize("id_field", tlimp.TX_OPTIONAL_META_ID_FIELDS)
def test_trx_meta_id(importer, tmp_trx, id_field):
entries = importer._extract_transaction(
tmp_trx, "GBP", [tmp_trx], invert_sign=False
)
entries = importer._extract_transaction(tmp_trx, [tmp_trx], invert_sign=False)
assert entries[0].meta[id_field] == tmp_trx["meta"][id_field]


@pytest.mark.parametrize("id_field", tlimp.TX_OPTIONAL_META_ID_FIELDS)
def test_trx_meta_id_is_optional(importer, id_field):
tmp_trx = json.loads(TEST_TRX_WITHOUT_IDS)
entries = importer._extract_transaction(
tmp_trx, "GBP", [tmp_trx], invert_sign=False
)
entries = importer._extract_transaction(tmp_trx, [tmp_trx], invert_sign=False)
assert entries[0].meta.get(id_field) is None

0 comments on commit 81235c2

Please sign in to comment.