#!/usr/bin/env python3
"""
Basic tests for neo-pod-desktop
"""

import os
import sys
import unittest
from unittest.mock import patch, MagicMock

sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "src"))

from audio_converter import AudioConverter
from metadata_handler import MetadataHandler


class TestAudioConverter(unittest.TestCase):
    """Test audio converter functionality"""

    def test_sanitize_filename(self):
        """Test filename sanitization"""
        converter = AudioConverter()

        sanitized = converter._sanitize_filename('File: with "invalid" chars?')
        self.assertEqual(sanitized, 'File_ with _invalid_ chars_')

        long_name = "A" * 150
        sanitized = converter._sanitize_filename(long_name)
        self.assertEqual(len(sanitized), 100)
        self.assertTrue(sanitized.endswith('...'))


class TestMetadataHandler(unittest.TestCase):
    """Test metadata handler functionality"""

    @patch('requests.get')
    def test_download_thumbnail(self, mock_get):
        """Test thumbnail download"""
        mock_response = MagicMock()
        mock_response.raise_for_status.return_value = None
        mock_response.content = b'fake_image_data'
        mock_get.return_value = mock_response

        with patch('PIL.Image.open') as mock_image_open:
            mock_image = MagicMock()
            mock_image.save.return_value = None
            mock_image_open.return_value = mock_image

            handler = MetadataHandler()
            result = handler.download_thumbnail("https://example.com/image.jpg")

            self.assertIsNotNone(result)
            mock_get.assert_called_once_with("https://example.com/image.jpg", timeout=10)


if __name__ == "__main__":
    unittest.main()
