# py-scopes: tests.test_api """Tests for the fastapi- (and asyncio-) based stuff""" from scopes import testing import os, sys import config from scopes.storage import tracking import pytest from fastapi.testclient import TestClient from httpx2 import ASGITransport, AsyncClient from scopes.api import main from scopes.api.main import app @pytest.fixture(scope='module') def storage(): #storage = config.StorageFactory(config)(config.dbschema) storage = main.storage() storage.dropTable('tracks') tracks = storage.create(tracking.Container) tr01 = tracking.Track('t01', 'john') tr01.update(dict(activity='testing')) trid01 = tracks.save(tr01) storage.commit() return storage def async_client(): return AsyncClient(transport=ASGITransport(app=app), base_url='http://test') #@pytest.mark.anyio #async def test_root(): #async with async_client() as clt: #response = await clt.get('/') def test_root(): with TestClient(app) as clt: response = clt.get('/') assert response.status_code == 200 assert response.json() == {'Hello': 'World'} def test_tracking(storage, caplog): with TestClient(app) as clt: caplog.set_level(config.settings.log_level) tracks = clt.get('/tracks').json() assert len(tracks) == 1 tr = tracks[0] tr['timeStamp'] = '...' assert tr == {'uid': 'rec-1', 'head': {'taskId': 't01', 'userName': 'john'}, 'data': {'activity': 'testing'}, 'timeStamp': '...'} #print('\nLogs: ', caplog.text)