import os import pytest from unittest.mock import patch from api.src.core.paths import ( _find_file, _scan_directories, get_content_type, get_temp_file_path, list_temp_files, get_temp_dir_size ) @pytest.mark.asyncio async def test_find_file_exists(): """Test finding existing file.""" with patch('aiofiles.os.path.exists') as mock_exists: mock_exists.return_value = True path = await _find_file("test.txt", ["/test/path"]) assert path == "/test/path/test.txt" @pytest.mark.asyncio async def test_find_file_not_exists(): """Test finding non-existent file.""" with patch('aiofiles.os.path.exists') as mock_exists: mock_exists.return_value = False with pytest.raises(FileNotFoundError, match="File not found"): await _find_file("test.txt", ["/test/path"]) @pytest.mark.asyncio async def test_find_file_with_filter(): """Test finding file with filter function.""" with patch('aiofiles.os.path.exists') as mock_exists: mock_exists.return_value = True filter_fn = lambda p: p.endswith('.txt') path = await _find_file("test.txt", ["/test/path"], filter_fn) assert path == "/test/path/test.txt" @pytest.mark.asyncio async def test_scan_directories(): """Test scanning directories.""" mock_entry = type('MockEntry', (), {'name': 'test.txt'})() with patch('aiofiles.os.path.exists') as mock_exists, \ patch('aiofiles.os.scandir') as mock_scandir: mock_exists.return_value = True mock_scandir.return_value = [mock_entry] files = await _scan_directories(["/test/path"]) assert "test.txt" in files @pytest.mark.asyncio async def test_get_content_type(): """Test content type detection.""" test_cases = [ ("test.html", "text/html"), ("test.js", "application/javascript"), ("test.css", "text/css"), ("test.png", "image/png"), ("test.unknown", "application/octet-stream"), ] for filename, expected in test_cases: content_type = await get_content_type(filename) assert content_type == expected @pytest.mark.asyncio async def test_get_temp_file_path(): """Test temp file path generation.""" with patch('aiofiles.os.path.exists') as mock_exists, \ patch('aiofiles.os.makedirs') as mock_makedirs: mock_exists.return_value = False path = await get_temp_file_path("test.wav") assert "test.wav" in path mock_makedirs.assert_called_once() @pytest.mark.asyncio async def test_list_temp_files(): """Test listing temp files.""" class MockEntry: def __init__(self, name): self.name = name def is_file(self): return True mock_entry = MockEntry('test.wav') with patch('aiofiles.os.path.exists') as mock_exists, \ patch('aiofiles.os.scandir') as mock_scandir: mock_exists.return_value = True mock_scandir.return_value = [mock_entry] files = await list_temp_files() assert "test.wav" in files @pytest.mark.asyncio async def test_get_temp_dir_size(): """Test getting temp directory size.""" class MockEntry: def __init__(self, path): self.path = path def is_file(self): return True mock_entry = MockEntry('/tmp/test.wav') mock_stat = type('MockStat', (), {'st_size': 1024})() with patch('aiofiles.os.path.exists') as mock_exists, \ patch('aiofiles.os.scandir') as mock_scandir, \ patch('aiofiles.os.stat') as mock_stat_fn: mock_exists.return_value = True mock_scandir.return_value = [mock_entry] mock_stat_fn.return_value = mock_stat size = await get_temp_dir_size() assert size == 1024