33from pathlib import Path
44
55import pytest
6+ import requests
7+ from requests .exceptions import ConnectionError
8+ from sqlalchemy .exc import OperationalError
69from sqlalchemy import create_engine
710from sqlalchemy .orm import sessionmaker , clear_mappers
811
912from orm import metadata , start_mappers
10- from config import get_postgres_uri
13+ import config
1114
1215
1316@pytest .fixture
@@ -24,9 +27,31 @@ def session(in_memory_db):
2427 clear_mappers ()
2528
2629
30+ def wait_for_postgres_to_come_up (engine ):
31+ deadline = time .time () + 10
32+ while time .time () < deadline :
33+ try :
34+ return engine .connect ()
35+ except OperationalError :
36+ time .sleep (0.5 )
37+ pytest .fail ("Postgres never came up" )
38+
39+
40+ def wait_for_webapp_to_come_up ():
41+ deadline = time .time () + 10
42+ url = config .get_api_url ()
43+ while time .time () < deadline :
44+ try :
45+ return requests .get (url )
46+ except ConnectionError :
47+ time .sleep (0.5 )
48+ pytest .fail ("API never came up" )
49+
50+
2751@pytest .fixture (scope = "session" )
2852def postgres_db ():
29- engine = create_engine (get_postgres_uri ())
53+ engine = create_engine (config .get_postgres_uri ())
54+ wait_for_postgres_to_come_up (engine )
3055 metadata .create_all (engine )
3156 return engine
3257
@@ -78,4 +103,5 @@ def _add_stock(lines):
78103@pytest .fixture
79104def restart_api ():
80105 (Path (__file__ ).parent / "flask_app.py" ).touch ()
81- time .sleep (0.3 )
106+ time .sleep (0.5 )
107+ wait_for_webapp_to_come_up ()
0 commit comments