145 lines
4.9 KiB
Python
145 lines
4.9 KiB
Python
#
|
|
# Copyright (c) 2023 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
|