@@ -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,
@@ -39,8 +41,10 @@ const {
3941 mockResolveWorkflowContext,
4042 fakeEnrichment,
4143} = vi . hoisted ( ( ) => ( {
44+ mockAddTableColumn : vi . fn ( ) ,
4245 mockUpdateColumnType : vi . fn ( ) ,
4346 mockUpdateColumnOptions : vi . fn ( ) ,
47+ mockUpdateColumnReference : vi . fn ( ) ,
4448 mockResolveWorkspaceFileReference : vi . fn ( ) ,
4549 mockGetBoundWorkspaceFileSecretProvenance : vi . fn ( ) ,
4650 mockDownloadWorkspaceFile : vi . fn ( ) ,
@@ -201,11 +205,13 @@ vi.mock('@/lib/table/workflow-groups/service', () => ({
201205} ) )
202206
203207vi . mock ( '@/lib/table/columns/service' , ( ) => ( {
204- addTableColumn : vi . fn ( ) ,
208+ addTableColumn : mockAddTableColumn ,
205209 deleteColumn : vi . fn ( ) ,
206210 deleteColumns : mockDeleteColumns ,
207211 renameColumn : vi . fn ( ) ,
208212 updateColumnConstraints : vi . fn ( ) ,
213+ updateColumnCurrency : vi . fn ( ) ,
214+ updateColumnReference : mockUpdateColumnReference ,
209215 updateColumnType : mockUpdateColumnType ,
210216 updateColumnOptions : mockUpdateColumnOptions ,
211217} ) )
@@ -1694,6 +1700,94 @@ describe('userTableServerTool.update_rows_by_filter', () => {
16941700 } )
16951701} )
16961702
1703+ describe ( 'userTableServerTool reference column metadata' , ( ) => {
1704+ beforeEach ( ( ) => {
1705+ vi . clearAllMocks ( )
1706+ mockGetTableById . mockResolvedValue ( buildTable ( ) )
1707+ mockAddTableColumn . mockImplementation (
1708+ async ( _tableId : string , column : TableDefinition [ 'schema' ] [ 'columns' ] [ number ] ) =>
1709+ buildTable ( { schema : { columns : [ column ] } } )
1710+ )
1711+ } )
1712+
1713+ it ( 'forwards the target when adding a reference column' , async ( ) => {
1714+ const result = await userTableServerTool . execute (
1715+ {
1716+ operation : 'add_column' ,
1717+ args : {
1718+ tableId : 'tbl_1' ,
1719+ column : {
1720+ name : 'account' ,
1721+ type : 'reference' ,
1722+ referenceTableId : 'tbl_accounts' ,
1723+ } ,
1724+ } ,
1725+ } ,
1726+ buildToolContext ( )
1727+ )
1728+
1729+ expect ( result . success ) . toBe ( true )
1730+ expect ( mockAddTableColumn ) . toHaveBeenCalledWith (
1731+ 'tbl_1' ,
1732+ expect . objectContaining ( {
1733+ type : 'reference' ,
1734+ referenceTableId : 'tbl_accounts' ,
1735+ } ) ,
1736+ expect . any ( String ) ,
1737+ { expectedWorkspaceId : 'workspace-1' }
1738+ )
1739+ } )
1740+
1741+ it ( 'forwards a target-only update to the shared reference service' , async ( ) => {
1742+ const referenceTable = buildTable ( {
1743+ schema : {
1744+ columns : [
1745+ {
1746+ id : 'col_account' ,
1747+ name : 'account' ,
1748+ type : 'reference' ,
1749+ referenceTableId : 'tbl_accounts' ,
1750+ } ,
1751+ ] ,
1752+ } ,
1753+ } )
1754+ mockGetTableById . mockResolvedValue ( referenceTable )
1755+ mockUpdateColumnReference . mockResolvedValue ( {
1756+ ...referenceTable ,
1757+ schema : {
1758+ columns : [
1759+ {
1760+ ...referenceTable . schema . columns [ 0 ] ,
1761+ referenceTableId : 'tbl_companies' ,
1762+ } ,
1763+ ] ,
1764+ } ,
1765+ } )
1766+
1767+ const result = await userTableServerTool . execute (
1768+ {
1769+ operation : 'update_column' ,
1770+ args : {
1771+ tableId : 'tbl_1' ,
1772+ columnName : 'account' ,
1773+ referenceTableId : 'tbl_companies' ,
1774+ } ,
1775+ } ,
1776+ buildToolContext ( )
1777+ )
1778+
1779+ expect ( result . success ) . toBe ( true )
1780+ expect ( mockUpdateColumnReference ) . toHaveBeenCalledWith (
1781+ expect . objectContaining ( {
1782+ columnName : 'col_account' ,
1783+ referenceTableId : 'tbl_companies' ,
1784+ } ) ,
1785+ expect . any ( String ) ,
1786+ { expectedWorkspaceId : 'workspace-1' }
1787+ )
1788+ } )
1789+ } )
1790+
16971791describe ( 'userTableServerTool.update_column — select routing' , ( ) => {
16981792 const selectTable = buildTable ( {
16991793 schema : {
0 commit comments