-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathconftest.py
More file actions
196 lines (159 loc) · 6.07 KB
/
conftest.py
File metadata and controls
196 lines (159 loc) · 6.07 KB
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
import json
import os
from typing import Dict
import numpy as np
import pytest
from pandas import DataFrame
from linuxforhealth.csvtofhir import converter
from linuxforhealth.csvtofhir.config import ConverterConfig
from linuxforhealth.csvtofhir.model.contract import DataContract
from linuxforhealth.csvtofhir.pipeline import tasks
from tests.support import resources_directory
@pytest.fixture
def data_contract_directory() -> str:
return os.path.join(resources_directory, "data-contract")
@pytest.fixture
def data_contract_with_headers_data(data_contract_directory: str) -> Dict:
"""
A dictionary data fixture containing DataContract compatible data which includes a headers definition.
:return: dictionary
"""
file_path = os.path.join(data_contract_directory, "data-contract-headers.json")
with open(file_path) as f:
return json.load(f)
@pytest.fixture
def data_contract_with_headers_model(
data_contract_with_headers_data: Dict,
) -> DataContract:
"""
A DataContract model fixture, which is immutable.
:param data_contract_with_headers_data: The input data
:return: DataContract instance
"""
return DataContract(**data_contract_with_headers_data)
@pytest.fixture
def data_contract_with_skiprows_data(data_contract_directory: str) -> Dict:
"""
A dictionary data fixture containing DataContract compatible data which includes extra parameters for pandas.
:return: dictionary
"""
file_path = os.path.join(data_contract_directory, "data-contract-skiprows.json")
with open(file_path) as f:
return json.load(f)
@pytest.fixture
def data_contract_with_skiprows_model(
data_contract_with_skiprows_data: Dict,
) -> DataContract:
"""
A DataContract model fixture, which is immutable.
:param data_contract_with_skiprows_data: The input data
:return: DataContract instance
"""
return DataContract(**data_contract_with_skiprows_data)
@pytest.fixture
def data_contract_data(data_contract_directory: str) -> Dict:
"""
A dictionary data fixture containing DataContract compatible data.
:return: dictionary
"""
file_path = os.path.join(data_contract_directory, "data-contract.json")
with open(file_path) as f:
return json.load(f)
@pytest.fixture
def data_contract_model(data_contract_data: Dict) -> DataContract:
"""
A DataContract model fixture, which is immutable.
:param data_contract_data: The input data
:return: DataContract instance
"""
return DataContract(**data_contract_data)
@pytest.fixture
def data_contract_fixed_width_model(data_contract_fixed_width_file_data: Dict) -> DataContract:
"""
A DataContract model fixture, which is immutable.
:param data_contract_data: The input data
:return: DataContract instance
"""
return DataContract(**data_contract_fixed_width_file_data)
@pytest.fixture
def data_contract_fixed_width_file_data(data_contract_directory: str) -> DataContract:
"""
A dictionary data fixture containing DataContract compatible data for fixed width source files.
:return: dictionary
"""
file_path = os.path.join(data_contract_directory, "data-contract-fixed-width.json")
with open(file_path) as f:
return json.load(f)
@pytest.fixture
def data_contract_with_comments_data(data_contract_directory: str) -> Dict:
"""
A dictionary data fixture containing DataContract compatible data with comments.
:return: dictionary
"""
file_path = os.path.join(data_contract_directory, "data-contract-comments.json")
with open(file_path) as f:
return json.load(f)
@pytest.fixture
def data_contract_with_headers_comments_data(data_contract_directory: str) -> Dict:
"""
A dictionary data fixture containing DataContract compatible data which includes a headers definition and comments.
:return: dictionary
"""
file_path = os.path.join(data_contract_directory, "data-contract-headers-comments.json")
with open(file_path) as f:
return json.load(f)
@pytest.fixture
def csv_directory():
return f"{resources_directory}/csv"
@pytest.fixture
def input_data_frame() -> DataFrame:
"""
A DataFrame fixture used as an input to test cases.
:return: DataFrame
"""
data_frame: DataFrame = DataFrame()
data_frame["hospitalId"] = ["hospa"]
data_frame["encounterId"] = ["ENC1111"]
data_frame["patientId"] = ["MRN1234"]
data_frame["sex"] = ["M"]
data_frame["dateOfBirth"] = ["1951-07-06"]
data_frame["givenName"] = ["Thomas"]
data_frame["familyName"] = ["Jones"]
data_frame["ssn"] = ["123-45-6789"]
data_frame["ssnSystem"] = ["http://hl7.org/fhir/sid/us-ssn"]
data_frame["notNumber"] = [np.nan]
data_frame["rowNum"] = [1]
return data_frame
@pytest.fixture
def expected_data_frame(input_data_frame: DataFrame) -> DataFrame:
"""
A DataFrame fixture used as an expected "output" and modified for test cases.
The fixture is created using a deep copy of the input_data_frame fixture.
:param input_data_frame: The source fixture
:return:DataFrame
"""
data: Dict = input_data_frame.to_dict(orient="series")
data_frame: DataFrame = DataFrame.from_dict(data)
return data_frame
@pytest.fixture
def monkeypatch_converter_config(monkeypatch):
"""
Returns a function used to monkey patch the ConverterConfig.
The function accepts a single parameter, the configuration directory.
Example:
def test_something(monkeypatch_converter_config):
monkeypatch_converter_config(config_dir)
assert 1 == 1
:param monkeypatch: The pytest monkeypatch fixture
:return: function
"""
def _converter_config(config_dir: str = None):
monkeypatch.setattr(converter,
"get_converter_config",
lambda: ConverterConfig(mapping_config_directory=config_dir)
)
monkeypatch.setattr(tasks,
"get_converter_config",
lambda: ConverterConfig(mapping_config_directory=config_dir)
)
return _converter_config