1
0
mirror of synced 2026-01-06 15:03:36 -05:00
Files
airbyte/airbyte-integrations/connectors/source-mailchimp/unit_tests/test_streams.py
Artem Inzhyyants b5bc65276c Source Mailchimp: handle unknown error in EmailActivity (#25717)
* Source Mailchimp: handle unknown error in EmailActivity

* Source Mailchimp: update docs

* Source Mailchimp: refactor

* auto-bump connector version

---------

Co-authored-by: Baz <oleksandr.bazarnov@globallogic.com>
Co-authored-by: Octavia Squidington III <octavia-squidington-iii@users.noreply.github.com>
2023-05-03 14:18:53 +02:00

112 lines
3.7 KiB
Python

#
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
#
from unittest.mock import MagicMock
import pytest
import responses
from source_mailchimp.streams import Campaigns, EmailActivity, Lists
from utils import read_full_refresh, read_incremental
@pytest.mark.parametrize(
"stream, endpoint",
[
(Lists, "lists"),
(Campaigns, "campaigns"),
],
)
def test_stream_read(requests_mock, auth, stream, endpoint):
args = {"authenticator": auth}
stream = stream(**args)
stream_responses = [
{
"json": {
stream.data_field: [{"id": "test_id"}],
}
}
]
stream_url = stream.url_base + endpoint
requests_mock.register_uri("GET", stream_url, stream_responses)
records = read_full_refresh(stream)
assert records
def test_next_page_token(auth):
args = {"authenticator": auth}
stream = Lists(**args)
inputs = {"response": MagicMock()}
expected_token = None
assert stream.next_page_token(**inputs) == expected_token
resp = {"lists": [{"id": i} for i in range(1001)]}
inputs = {"response": MagicMock(json=MagicMock(return_value=resp))}
expected_token = {"offset": 1000}
assert stream.next_page_token(**inputs) == expected_token
@pytest.mark.parametrize(
"inputs, expected_params",
[
(
{"stream_slice": None, "stream_state": None, "next_page_token": None},
{"count": 1000, "sort_dir": "ASC", "sort_field": "date_created"},
),
(
{"stream_slice": None, "stream_state": None, "next_page_token": {"offset": 1000}},
{"count": 1000, "sort_dir": "ASC", "sort_field": "date_created", "offset": 1000},
),
],
)
def test_request_params(auth, inputs, expected_params):
args = {"authenticator": auth}
stream = Lists(**args)
assert stream.request_params(**inputs) == expected_params
@pytest.mark.parametrize(
"current_state_stream, latest_record, expected_state",
[
({}, {"date_created": "2020-01-01"}, {"date_created": "2020-01-01"}),
({"date_created": "2020-01-01"}, {"date_created": "2021-01-01"}, {"date_created": "2021-01-01"}),
({"date_created": "2021-01-01"}, {"date_created": "2022-01-01"}, {"date_created": "2022-01-01"}),
],
)
def test_get_updated_state(auth, current_state_stream, latest_record, expected_state):
args = {"authenticator": auth}
stream = Lists(**args)
new_stream_state = stream.get_updated_state(current_state_stream, latest_record)
assert new_stream_state == expected_state
@responses.activate
def test_stream_teams_read(auth):
args = {"authenticator": auth}
stream = EmailActivity(**args)
stream_url = stream.url_base + "reports/123/email-activity"
campaigns_stream_url = stream.url_base + "campaigns"
responses.add("GET", campaigns_stream_url, json={"campaigns": [{"id": 123}]})
response = {"emails": [{"campaign_id": 123, "activity": [{"action": "q", "timestamp": "2021-08-24T14:15:22Z"}]}]}
responses.add("GET", stream_url, json=response)
records = read_incremental(stream, {})
assert records
assert records == [{"campaign_id": 123, "action": "q", "timestamp": "2021-08-24T14:15:22Z"}]
assert len(responses.calls) == 2
@responses.activate
def test_stream_parse_json_error(auth, caplog):
args = {"authenticator": auth}
stream = EmailActivity(**args)
stream_url = stream.url_base + "reports/123/email-activity"
campaigns_stream_url = stream.url_base + "campaigns"
responses.add("GET", campaigns_stream_url, json={"campaigns": [{"id": 123}]})
responses.add("GET", stream_url, body="not_valid_json")
read_incremental(stream, {})
assert "response.content=b'not_valid_json'" in caplog.text