def test_stream_slices(test_config): config = BraintreeConfig(**test_config) stream = TransactionStream(config) assert stream.stream_slices(SyncMode.incremental, None, {}) == [{ stream.cursor_field: config.start_date }] assert stream.stream_slices(SyncMode.incremental, None, {stream.cursor_field: "2010"}) == [{ stream.cursor_field: pendulum.datetime(2010, 1, 1) }] assert stream.stream_slices(SyncMode.full_refresh, None, {stream.cursor_field: "2010"}) == [{ stream.cursor_field: config.start_date }] test_config = deepcopy(test_config) test_config.pop("start_date") config = BraintreeConfig(**test_config) stream = TransactionStream(config) assert stream.stream_slices(SyncMode.incremental, None, {}) == [{ stream.cursor_field: pendulum.datetime(2020, 10, 10) }] assert stream.stream_slices(SyncMode.full_refresh, None, {stream.cursor_field: "2010"}) == [{ stream.cursor_field: pendulum.datetime(2020, 10, 10) }]
def check_connection( self, logger: AirbyteLogger, config: Mapping[str, Any]) -> Tuple[bool, Optional[Any]]: """ :return: AirbyteConnectionStatus indicating a Success or Failure """ config = BraintreeConfig(**config) gateway = BraintreeStream.create_gateway(config) gateway.customer.all() return True, ""
def test_plan(test_config): responses.add( responses.GET, "https://api.sandbox.braintreegateway.com:443/merchants/mech_id/plans/", body=load_file("plans.txt"), ) config = BraintreeConfig(**test_config) stream = PlanStream(config) records = read_all_records(stream) assert len(records) == 1
def test_subscription(test_config): responses.add( responses.POST, "https://api.sandbox.braintreegateway.com:443/merchants/mech_id/subscriptions/advanced_search_ids", body=load_file("subscriptions.txt"), ) config = BraintreeConfig(**test_config) stream = SubscriptionStream(config) records = read_all_records(stream) assert len(records) == 0
def test_dispute(test_config): responses.add( responses.POST, "https://api.sandbox.braintreegateway.com:443/merchants/mech_id/disputes/advanced_search", body=load_file("disputes.txt"), ) config = BraintreeConfig(**test_config) stream = DisputeStream(config) records = read_all_records(stream) assert len(records) == 1
def streams(self, config: Mapping[str, Any]) -> List[Stream]: config = BraintreeConfig(**config) return [ CustomerStream(config), DiscountStream(config), DisputeStream(config), TransactionStream(config), MerchantAccountStream(config), PlanStream(config), SubscriptionStream(config), ]
def test_transaction_stream(test_config): responses.add( responses.POST, "https://api.sandbox.braintreegateway.com:443/merchants/mech_id/transactions/advanced_search_ids", body=load_file("transaction_ids.txt"), ) responses.add( responses.POST, "https://api.sandbox.braintreegateway.com:443/merchants/mech_id/transactions/advanced_search", body=load_file("transaction__objs.txt"), ) config = BraintreeConfig(**test_config) stream = TransactionStream(config) records = read_all_records(stream) assert len(records) == 2
def test_customers_stream(test_config): responses.add( responses.POST, "https://api.sandbox.braintreegateway.com:443/merchants/mech_id/customers/advanced_search_ids", body=load_file("customers_ids.txt"), ) responses.add( responses.POST, "https://api.sandbox.braintreegateway.com:443/merchants/mech_id/customers/advanced_search", body=load_file("customers_obj_response.txt"), ) config = BraintreeConfig(**test_config) stream = CustomerStream(config) records = read_all_records(stream) assert len(records) == 1
def test_updated_state(test_config): config = BraintreeConfig(**test_config) stream = TransactionStream(config) assert stream.get_updated_state( {stream.cursor_field: "2021-08-10 14:32:39"}, {stream.cursor_field: pendulum.parse("2000")}) == { stream.cursor_field: "2021-08-10 14:32:39" } assert stream.get_updated_state( {stream.cursor_field: "2021-08-10 14:32:39"}, {stream.cursor_field: pendulum.parse("2100")}) == { stream.cursor_field: "2100-01-01 00:00:00" } assert stream.get_updated_state( {}, {stream.cursor_field: pendulum.parse("2100")}) == { stream.cursor_field: "2100-01-01 00:00:00" }
def spec(self, logger: AirbyteLogger) -> ConnectorSpecification: return ConnectorSpecification( connectionSpecification=BraintreeConfig.schema(), documentationUrl= "https://docs.airbyte.io/integrations/sources/braintree")
def create_gateway(config: BraintreeConfig): return braintree.BraintreeGateway( braintree.Configuration(**config.dict()))