mirror of
https://github.com/langgenius/dify.git
synced 2026-03-13 04:49:41 +08:00
142 lines
5.9 KiB
Python
142 lines
5.9 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},
|
|
timeout=1.0,
|
|
raise_for_status=True,
|
|
)
|
|
|
|
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")
|
|
|
|
def test_join_default_workspace_missing_required_fields_raises(self):
|
|
account_id = "11111111-1111-1111-1111-111111111111"
|
|
response = {"workspace_id": "", "message": "ok"} # missing "joined"
|
|
|
|
with patch("services.enterprise.enterprise_service.EnterpriseRequest.send_request") as mock_send_request:
|
|
mock_send_request.return_value = response
|
|
|
|
with pytest.raises(ValueError, match="Invalid response payload"):
|
|
EnterpriseService.join_default_workspace(account_id=account_id)
|
|
|
|
def test_join_default_workspace_joined_without_workspace_id_raises(self):
|
|
with pytest.raises(ValueError, match="workspace_id must be non-empty when joined is True"):
|
|
DefaultWorkspaceJoinResult(workspace_id="", joined=True, message="ok")
|
|
|
|
|
|
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")
|