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,32 @@ 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+
51+
2752@pytest .fixture (scope = 'session' )
2853def postgres_db ():
29- engine = create_engine (get_postgres_uri ())
54+ engine = create_engine (config .get_postgres_uri ())
55+ wait_for_postgres_to_come_up (engine )
3056 metadata .create_all (engine )
3157 return engine
3258
@@ -80,5 +106,6 @@ def _add_stock(lines):
80106@pytest .fixture
81107def restart_api ():
82108 (Path (__file__ ).parent / 'flask_app.py' ).touch ()
83- time .sleep (0.3 )
109+ time .sleep (0.5 )
110+ wait_for_webapp_to_come_up ()
84111
0 commit comments