Skip to content

Commit

Permalink
[low-code connectors] add a few unit tests (#13666)
Browse files Browse the repository at this point in the history
* add a couple of unit tests

* refactor tests
  • Loading branch information
girarda authored Jun 13, 2022
1 parent aa3a1b4 commit 15fe51b
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,63 +4,51 @@

import json

import pytest
import requests
from airbyte_cdk.sources.declarative.decoders.json_decoder import JsonDecoder
from airbyte_cdk.sources.declarative.extractors.jello import JelloExtractor

config = {"field": "record_array"}
decoder = JsonDecoder()


def test():
transform = "_.data"
extractor = JelloExtractor(transform, decoder, config)

records = [{"id": 1}, {"id": 2}]
body = {"data": records}
response = create_response(body)
actual_records = extractor.extract_records(response)

assert actual_records == records


def test_field_in_config():
transform = "_.{{ config['field'] }}"
extractor = JelloExtractor(transform, decoder, config)
kwargs = {"data_field": "records"}

records = [{"id": 1}, {"id": 2}]
body = {"record_array": records}
response = create_response(body)
actual_records = extractor.extract_records(response)

assert actual_records == records
decoder = JsonDecoder()


def test_field_in_kwargs():
transform = "_.{{ kwargs['data_field'] }}"
kwargs = {"data_field": "records"}
@pytest.mark.parametrize(
"test_name, transform, body, expected_records",
[
("test_extract_from_array", "_.data", {"data": [{"id": 1}, {"id": 2}]}, [{"id": 1}, {"id": 2}]),
("test_field_in_config", "_.{{ config['field'] }}", {"record_array": [{"id": 1}, {"id": 2}]}, [{"id": 1}, {"id": 2}]),
("test_field_in_kwargs", "_.{{ kwargs['data_field'] }}", {"records": [{"id": 1}, {"id": 2}]}, [{"id": 1}, {"id": 2}]),
("test_default", "_{{kwargs['field']}}", [{"id": 1}, {"id": 2}], [{"id": 1}, {"id": 2}]),
(
"test_remove_fields_from_records",
"[{k:v for k,v in d.items() if k != 'value_to_remove'} for d in _.data]",
{"data": [{"id": 1, "value": "HELLO", "value_to_remove": "fail"}, {"id": 2, "value": "WORLD", "value_to_remove": "fail"}]},
[{"id": 1, "value": "HELLO"}, {"id": 2, "value": "WORLD"}],
),
(
"test_add_fields_from_records",
"[{**{k:v for k,v in d.items()}, **{'project_id': d['project']['id']}} for d in _.data]",
{"data": [{"id": 1, "value": "HELLO", "project": {"id": 8}}, {"id": 2, "value": "WORLD", "project": {"id": 9}}]},
[
{"id": 1, "value": "HELLO", "project_id": 8, "project": {"id": 8}},
{"id": 2, "value": "WORLD", "project_id": 9, "project": {"id": 9}},
],
),
],
)
def test(test_name, transform, body, expected_records):
extractor = JelloExtractor(transform, decoder, config, kwargs=kwargs)

records = [{"id": 1}, {"id": 2}]
body = {"records": records}
response = create_response(body)
actual_records = extractor.extract_records(response)

assert actual_records == records
assert actual_records == expected_records


def create_response(body):
response = requests.Response()
response._content = json.dumps(body).encode("utf-8")
return response


def test_default():
transform = "_{{kwargs['field']}}"
extractor = JelloExtractor(transform, decoder, config)

records = [{"id": 1}, {"id": 2}]
response = create_response(records)
actual_records = extractor.extract_records(response)

assert actual_records == records
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"string_key": "compare_me",
"zero_value": 0,
"empty_array": [],
"non_empty_array": [1],
"empty_dict": {},
"empty_tuple": (),
}
Expand All @@ -29,6 +30,8 @@
("test_empty_dict_is_false", "{{ config['empty_dict'] }}", False),
("test_empty_tuple_is_false", "{{ config['empty_tuple'] }}", False),
("test_lowercase_false", '{{ "false" }}', False),
("test_value_in_array", "{{ 1 in config['non_empty_array'] }}", True),
("test_value_not_in_array", "{{ 2 in config['non_empty_array'] }}", False),
],
)
def test_interpolated_boolean(test_name, template, expected_result):
Expand Down

0 comments on commit 15fe51b

Please sign in to comment.