| def test_init_success_with_all_config(self): | def test_init_success_with_all_config(self): | ||||
| """Test successful initialization when all required config is provided.""" | """Test successful initialization when all required config is provided.""" | ||||
| with patch("extensions.storage.supabase_storage.dify_config") as mock_config: | |||||
| with patch("extensions.storage.supabase_storage.dify_config", autospec=True) as mock_config: | |||||
| mock_config.SUPABASE_URL = "https://test.supabase.co" | mock_config.SUPABASE_URL = "https://test.supabase.co" | ||||
| mock_config.SUPABASE_API_KEY = "test-api-key" | mock_config.SUPABASE_API_KEY = "test-api-key" | ||||
| mock_config.SUPABASE_BUCKET_NAME = "test-bucket" | mock_config.SUPABASE_BUCKET_NAME = "test-bucket" | ||||
| with patch("extensions.storage.supabase_storage.Client") as mock_client_class: | |||||
| with patch("extensions.storage.supabase_storage.Client", autospec=True) as mock_client_class: | |||||
| mock_client = Mock() | mock_client = Mock() | ||||
| mock_client_class.return_value = mock_client | mock_client_class.return_value = mock_client | ||||
| def test_init_raises_error_when_url_missing(self): | def test_init_raises_error_when_url_missing(self): | ||||
| """Test initialization raises ValueError when SUPABASE_URL is None.""" | """Test initialization raises ValueError when SUPABASE_URL is None.""" | ||||
| with patch("extensions.storage.supabase_storage.dify_config") as mock_config: | |||||
| with patch("extensions.storage.supabase_storage.dify_config", autospec=True) as mock_config: | |||||
| mock_config.SUPABASE_URL = None | mock_config.SUPABASE_URL = None | ||||
| mock_config.SUPABASE_API_KEY = "test-api-key" | mock_config.SUPABASE_API_KEY = "test-api-key" | ||||
| mock_config.SUPABASE_BUCKET_NAME = "test-bucket" | mock_config.SUPABASE_BUCKET_NAME = "test-bucket" | ||||
| def test_init_raises_error_when_api_key_missing(self): | def test_init_raises_error_when_api_key_missing(self): | ||||
| """Test initialization raises ValueError when SUPABASE_API_KEY is None.""" | """Test initialization raises ValueError when SUPABASE_API_KEY is None.""" | ||||
| with patch("extensions.storage.supabase_storage.dify_config") as mock_config: | |||||
| with patch("extensions.storage.supabase_storage.dify_config", autospec=True) as mock_config: | |||||
| mock_config.SUPABASE_URL = "https://test.supabase.co" | mock_config.SUPABASE_URL = "https://test.supabase.co" | ||||
| mock_config.SUPABASE_API_KEY = None | mock_config.SUPABASE_API_KEY = None | ||||
| mock_config.SUPABASE_BUCKET_NAME = "test-bucket" | mock_config.SUPABASE_BUCKET_NAME = "test-bucket" | ||||
| def test_init_raises_error_when_bucket_name_missing(self): | def test_init_raises_error_when_bucket_name_missing(self): | ||||
| """Test initialization raises ValueError when SUPABASE_BUCKET_NAME is None.""" | """Test initialization raises ValueError when SUPABASE_BUCKET_NAME is None.""" | ||||
| with patch("extensions.storage.supabase_storage.dify_config") as mock_config: | |||||
| with patch("extensions.storage.supabase_storage.dify_config", autospec=True) as mock_config: | |||||
| mock_config.SUPABASE_URL = "https://test.supabase.co" | mock_config.SUPABASE_URL = "https://test.supabase.co" | ||||
| mock_config.SUPABASE_API_KEY = "test-api-key" | mock_config.SUPABASE_API_KEY = "test-api-key" | ||||
| mock_config.SUPABASE_BUCKET_NAME = None | mock_config.SUPABASE_BUCKET_NAME = None | ||||
| def test_create_bucket_when_not_exists(self): | def test_create_bucket_when_not_exists(self): | ||||
| """Test create_bucket creates bucket when it doesn't exist.""" | """Test create_bucket creates bucket when it doesn't exist.""" | ||||
| with patch("extensions.storage.supabase_storage.dify_config") as mock_config: | |||||
| with patch("extensions.storage.supabase_storage.dify_config", autospec=True) as mock_config: | |||||
| mock_config.SUPABASE_URL = "https://test.supabase.co" | mock_config.SUPABASE_URL = "https://test.supabase.co" | ||||
| mock_config.SUPABASE_API_KEY = "test-api-key" | mock_config.SUPABASE_API_KEY = "test-api-key" | ||||
| mock_config.SUPABASE_BUCKET_NAME = "test-bucket" | mock_config.SUPABASE_BUCKET_NAME = "test-bucket" | ||||
| with patch("extensions.storage.supabase_storage.Client") as mock_client_class: | |||||
| with patch("extensions.storage.supabase_storage.Client", autospec=True) as mock_client_class: | |||||
| mock_client = Mock() | mock_client = Mock() | ||||
| mock_client_class.return_value = mock_client | mock_client_class.return_value = mock_client | ||||
| def test_create_bucket_when_exists(self): | def test_create_bucket_when_exists(self): | ||||
| """Test create_bucket does not create bucket when it already exists.""" | """Test create_bucket does not create bucket when it already exists.""" | ||||
| with patch("extensions.storage.supabase_storage.dify_config") as mock_config: | |||||
| with patch("extensions.storage.supabase_storage.dify_config", autospec=True) as mock_config: | |||||
| mock_config.SUPABASE_URL = "https://test.supabase.co" | mock_config.SUPABASE_URL = "https://test.supabase.co" | ||||
| mock_config.SUPABASE_API_KEY = "test-api-key" | mock_config.SUPABASE_API_KEY = "test-api-key" | ||||
| mock_config.SUPABASE_BUCKET_NAME = "test-bucket" | mock_config.SUPABASE_BUCKET_NAME = "test-bucket" | ||||
| with patch("extensions.storage.supabase_storage.Client") as mock_client_class: | |||||
| with patch("extensions.storage.supabase_storage.Client", autospec=True) as mock_client_class: | |||||
| mock_client = Mock() | mock_client = Mock() | ||||
| mock_client_class.return_value = mock_client | mock_client_class.return_value = mock_client | ||||
| @pytest.fixture | @pytest.fixture | ||||
| def storage_with_mock_client(self): | def storage_with_mock_client(self): | ||||
| """Fixture providing SupabaseStorage with mocked client.""" | """Fixture providing SupabaseStorage with mocked client.""" | ||||
| with patch("extensions.storage.supabase_storage.dify_config") as mock_config: | |||||
| with patch("extensions.storage.supabase_storage.dify_config", autospec=True) as mock_config: | |||||
| mock_config.SUPABASE_URL = "https://test.supabase.co" | mock_config.SUPABASE_URL = "https://test.supabase.co" | ||||
| mock_config.SUPABASE_API_KEY = "test-api-key" | mock_config.SUPABASE_API_KEY = "test-api-key" | ||||
| mock_config.SUPABASE_BUCKET_NAME = "test-bucket" | mock_config.SUPABASE_BUCKET_NAME = "test-bucket" | ||||
| with patch("extensions.storage.supabase_storage.Client") as mock_client_class: | |||||
| with patch("extensions.storage.supabase_storage.Client", autospec=True) as mock_client_class: | |||||
| mock_client = Mock() | mock_client = Mock() | ||||
| mock_client_class.return_value = mock_client | mock_client_class.return_value = mock_client | ||||
| def test_bucket_exists_returns_true_when_bucket_found(self): | def test_bucket_exists_returns_true_when_bucket_found(self): | ||||
| """Test bucket_exists returns True when bucket is found in list.""" | """Test bucket_exists returns True when bucket is found in list.""" | ||||
| with patch("extensions.storage.supabase_storage.dify_config") as mock_config: | |||||
| with patch("extensions.storage.supabase_storage.dify_config", autospec=True) as mock_config: | |||||
| mock_config.SUPABASE_URL = "https://test.supabase.co" | mock_config.SUPABASE_URL = "https://test.supabase.co" | ||||
| mock_config.SUPABASE_API_KEY = "test-api-key" | mock_config.SUPABASE_API_KEY = "test-api-key" | ||||
| mock_config.SUPABASE_BUCKET_NAME = "test-bucket" | mock_config.SUPABASE_BUCKET_NAME = "test-bucket" | ||||
| with patch("extensions.storage.supabase_storage.Client") as mock_client_class: | |||||
| with patch("extensions.storage.supabase_storage.Client", autospec=True) as mock_client_class: | |||||
| mock_client = Mock() | mock_client = Mock() | ||||
| mock_client_class.return_value = mock_client | mock_client_class.return_value = mock_client | ||||
| def test_bucket_exists_returns_false_when_bucket_not_found(self): | def test_bucket_exists_returns_false_when_bucket_not_found(self): | ||||
| """Test bucket_exists returns False when bucket is not found in list.""" | """Test bucket_exists returns False when bucket is not found in list.""" | ||||
| with patch("extensions.storage.supabase_storage.dify_config") as mock_config: | |||||
| with patch("extensions.storage.supabase_storage.dify_config", autospec=True) as mock_config: | |||||
| mock_config.SUPABASE_URL = "https://test.supabase.co" | mock_config.SUPABASE_URL = "https://test.supabase.co" | ||||
| mock_config.SUPABASE_API_KEY = "test-api-key" | mock_config.SUPABASE_API_KEY = "test-api-key" | ||||
| mock_config.SUPABASE_BUCKET_NAME = "test-bucket" | mock_config.SUPABASE_BUCKET_NAME = "test-bucket" | ||||
| with patch("extensions.storage.supabase_storage.Client") as mock_client_class: | |||||
| with patch("extensions.storage.supabase_storage.Client", autospec=True) as mock_client_class: | |||||
| mock_client = Mock() | mock_client = Mock() | ||||
| mock_client_class.return_value = mock_client | mock_client_class.return_value = mock_client | ||||
| def test_bucket_exists_returns_false_when_no_buckets(self): | def test_bucket_exists_returns_false_when_no_buckets(self): | ||||
| """Test bucket_exists returns False when no buckets exist.""" | """Test bucket_exists returns False when no buckets exist.""" | ||||
| with patch("extensions.storage.supabase_storage.dify_config") as mock_config: | |||||
| with patch("extensions.storage.supabase_storage.dify_config", autospec=True) as mock_config: | |||||
| mock_config.SUPABASE_URL = "https://test.supabase.co" | mock_config.SUPABASE_URL = "https://test.supabase.co" | ||||
| mock_config.SUPABASE_API_KEY = "test-api-key" | mock_config.SUPABASE_API_KEY = "test-api-key" | ||||
| mock_config.SUPABASE_BUCKET_NAME = "test-bucket" | mock_config.SUPABASE_BUCKET_NAME = "test-bucket" | ||||
| with patch("extensions.storage.supabase_storage.Client") as mock_client_class: | |||||
| with patch("extensions.storage.supabase_storage.Client", autospec=True) as mock_client_class: | |||||
| mock_client = Mock() | mock_client = Mock() | ||||
| mock_client_class.return_value = mock_client | mock_client_class.return_value = mock_client | ||||