feat(tenancy): implement workspace isolation

This commit is contained in:
Junyan Qin
2026-07-19 09:58:59 +08:00
parent 9eb292992d
commit c6f826fe2d
271 changed files with 31162 additions and 6106 deletions
@@ -14,6 +14,14 @@ from unittest.mock import Mock, AsyncMock
from importlib import import_module
from tests.factories import text_query
from langbot_plugin.entities.io.context import ActionContext
TEST_ACTION_CONTEXT = ActionContext(
instance_uuid='instance-a',
workspace_uuid='workspace-a',
placement_generation=1,
)
def get_connector_module():
@@ -69,6 +77,7 @@ class TestListPlugins:
connector = create_mock_connector()
connector.handler = AsyncMock()
connector.handler.require_bound_action_context = Mock(return_value=TEST_ACTION_CONTEXT)
connector.handler.list_plugins = AsyncMock(
return_value=[{'manifest': {'manifest': {'metadata': {'author': 'test', 'name': 'plugin'}}}}]
)
@@ -77,6 +86,8 @@ class TestListPlugins:
connector.handler.list_plugins.assert_called_once()
assert result == [{'manifest': {'manifest': {'metadata': {'author': 'test', 'name': 'plugin'}}}}]
statement = connector.ap.persistence_mgr.execute_async.await_args.args[0]
assert 'workspace-a' in statement.compile().params.values()
@pytest.mark.asyncio
async def test_filters_by_component_kinds(self):
@@ -85,6 +96,7 @@ class TestListPlugins:
connector = create_mock_connector()
connector.handler = AsyncMock()
connector.handler.require_bound_action_context = Mock(return_value=TEST_ACTION_CONTEXT)
connector.handler.list_plugins = AsyncMock(
return_value=[
{
@@ -112,6 +124,7 @@ class TestListPlugins:
connector = create_mock_connector()
connector.handler = AsyncMock()
connector.handler.require_bound_action_context = Mock(return_value=TEST_ACTION_CONTEXT)
connector.handler.list_plugins = AsyncMock(
return_value=[
{