Skip to content

Commit 15fe51b

Browse files
authored
[low-code connectors] add a few unit tests (#13666)
* add a couple of unit tests * refactor tests
1 parent aa3a1b4 commit 15fe51b

File tree

2 files changed

+32
-41
lines changed

2 files changed

+32
-41
lines changed

airbyte-cdk/python/unit_tests/sources/declarative/extractors/test_jello.py

Lines changed: 29 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -4,63 +4,51 @@
44

55
import json
66

7+
import pytest
78
import requests
89
from airbyte_cdk.sources.declarative.decoders.json_decoder import JsonDecoder
910
from airbyte_cdk.sources.declarative.extractors.jello import JelloExtractor
1011

1112
config = {"field": "record_array"}
12-
decoder = JsonDecoder()
13-
14-
15-
def test():
16-
transform = "_.data"
17-
extractor = JelloExtractor(transform, decoder, config)
18-
19-
records = [{"id": 1}, {"id": 2}]
20-
body = {"data": records}
21-
response = create_response(body)
22-
actual_records = extractor.extract_records(response)
23-
24-
assert actual_records == records
25-
26-
27-
def test_field_in_config():
28-
transform = "_.{{ config['field'] }}"
29-
extractor = JelloExtractor(transform, decoder, config)
13+
kwargs = {"data_field": "records"}
3014

31-
records = [{"id": 1}, {"id": 2}]
32-
body = {"record_array": records}
33-
response = create_response(body)
34-
actual_records = extractor.extract_records(response)
35-
36-
assert actual_records == records
15+
decoder = JsonDecoder()
3716

3817

39-
def test_field_in_kwargs():
40-
transform = "_.{{ kwargs['data_field'] }}"
41-
kwargs = {"data_field": "records"}
18+
@pytest.mark.parametrize(
19+
"test_name, transform, body, expected_records",
20+
[
21+
("test_extract_from_array", "_.data", {"data": [{"id": 1}, {"id": 2}]}, [{"id": 1}, {"id": 2}]),
22+
("test_field_in_config", "_.{{ config['field'] }}", {"record_array": [{"id": 1}, {"id": 2}]}, [{"id": 1}, {"id": 2}]),
23+
("test_field_in_kwargs", "_.{{ kwargs['data_field'] }}", {"records": [{"id": 1}, {"id": 2}]}, [{"id": 1}, {"id": 2}]),
24+
("test_default", "_{{kwargs['field']}}", [{"id": 1}, {"id": 2}], [{"id": 1}, {"id": 2}]),
25+
(
26+
"test_remove_fields_from_records",
27+
"[{k:v for k,v in d.items() if k != 'value_to_remove'} for d in _.data]",
28+
{"data": [{"id": 1, "value": "HELLO", "value_to_remove": "fail"}, {"id": 2, "value": "WORLD", "value_to_remove": "fail"}]},
29+
[{"id": 1, "value": "HELLO"}, {"id": 2, "value": "WORLD"}],
30+
),
31+
(
32+
"test_add_fields_from_records",
33+
"[{**{k:v for k,v in d.items()}, **{'project_id': d['project']['id']}} for d in _.data]",
34+
{"data": [{"id": 1, "value": "HELLO", "project": {"id": 8}}, {"id": 2, "value": "WORLD", "project": {"id": 9}}]},
35+
[
36+
{"id": 1, "value": "HELLO", "project_id": 8, "project": {"id": 8}},
37+
{"id": 2, "value": "WORLD", "project_id": 9, "project": {"id": 9}},
38+
],
39+
),
40+
],
41+
)
42+
def test(test_name, transform, body, expected_records):
4243
extractor = JelloExtractor(transform, decoder, config, kwargs=kwargs)
4344

44-
records = [{"id": 1}, {"id": 2}]
45-
body = {"records": records}
4645
response = create_response(body)
4746
actual_records = extractor.extract_records(response)
4847

49-
assert actual_records == records
48+
assert actual_records == expected_records
5049

5150

5251
def create_response(body):
5352
response = requests.Response()
5453
response._content = json.dumps(body).encode("utf-8")
5554
return response
56-
57-
58-
def test_default():
59-
transform = "_{{kwargs['field']}}"
60-
extractor = JelloExtractor(transform, decoder, config)
61-
62-
records = [{"id": 1}, {"id": 2}]
63-
response = create_response(records)
64-
actual_records = extractor.extract_records(response)
65-
66-
assert actual_records == records

airbyte-cdk/python/unit_tests/sources/declarative/interpolation/test_interpolated_boolean.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"string_key": "compare_me",
1111
"zero_value": 0,
1212
"empty_array": [],
13+
"non_empty_array": [1],
1314
"empty_dict": {},
1415
"empty_tuple": (),
1516
}
@@ -29,6 +30,8 @@
2930
("test_empty_dict_is_false", "{{ config['empty_dict'] }}", False),
3031
("test_empty_tuple_is_false", "{{ config['empty_tuple'] }}", False),
3132
("test_lowercase_false", '{{ "false" }}', False),
33+
("test_value_in_array", "{{ 1 in config['non_empty_array'] }}", True),
34+
("test_value_not_in_array", "{{ 2 in config['non_empty_array'] }}", False),
3235
],
3336
)
3437
def test_interpolated_boolean(test_name, template, expected_result):

0 commit comments

Comments
 (0)