mirror of
https://github.com/langgenius/dify.git
synced 2026-04-18 12:28:32 +08:00
- Removed the manual heartbeat function for renewing the Redis lock during database migrations. - Integrated AutoRenewRedisLock to handle lock renewal automatically, simplifying the upgrade_db command. - Updated unit tests to reflect changes in lock handling and error management during migrations. (cherry picked from commit 8814256eb5fa20b29e554264f3b659b027bc4c9a)
126 lines
5.0 KiB
Python
126 lines
5.0 KiB
Python
"""Unit tests for enterprise service integrations.
|
|
|
|
This module covers the enterprise-only default workspace auto-join behavior:
|
|
- Enterprise mode disabled: no external calls
|
|
- Successful join / skipped join: no errors
|
|
- Failures (network/invalid response/invalid UUID): soft-fail wrapper must not raise
|
|
"""
|
|
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
|
|
from services.enterprise.enterprise_service import (
|
|
DefaultWorkspaceJoinResult,
|
|
EnterpriseService,
|
|
try_join_default_workspace,
|
|
)
|
|
|
|
|
|
class TestJoinDefaultWorkspace:
|
|
def test_join_default_workspace_success(self):
|
|
account_id = "11111111-1111-1111-1111-111111111111"
|
|
response = {"workspace_id": "22222222-2222-2222-2222-222222222222", "joined": True, "message": "ok"}
|
|
|
|
with patch("services.enterprise.enterprise_service.EnterpriseRequest.send_request") as mock_send_request:
|
|
mock_send_request.return_value = response
|
|
|
|
result = EnterpriseService.join_default_workspace(account_id=account_id)
|
|
|
|
assert isinstance(result, DefaultWorkspaceJoinResult)
|
|
assert result.workspace_id == response["workspace_id"]
|
|
assert result.joined is True
|
|
assert result.message == "ok"
|
|
|
|
mock_send_request.assert_called_once_with(
|
|
"POST",
|
|
"/default-workspace/members",
|
|
json={"account_id": account_id},
|
|
)
|
|
|
|
def test_join_default_workspace_invalid_response_format_raises(self):
|
|
account_id = "11111111-1111-1111-1111-111111111111"
|
|
|
|
with patch("services.enterprise.enterprise_service.EnterpriseRequest.send_request") as mock_send_request:
|
|
mock_send_request.return_value = "not-a-dict"
|
|
|
|
with pytest.raises(ValueError, match="Invalid response format"):
|
|
EnterpriseService.join_default_workspace(account_id=account_id)
|
|
|
|
def test_join_default_workspace_invalid_account_id_raises(self):
|
|
with pytest.raises(ValueError):
|
|
EnterpriseService.join_default_workspace(account_id="not-a-uuid")
|
|
|
|
|
|
class TestTryJoinDefaultWorkspace:
|
|
def test_try_join_default_workspace_enterprise_disabled_noop(self):
|
|
with (
|
|
patch("services.enterprise.enterprise_service.dify_config") as mock_config,
|
|
patch("services.enterprise.enterprise_service.EnterpriseService.join_default_workspace") as mock_join,
|
|
):
|
|
mock_config.ENTERPRISE_ENABLED = False
|
|
|
|
try_join_default_workspace("11111111-1111-1111-1111-111111111111")
|
|
|
|
mock_join.assert_not_called()
|
|
|
|
def test_try_join_default_workspace_successful_join_does_not_raise(self):
|
|
account_id = "11111111-1111-1111-1111-111111111111"
|
|
|
|
with (
|
|
patch("services.enterprise.enterprise_service.dify_config") as mock_config,
|
|
patch("services.enterprise.enterprise_service.EnterpriseService.join_default_workspace") as mock_join,
|
|
):
|
|
mock_config.ENTERPRISE_ENABLED = True
|
|
mock_join.return_value = DefaultWorkspaceJoinResult(
|
|
workspace_id="22222222-2222-2222-2222-222222222222",
|
|
joined=True,
|
|
message="ok",
|
|
)
|
|
|
|
# Should not raise
|
|
try_join_default_workspace(account_id)
|
|
|
|
mock_join.assert_called_once_with(account_id=account_id)
|
|
|
|
def test_try_join_default_workspace_skipped_join_does_not_raise(self):
|
|
account_id = "11111111-1111-1111-1111-111111111111"
|
|
|
|
with (
|
|
patch("services.enterprise.enterprise_service.dify_config") as mock_config,
|
|
patch("services.enterprise.enterprise_service.EnterpriseService.join_default_workspace") as mock_join,
|
|
):
|
|
mock_config.ENTERPRISE_ENABLED = True
|
|
mock_join.return_value = DefaultWorkspaceJoinResult(
|
|
workspace_id="",
|
|
joined=False,
|
|
message="no default workspace configured",
|
|
)
|
|
|
|
# Should not raise
|
|
try_join_default_workspace(account_id)
|
|
|
|
mock_join.assert_called_once_with(account_id=account_id)
|
|
|
|
def test_try_join_default_workspace_api_failure_soft_fails(self):
|
|
account_id = "11111111-1111-1111-1111-111111111111"
|
|
|
|
with (
|
|
patch("services.enterprise.enterprise_service.dify_config") as mock_config,
|
|
patch("services.enterprise.enterprise_service.EnterpriseService.join_default_workspace") as mock_join,
|
|
):
|
|
mock_config.ENTERPRISE_ENABLED = True
|
|
mock_join.side_effect = Exception("network failure")
|
|
|
|
# Should not raise
|
|
try_join_default_workspace(account_id)
|
|
|
|
mock_join.assert_called_once_with(account_id=account_id)
|
|
|
|
def test_try_join_default_workspace_invalid_account_id_soft_fails(self):
|
|
with patch("services.enterprise.enterprise_service.dify_config") as mock_config:
|
|
mock_config.ENTERPRISE_ENABLED = True
|
|
|
|
# Should not raise even though UUID parsing fails inside join_default_workspace
|
|
try_join_default_workspace("not-a-uuid")
|