@@ -7,8 +7,10 @@ import { OrchestrationError } from '@/lib/core/orchestration/types'
77import type { TableDefinition } from '@/lib/table'
88
99const {
10+ mockAddTableColumn,
1011 mockUpdateColumnType,
1112 mockUpdateColumnOptions,
13+ mockUpdateColumnReference,
1214 mockResolveWorkspaceFileReference,
1315 mockGetBoundWorkspaceFileSecretProvenance,
1416 mockDownloadWorkspaceFile,
@@ -37,8 +39,10 @@ const {
3739 mockResolveWorkflowContext,
3840 fakeEnrichment,
3941} = vi . hoisted ( ( ) => ( {
42+ mockAddTableColumn : vi . fn ( ) ,
4043 mockUpdateColumnType : vi . fn ( ) ,
4144 mockUpdateColumnOptions : vi . fn ( ) ,
45+ mockUpdateColumnReference : vi . fn ( ) ,
4246 mockResolveWorkspaceFileReference : vi . fn ( ) ,
4347 mockGetBoundWorkspaceFileSecretProvenance : vi . fn ( ) ,
4448 mockDownloadWorkspaceFile : vi . fn ( ) ,
@@ -197,11 +201,13 @@ vi.mock('@/lib/table/workflow-groups/service', () => ({
197201} ) )
198202
199203vi . mock ( '@/lib/table/columns/service' , ( ) => ( {
200- addTableColumn : vi . fn ( ) ,
204+ addTableColumn : mockAddTableColumn ,
201205 deleteColumn : vi . fn ( ) ,
202206 deleteColumns : mockDeleteColumns ,
203207 renameColumn : vi . fn ( ) ,
204208 updateColumnConstraints : vi . fn ( ) ,
209+ updateColumnCurrency : vi . fn ( ) ,
210+ updateColumnReference : mockUpdateColumnReference ,
205211 updateColumnType : mockUpdateColumnType ,
206212 updateColumnOptions : mockUpdateColumnOptions ,
207213} ) )
@@ -1682,6 +1688,94 @@ describe('userTableServerTool.update_rows_by_filter', () => {
16821688 } )
16831689} )
16841690
1691+ describe ( 'userTableServerTool reference column metadata' , ( ) => {
1692+ beforeEach ( ( ) => {
1693+ vi . clearAllMocks ( )
1694+ mockGetTableById . mockResolvedValue ( buildTable ( ) )
1695+ mockAddTableColumn . mockImplementation (
1696+ async ( _tableId : string , column : TableDefinition [ 'schema' ] [ 'columns' ] [ number ] ) =>
1697+ buildTable ( { schema : { columns : [ column ] } } )
1698+ )
1699+ } )
1700+
1701+ it ( 'forwards the target when adding a reference column' , async ( ) => {
1702+ const result = await userTableServerTool . execute (
1703+ {
1704+ operation : 'add_column' ,
1705+ args : {
1706+ tableId : 'tbl_1' ,
1707+ column : {
1708+ name : 'account' ,
1709+ type : 'reference' ,
1710+ referenceTableId : 'tbl_accounts' ,
1711+ } ,
1712+ } ,
1713+ } ,
1714+ buildToolContext ( )
1715+ )
1716+
1717+ expect ( result . success ) . toBe ( true )
1718+ expect ( mockAddTableColumn ) . toHaveBeenCalledWith (
1719+ 'tbl_1' ,
1720+ expect . objectContaining ( {
1721+ type : 'reference' ,
1722+ referenceTableId : 'tbl_accounts' ,
1723+ } ) ,
1724+ expect . any ( String ) ,
1725+ { expectedWorkspaceId : 'workspace-1' }
1726+ )
1727+ } )
1728+
1729+ it ( 'forwards a target-only update to the shared reference service' , async ( ) => {
1730+ const referenceTable = buildTable ( {
1731+ schema : {
1732+ columns : [
1733+ {
1734+ id : 'col_account' ,
1735+ name : 'account' ,
1736+ type : 'reference' ,
1737+ referenceTableId : 'tbl_accounts' ,
1738+ } ,
1739+ ] ,
1740+ } ,
1741+ } )
1742+ mockGetTableById . mockResolvedValue ( referenceTable )
1743+ mockUpdateColumnReference . mockResolvedValue ( {
1744+ ...referenceTable ,
1745+ schema : {
1746+ columns : [
1747+ {
1748+ ...referenceTable . schema . columns [ 0 ] ,
1749+ referenceTableId : 'tbl_companies' ,
1750+ } ,
1751+ ] ,
1752+ } ,
1753+ } )
1754+
1755+ const result = await userTableServerTool . execute (
1756+ {
1757+ operation : 'update_column' ,
1758+ args : {
1759+ tableId : 'tbl_1' ,
1760+ columnName : 'account' ,
1761+ referenceTableId : 'tbl_companies' ,
1762+ } ,
1763+ } ,
1764+ buildToolContext ( )
1765+ )
1766+
1767+ expect ( result . success ) . toBe ( true )
1768+ expect ( mockUpdateColumnReference ) . toHaveBeenCalledWith (
1769+ expect . objectContaining ( {
1770+ columnName : 'col_account' ,
1771+ referenceTableId : 'tbl_companies' ,
1772+ } ) ,
1773+ expect . any ( String ) ,
1774+ { expectedWorkspaceId : 'workspace-1' }
1775+ )
1776+ } )
1777+ } )
1778+
16851779describe ( 'userTableServerTool.update_column — select routing' , ( ) => {
16861780 const selectTable = buildTable ( {
16871781 schema : {
0 commit comments