/
test_helper_factory.py
77 lines (62 loc) · 2.53 KB
/
test_helper_factory.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
"""Test for the helper factory"""
from unittest.mock import MagicMock, Mock
import pytest
import cx_Oracle
import psycopg2
import pyodbc
from etlhelper import DbParams
from etlhelper.db_helper_factory import DB_HELPER_FACTORY
from etlhelper.exceptions import ETLHelperHelperError
from etlhelper.db_helpers import OracleDbHelper, PostgresDbHelper, MSSQLDbHelper
@pytest.mark.parametrize("dbtype_keyword, expected_helper",
[('ORACLE', OracleDbHelper),
('PG', PostgresDbHelper),
('MSSQL', MSSQLDbHelper)])
def test_from_dbparams(dbtype_keyword, expected_helper):
"""
Tests correct helper produced given a db params object
"""
db_params = MagicMock(DbParams)
db_params.dbtype = dbtype_keyword
helper = DB_HELPER_FACTORY.from_db_params(db_params)
assert isinstance(helper, expected_helper)
@pytest.mark.parametrize("expected_helper, db_class",
[(OracleDbHelper, cx_Oracle.Connection),
(PostgresDbHelper, psycopg2.extensions.connection),
(MSSQLDbHelper, pyodbc.Connection)])
def test_from_conn(expected_helper, db_class):
"""
Tests correct helper produced given a conn object
"""
conn = Mock()
# conn.__class__ = cx_Oracle.Connection
conn.__class__ = db_class
helper = DB_HELPER_FACTORY.from_conn(conn)
assert isinstance(helper, expected_helper)
def test_from_conn_not_registered():
"""
Tests helpful error message on attempt to choose unregistered conn type.
"""
conn = Mock()
conn.__class__ = "Not a real class"
with pytest.raises(ETLHelperHelperError,
match=r'Unsupported connection type.*'):
DB_HELPER_FACTORY.from_conn(conn)
def test_from_db_params_not_registered():
"""
Tests helpful error message on attempt to choose unregistered db_params
type.
"""
db_params = MagicMock(DbParams)
db_params.dbtype = 'Not a real type'
with pytest.raises(ETLHelperHelperError,
match=r'Unsupported DbParams.dbtype.*'):
DB_HELPER_FACTORY.from_db_params(db_params)
def test_from_conn_bad_type():
with pytest.raises(ETLHelperHelperError,
match=r'Expected connection-like object.*'):
DB_HELPER_FACTORY.from_conn('some string')
def test_from_db_params_bad_type():
with pytest.raises(ETLHelperHelperError,
match=r'Expected DbParams-like object.*'):
DB_HELPER_FACTORY.from_db_params('some string')