mirror of https://github.com/langgenius/dify.git
114 lines
4.5 KiB
Python
114 lines
4.5 KiB
Python
import pytest
|
|
|
|
from libs.helper import escape_like_pattern, extract_tenant_id
|
|
from models.account import Account
|
|
from models.model import EndUser
|
|
|
|
|
|
class TestExtractTenantId:
|
|
"""Test cases for the extract_tenant_id utility function."""
|
|
|
|
def test_extract_tenant_id_from_account_with_tenant(self):
|
|
"""Test extracting tenant_id from Account with current_tenant_id."""
|
|
# Create a mock Account object
|
|
account = Account(name="test", email="test@example.com")
|
|
# Mock the current_tenant_id property
|
|
account._current_tenant = type("MockTenant", (), {"id": "account-tenant-123"})()
|
|
|
|
tenant_id = extract_tenant_id(account)
|
|
assert tenant_id == "account-tenant-123"
|
|
|
|
def test_extract_tenant_id_from_account_without_tenant(self):
|
|
"""Test extracting tenant_id from Account without current_tenant_id."""
|
|
# Create a mock Account object
|
|
account = Account(name="test", email="test@example.com")
|
|
account._current_tenant = None
|
|
|
|
tenant_id = extract_tenant_id(account)
|
|
assert tenant_id is None
|
|
|
|
def test_extract_tenant_id_from_enduser_with_tenant(self):
|
|
"""Test extracting tenant_id from EndUser with tenant_id."""
|
|
# Create a mock EndUser object
|
|
end_user = EndUser()
|
|
end_user.tenant_id = "enduser-tenant-456"
|
|
|
|
tenant_id = extract_tenant_id(end_user)
|
|
assert tenant_id == "enduser-tenant-456"
|
|
|
|
def test_extract_tenant_id_from_enduser_without_tenant(self):
|
|
"""Test extracting tenant_id from EndUser without tenant_id."""
|
|
# Create a mock EndUser object
|
|
end_user = EndUser()
|
|
end_user.tenant_id = None
|
|
|
|
tenant_id = extract_tenant_id(end_user)
|
|
assert tenant_id is None
|
|
|
|
def test_extract_tenant_id_with_invalid_user_type(self):
|
|
"""Test extracting tenant_id with invalid user type raises ValueError."""
|
|
invalid_user = "not_a_user_object"
|
|
|
|
with pytest.raises(ValueError, match="Invalid user type.*Expected Account or EndUser"):
|
|
extract_tenant_id(invalid_user)
|
|
|
|
def test_extract_tenant_id_with_none_user(self):
|
|
"""Test extracting tenant_id with None user raises ValueError."""
|
|
with pytest.raises(ValueError, match="Invalid user type.*Expected Account or EndUser"):
|
|
extract_tenant_id(None)
|
|
|
|
def test_extract_tenant_id_with_dict_user(self):
|
|
"""Test extracting tenant_id with dict user raises ValueError."""
|
|
dict_user = {"id": "123", "tenant_id": "456"}
|
|
|
|
with pytest.raises(ValueError, match="Invalid user type.*Expected Account or EndUser"):
|
|
extract_tenant_id(dict_user)
|
|
|
|
|
|
class TestEscapeLikePattern:
|
|
"""Test cases for the escape_like_pattern utility function."""
|
|
|
|
def test_escape_percent_character(self):
|
|
"""Test escaping percent character."""
|
|
result = escape_like_pattern("50% discount")
|
|
assert result == "50\\% discount"
|
|
|
|
def test_escape_underscore_character(self):
|
|
"""Test escaping underscore character."""
|
|
result = escape_like_pattern("test_data")
|
|
assert result == "test\\_data"
|
|
|
|
def test_escape_backslash_character(self):
|
|
"""Test escaping backslash character."""
|
|
result = escape_like_pattern("path\\to\\file")
|
|
assert result == "path\\\\to\\\\file"
|
|
|
|
def test_escape_combined_special_characters(self):
|
|
"""Test escaping multiple special characters together."""
|
|
result = escape_like_pattern("file_50%\\path")
|
|
assert result == "file\\_50\\%\\\\path"
|
|
|
|
def test_escape_empty_string(self):
|
|
"""Test escaping empty string returns empty string."""
|
|
result = escape_like_pattern("")
|
|
assert result == ""
|
|
|
|
def test_escape_none_handling(self):
|
|
"""Test escaping None returns None (falsy check handles it)."""
|
|
# The function checks `if not pattern`, so None is falsy and returns as-is
|
|
result = escape_like_pattern(None)
|
|
assert result is None
|
|
|
|
def test_escape_normal_string_no_change(self):
|
|
"""Test that normal strings without special characters are unchanged."""
|
|
result = escape_like_pattern("normal text")
|
|
assert result == "normal text"
|
|
|
|
def test_escape_order_matters(self):
|
|
"""Test that backslash is escaped first to prevent double escaping."""
|
|
# If we escape % first, then escape \, we might get wrong results
|
|
# This test ensures the order is correct: \ first, then % and _
|
|
result = escape_like_pattern("test\\%_value")
|
|
# Should be: test\\\%\_value
|
|
assert result == "test\\\\\\%\\_value"
|