1
0
mirror of synced 2026-01-10 00:03:08 -05:00
Files
airbyte/airbyte-integrations/connectors/source-microsoft-dataverse/unit_tests/test_source.py
danilo-dti 7ca371b26d 🎉 New Source: Microsoft Dataverse [python cdk] (#18646)
* Connector files

* Add test files

* Add integration test config files

* Multiple changes to make it on Airbyte standards

* Cleaning up

* More clean ups

* More clean ups

* Removed max pages

* Remove unused variable

* Correctly separating Full refresh and incremental

* Removed unused variables

* Fix full_refresh class

* Better code for creating stream classes

* Fixing review comments

* Update docs and Enum class

* Update type conversion function

* Fix enum class and update docs

* Update discover

* Implemented some unit tests

* Update discover

* Update test_source

* Increase discovery test timeout

* Update configured_catalog

* Fix default_cursor_field

* Adding final unit tests

* Update spec: set client_id and tenant_id as secrets

* Update discover to deal with Lookup and Picklist types

* Fix Lookup data type conversion

* add microsoft dataverse to source def

* run format

* auto-bump connector version

Co-authored-by: Marcelo Pio de Castro <marcelopiocastro@gmail.com>
Co-authored-by: daniloss99 <danilosiqueira99@gmail.com>
Co-authored-by: Marcos Marx <marcosmarxm@users.noreply.github.com>
Co-authored-by: marcosmarxm <marcosmarxm@gmail.com>
Co-authored-by: Octavia Squidington III <octavia-squidington-iii@users.noreply.github.com>
2022-11-14 09:02:05 -03:00

145 lines
4.9 KiB
Python

#
# Copyright (c) 2022 Airbyte, Inc., all rights reserved.
#
import json
from unittest import mock
from unittest.mock import MagicMock
from airbyte_cdk.models import SyncMode
from source_microsoft_dataverse.dataverse import AirbyteType
from source_microsoft_dataverse.source import SourceMicrosoftDataverse
from source_microsoft_dataverse.streams import IncrementalMicrosoftDataverseStream, MicrosoftDataverseStream
@mock.patch("source_microsoft_dataverse.source.do_request")
def test_check_connection(mock_request):
mock_request.return_value.raise_for_status = lambda: ()
source = SourceMicrosoftDataverse()
logger_mock, config_mock = MagicMock(), MagicMock()
assert source.check_connection(logger_mock, config_mock) == (True, None)
@mock.patch("source_microsoft_dataverse.source.get_auth")
@mock.patch("source_microsoft_dataverse.source.do_request")
def test_streams_incremental(mock_get_auth, mock_request):
streams = MagicMock()
streams.sync_mode = SyncMode.incremental
streams.stream.name = "test"
catalog = MagicMock()
catalog.streams = [streams]
config_mock = MagicMock()
source = SourceMicrosoftDataverse()
source.catalogs = catalog
streams = source.streams(config_mock)
expected_streams_number = 1
assert len(streams) == expected_streams_number
assert isinstance(streams[0], IncrementalMicrosoftDataverseStream)
assert streams[0].name == "test"
@mock.patch("source_microsoft_dataverse.source.get_auth")
@mock.patch("source_microsoft_dataverse.source.do_request")
def test_streams_full_refresh(mock_get_auth, mock_request):
streams = MagicMock()
streams.sync_mode = SyncMode.full_refresh
streams.stream.name = "test"
catalog = MagicMock()
catalog.streams = [streams]
config_mock = MagicMock()
source = SourceMicrosoftDataverse()
source.catalogs = catalog
streams = source.streams(config_mock)
expected_streams_number = 1
assert len(streams) == expected_streams_number
assert isinstance(streams[0], MicrosoftDataverseStream)
assert streams[0].name == "test"
@mock.patch("source_microsoft_dataverse.source.do_request")
def test_discover_incremental(mock_request):
result_json = json.loads('''
{
"value": [
{
"LogicalName": "stream",
"PrimaryIdAttribute": "primary",
"ChangeTrackingEnabled": true,
"CanChangeTrackingBeEnabled": {
"Value": true
},
"Attributes": [
{
"LogicalName": "test",
"AttributeType": "String"
},
{
"LogicalName": "modifiedon",
"AttributeType": "DateTime"
}
]
}
]
}
''')
mock_request.return_value.status.return_value = 200
mock_request.return_value.json.return_value = result_json
source = SourceMicrosoftDataverse()
logger_mock, config_mock = MagicMock(), MagicMock()
catalog = source.discover(logger_mock, config_mock)
assert not {'modifiedon'} ^ set(catalog.streams[0].default_cursor_field)
assert not {SyncMode.full_refresh, SyncMode.incremental} ^ set(catalog.streams[0].supported_sync_modes)
assert not {'primary'} ^ set(catalog.streams[0].source_defined_primary_key[0])
assert catalog.streams[0].json_schema["properties"]["test"] == AirbyteType.String.value
@mock.patch("source_microsoft_dataverse.source.do_request")
def test_discover_full_refresh(mock_request):
result_json = json.loads('''
{
"value": [
{
"LogicalName": "stream",
"PrimaryIdAttribute": "primary",
"ChangeTrackingEnabled": false,
"CanChangeTrackingBeEnabled": {
"Value": false
},
"Attributes": [
{
"LogicalName": "test",
"AttributeType": "String"
}
]
}
]
}
''')
mock_request.return_value.status.return_value = 200
mock_request.return_value.json.return_value = result_json
source = SourceMicrosoftDataverse()
logger_mock, config_mock = MagicMock(), MagicMock()
catalog = source.discover(logger_mock, config_mock)
assert catalog.streams[0].default_cursor_field is None or len(catalog.streams[0].default_cursor_field) == 0
assert not {SyncMode.full_refresh} ^ set(catalog.streams[0].supported_sync_modes)
assert not {'primary'} ^ set(catalog.streams[0].source_defined_primary_key[0])
assert catalog.streams[0].json_schema["properties"]["test"] == AirbyteType.String.value