Skip to content

Commit 3f7d458

Browse files
add unit tests
1 parent 95ceb4a commit 3f7d458

File tree

1 file changed

+89
-0
lines changed

1 file changed

+89
-0
lines changed

unit_tests/sources/file_based/test_file_based_stream_reader.py

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,16 @@
77
from io import IOBase
88
from os import path
99
from typing import Any, ClassVar, Dict, Iterable, List, Mapping, Optional, Set
10+
from unittest.mock import MagicMock
1011

1112
import pytest
1213
from pydantic.v1 import AnyUrl
1314

1415
from airbyte_cdk.sources.file_based.config.abstract_file_based_spec import AbstractFileBasedSpec
16+
from airbyte_cdk.sources.file_based.exceptions import FileSizeLimitError
17+
from airbyte_cdk.sources.file_based.file_based_file_transfer_reader import (
18+
AbstractFileBasedFileTransferReader,
19+
)
1520
from airbyte_cdk.sources.file_based.file_based_stream_reader import AbstractFileBasedStreamReader
1621
from airbyte_cdk.sources.file_based.remote_file import RemoteFile
1722
from airbyte_cdk.sources.utils.files_directory import get_files_directory
@@ -64,6 +69,69 @@
6469
}
6570

6671

72+
class TestFileBasedFileTransferReader(AbstractFileBasedFileTransferReader):
73+
@property
74+
def file_id(self) -> str:
75+
return "test_file_id"
76+
77+
@property
78+
def file_created_at(self) -> str:
79+
return "2025-05-05"
80+
81+
@property
82+
def file_updated_at(self) -> str:
83+
return "2025-05-06"
84+
85+
@property
86+
def file_size(self) -> int:
87+
return self.remote_file.size
88+
89+
def download_to_local_directory(self, local_file_path: str) -> None:
90+
pass
91+
92+
@property
93+
def source_file_relative_path(self) -> str:
94+
return "source/path"
95+
96+
@property
97+
def file_uri_for_logging(self) -> str:
98+
return "logging/url"
99+
100+
101+
class TestStreamReaderWithFileTransferClass(AbstractFileBasedStreamReader):
102+
__test__: ClassVar[bool] = False # Tell Pytest this is not a Pytest class, despite its name
103+
104+
file_transfer_reader_class = TestFileBasedFileTransferReader
105+
106+
@property
107+
def config(self) -> Optional[AbstractFileBasedSpec]:
108+
return self._config
109+
110+
@config.setter
111+
def config(self, value: AbstractFileBasedSpec) -> None:
112+
self._config = value
113+
114+
def get_matching_files(self, globs: List[str]) -> Iterable[RemoteFile]:
115+
pass
116+
117+
def open_file(self, file: RemoteFile) -> IOBase:
118+
pass
119+
120+
def get_file_acl_permissions(self, file: RemoteFile, logger: logging.Logger) -> Dict[str, Any]:
121+
return {}
122+
123+
def load_identity_groups(self, logger: logging.Logger) -> Iterable[Dict[str, Any]]:
124+
return [{}]
125+
126+
@property
127+
def file_permissions_schema(self) -> Dict[str, Any]:
128+
return {"type": "object", "properties": {}}
129+
130+
@property
131+
def identities_schema(self) -> Dict[str, Any]:
132+
return {"type": "object", "properties": {}}
133+
134+
67135
class TestStreamReader(AbstractFileBasedStreamReader):
68136
__test__: ClassVar[bool] = False # Tell Pytest this is not a Pytest class, despite its name
69137

@@ -458,3 +526,24 @@ def test_preserve_sub_directories_scenarios(
458526
assert file_paths[AbstractFileBasedStreamReader.LOCAL_FILE_PATH] == expected_local_file_path
459527
assert file_paths[AbstractFileBasedStreamReader.FILE_NAME] == path.basename(source_file_path)
460528
assert file_paths[AbstractFileBasedStreamReader.FILE_FOLDER] == path.dirname(source_file_path)
529+
530+
531+
def test_upload_with_file_transfer_reader():
532+
stream_reader = TestStreamReaderWithFileTransferClass()
533+
logger = logging.getLogger("airbyte")
534+
535+
remote_file = MagicMock()
536+
remote_file.size = 200
537+
remote_file.uri = "test_url"
538+
remote_file.mime_type = "test_mime_type"
539+
file_record_data, file_reference = stream_reader.upload(remote_file, "test_directory", logger)
540+
assert file_record_data
541+
assert file_reference
542+
543+
remote_file = MagicMock()
544+
remote_file.size = 2_500_000_000
545+
remote_file.uri = "test_url"
546+
remote_file.mime_type = "test_mime_type"
547+
logger = logging.getLogger("airbyte")
548+
with pytest.raises(FileSizeLimitError):
549+
stream_reader.upload(remote_file, "test_directory", logger)

0 commit comments

Comments
 (0)