3
3
from pathlib import Path
4
4
5
5
import pytest
6
+ import requests
7
+ from requests .exceptions import ConnectionError
8
+ from sqlalchemy .exc import OperationalError
6
9
from sqlalchemy import create_engine
7
10
from sqlalchemy .orm import sessionmaker , clear_mappers
8
11
9
12
from orm import metadata , start_mappers
10
- from config import get_postgres_uri
13
+ import config
11
14
12
15
13
16
@pytest .fixture
@@ -24,9 +27,31 @@ def session(in_memory_db):
24
27
clear_mappers ()
25
28
26
29
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
+
27
51
@pytest .fixture (scope = "session" )
28
52
def 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 )
30
55
metadata .create_all (engine )
31
56
return engine
32
57
@@ -78,4 +103,5 @@ def _add_stock(lines):
78
103
@pytest .fixture
79
104
def restart_api ():
80
105
(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