Test json and jsonl output formats.
This commit is contained in:
parent
46ebdfe074
commit
99aeb6bbc7
2 changed files with 129 additions and 2 deletions
|
@ -45,10 +45,10 @@ class JSON(BaseOutput):
|
||||||
|
|
||||||
if self.jsonl:
|
if self.jsonl:
|
||||||
for row in data:
|
for row in data:
|
||||||
json.dump(row, output)
|
json.dump(row, output, ensure_ascii=False)
|
||||||
output.write("\n")
|
output.write("\n")
|
||||||
else:
|
else:
|
||||||
json.dump(data, output, indent=2)
|
json.dump(data, output, ensure_ascii=False, indent=2)
|
||||||
output.write("\n")
|
output.write("\n")
|
||||||
|
|
||||||
return output.getvalue()
|
return output.getvalue()
|
||||||
|
|
127
tests/pricehist/outputs/test_json.py
Normal file
127
tests/pricehist/outputs/test_json.py
Normal file
|
@ -0,0 +1,127 @@
|
||||||
|
from decimal import Decimal
|
||||||
|
from textwrap import dedent
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from pricehist.format import Format
|
||||||
|
from pricehist.outputs.json import JSON
|
||||||
|
from pricehist.price import Price
|
||||||
|
from pricehist.series import Series
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def json_out():
|
||||||
|
return JSON()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def jsonl_out():
|
||||||
|
return JSON(jsonl=True)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def series():
|
||||||
|
prices = [
|
||||||
|
Price("2021-01-01", Decimal("24139.4648")),
|
||||||
|
Price("2021-01-02", Decimal("26533.576")),
|
||||||
|
Price("2021-01-03", Decimal("27001.2846")),
|
||||||
|
]
|
||||||
|
return Series("BTC", "EUR", "close", "2021-01-01", "2021-01-03", prices)
|
||||||
|
|
||||||
|
|
||||||
|
def test_format_basics(json_out, series, mocker):
|
||||||
|
source = mocker.MagicMock()
|
||||||
|
source.id = mocker.MagicMock(return_value="sourceid")
|
||||||
|
result = json_out.format(series, source, Format())
|
||||||
|
assert (
|
||||||
|
result
|
||||||
|
== dedent(
|
||||||
|
"""
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"date": "2021-01-01",
|
||||||
|
"base": "BTC",
|
||||||
|
"quote": "EUR",
|
||||||
|
"amount": "24139.4648",
|
||||||
|
"source": "sourceid",
|
||||||
|
"type": "close"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"date": "2021-01-02",
|
||||||
|
"base": "BTC",
|
||||||
|
"quote": "EUR",
|
||||||
|
"amount": "26533.576",
|
||||||
|
"source": "sourceid",
|
||||||
|
"type": "close"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"date": "2021-01-03",
|
||||||
|
"base": "BTC",
|
||||||
|
"quote": "EUR",
|
||||||
|
"amount": "27001.2846",
|
||||||
|
"source": "sourceid",
|
||||||
|
"type": "close"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
"""
|
||||||
|
).strip()
|
||||||
|
+ "\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_format_basic_jsonl(jsonl_out, series, mocker):
|
||||||
|
source = mocker.MagicMock()
|
||||||
|
source.id = mocker.MagicMock(return_value="sourceid")
|
||||||
|
result = jsonl_out.format(series, source, Format())
|
||||||
|
assert (
|
||||||
|
result
|
||||||
|
== dedent(
|
||||||
|
"""
|
||||||
|
{"date": "2021-01-01", "base": "BTC", "quote": "EUR", "amount": "24139.4648", "source": "sourceid", "type": "close"}
|
||||||
|
{"date": "2021-01-02", "base": "BTC", "quote": "EUR", "amount": "26533.576", "source": "sourceid", "type": "close"}
|
||||||
|
{"date": "2021-01-03", "base": "BTC", "quote": "EUR", "amount": "27001.2846", "source": "sourceid", "type": "close"}
|
||||||
|
""" # noqa
|
||||||
|
).strip()
|
||||||
|
+ "\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_format_custom(json_out, series, mocker):
|
||||||
|
source = mocker.MagicMock()
|
||||||
|
source.id = mocker.MagicMock(return_value="sourceid")
|
||||||
|
fmt = Format(base="XBT", quote="€", thousands=".", decimal=",", datesep="/")
|
||||||
|
result = json_out.format(series, source, fmt)
|
||||||
|
assert (
|
||||||
|
result
|
||||||
|
== dedent(
|
||||||
|
"""
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"date": "2021/01/01",
|
||||||
|
"base": "XBT",
|
||||||
|
"quote": "€",
|
||||||
|
"amount": "24.139,4648",
|
||||||
|
"source": "sourceid",
|
||||||
|
"type": "close"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"date": "2021/01/02",
|
||||||
|
"base": "XBT",
|
||||||
|
"quote": "€",
|
||||||
|
"amount": "26.533,576",
|
||||||
|
"source": "sourceid",
|
||||||
|
"type": "close"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"date": "2021/01/03",
|
||||||
|
"base": "XBT",
|
||||||
|
"quote": "€",
|
||||||
|
"amount": "27.001,2846",
|
||||||
|
"source": "sourceid",
|
||||||
|
"type": "close"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
"""
|
||||||
|
).strip()
|
||||||
|
+ "\n"
|
||||||
|
)
|
Loading…
Add table
Reference in a new issue