mirror of
https://github.com/beak-insights/felicity-lims.git
synced 2025-02-23 16:33:11 +08:00
63 lines
2 KiB
Python
63 lines
2 KiB
Python
import io
|
|
import logging
|
|
from datetime import datetime, timedelta
|
|
|
|
import pandas as pd
|
|
import pytest
|
|
|
|
from felicity.apps.analytics.tasks import generate_report
|
|
|
|
logging.basicConfig(level=logging.INFO)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
@pytest.mark.order(100)
|
|
async def test_generate_report(client, auth_data):
|
|
time_now = datetime.now()
|
|
period_start = (time_now - timedelta(minutes=5)).isoformat()
|
|
period_end = time_now.isoformat()
|
|
response = await client.post(
|
|
"/reports/",
|
|
json={
|
|
"report_type": "line_listing",
|
|
"analyses_uids": [1],
|
|
"sample_states": ["published"],
|
|
"date_column": "date_published",
|
|
"period_start": period_start,
|
|
"period_end": period_end,
|
|
},
|
|
headers=auth_data["headers"],
|
|
)
|
|
|
|
logger.info(f"generate report response: {response} {response.json()}")
|
|
assert response.status_code == 200
|
|
_data = response.json()
|
|
assert _data["period_start"] == period_start
|
|
assert _data["period_end"] == period_end
|
|
assert _data["date_column"] == "date_published"
|
|
assert _data["sample_states"] == "published"
|
|
assert _data["status"] == "PENDING"
|
|
assert _data["analyses"][0]["uid"] == 1
|
|
|
|
# prepare for next test
|
|
await generate_report(7)
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
@pytest.mark.order(101)
|
|
async def test_fetch_reports(client, client_root, auth_data):
|
|
response = await client.get("/reports/", headers=auth_data["headers"])
|
|
|
|
logger.info(f"generate report response: {response} {response.json()}")
|
|
assert response.status_code == 200
|
|
_data = response.json()
|
|
assert len(_data) == 1
|
|
_report = _data[0]
|
|
assert _report["status"] == "READY"
|
|
assert _report["location"].endswith(".csv") == True
|
|
|
|
d_data = await client_root.get(f"/{_report['location']}")
|
|
assert d_data.status_code == 200
|
|
data = pd.read_csv(io.StringIO(d_data.content.decode("utf-8")), header=0)
|
|
assert data.shape[0] == 6 # include header row
|