1
0
mirror of synced 2026-01-06 15:03:36 -05:00
Files
airbyte/airbyte-integrations/connectors/source-stripe/unit_tests/test_source.py
2023-07-25 19:11:47 -04:00

78 lines
2.5 KiB
Python

#
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
#
import json
from unittest.mock import Mock, patch
import pendulum
import pytest
import source_stripe
from source_stripe import SourceStripe
from source_stripe.source import Invoices
now_dt = pendulum.now()
SECONDS_IN_DAY = 24 * 60 * 60
@pytest.mark.parametrize(
"lookback_window_days, current_state, expected, message",
[
(None, now_dt.timestamp(), now_dt.timestamp(),
"if lookback_window_days is not set should not affect cursor value"),
(0, now_dt.timestamp(), now_dt.timestamp(),
"if lookback_window_days is not set should not affect cursor value"),
(10, now_dt.timestamp(), int(now_dt.timestamp() - SECONDS_IN_DAY * 10),
"Should calculate cursor value as expected"),
# ignore sign
(-10, now_dt.timestamp(), int(now_dt.timestamp() - SECONDS_IN_DAY * 10),
"Should not care for the sign, use the module"),
],
)
def test_lookback_window(lookback_window_days, current_state, expected, message):
inv_stream = Invoices(account_id=213, start_date=1577836800,
lookback_window_days=lookback_window_days)
inv_stream.cursor_field = "created"
assert inv_stream.get_start_timestamp(
{"created": current_state}) == expected, message
def test_source_streams():
with open("sample_files/config.json") as f:
config = json.load(f)
streams = SourceStripe().streams(config=config)
assert len(streams) == 45
@pytest.fixture(name="config")
def config_fixture():
config = {"client_secret": "sk_test(live)_<secret>",
"account_id": "<account_id>", "start_date": "2020-05-01T00:00:00Z"}
return config
@pytest.fixture(name="logger_mock")
def logger_mock_fixture():
return patch("source_tiktok_marketing.source.logger")
@patch.object(source_stripe.source, "stripe")
def test_source_check_connection_ok(mocked_client, config, logger_mock):
assert SourceStripe().check_connection(
logger_mock, config=config) == (True, None)
@patch.object(source_stripe.source, "stripe")
def test_source_check_connection_failure(mocked_client, config, logger_mock):
exception = Exception("Test")
mocked_client.Account.retrieve = Mock(side_effect=exception)
assert SourceStripe().check_connection(
logger_mock, config=config) == (False, exception)
@patch.object(source_stripe.source, "stripe")
def test_streams_are_unique(mocked_client, config):
streams = [s.name for s in SourceStripe().streams(config)]
assert sorted(streams) == sorted(set(streams))