@@ -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 ( ) ,
@@ -196,11 +200,13 @@ vi.mock('@/lib/table/workflow-groups/service', () => ({
196200} ) )
197201
198202vi . mock ( '@/lib/table/columns/service' , ( ) => ( {
199- addTableColumn : vi . fn ( ) ,
203+ addTableColumn : mockAddTableColumn ,
200204 deleteColumn : vi . fn ( ) ,
201205 deleteColumns : mockDeleteColumns ,
202206 renameColumn : vi . fn ( ) ,
203207 updateColumnConstraints : vi . fn ( ) ,
208+ updateColumnCurrency : vi . fn ( ) ,
209+ updateColumnReference : mockUpdateColumnReference ,
204210 updateColumnType : mockUpdateColumnType ,
205211 updateColumnOptions : mockUpdateColumnOptions ,
206212} ) )
@@ -1582,6 +1588,94 @@ describe('userTableServerTool.update_rows_by_filter', () => {
15821588 } )
15831589} )
15841590
1591+ describe ( 'userTableServerTool reference column metadata' , ( ) => {
1592+ beforeEach ( ( ) => {
1593+ vi . clearAllMocks ( )
1594+ mockGetTableById . mockResolvedValue ( buildTable ( ) )
1595+ mockAddTableColumn . mockImplementation (
1596+ async ( _tableId : string , column : TableDefinition [ 'schema' ] [ 'columns' ] [ number ] ) =>
1597+ buildTable ( { schema : { columns : [ column ] } } )
1598+ )
1599+ } )
1600+
1601+ it ( 'forwards the target when adding a reference column' , async ( ) => {
1602+ const result = await userTableServerTool . execute (
1603+ {
1604+ operation : 'add_column' ,
1605+ args : {
1606+ tableId : 'tbl_1' ,
1607+ column : {
1608+ name : 'account' ,
1609+ type : 'reference' ,
1610+ referenceTableId : 'tbl_accounts' ,
1611+ } ,
1612+ } ,
1613+ } ,
1614+ buildToolContext ( )
1615+ )
1616+
1617+ expect ( result . success ) . toBe ( true )
1618+ expect ( mockAddTableColumn ) . toHaveBeenCalledWith (
1619+ 'tbl_1' ,
1620+ expect . objectContaining ( {
1621+ type : 'reference' ,
1622+ referenceTableId : 'tbl_accounts' ,
1623+ } ) ,
1624+ expect . any ( String ) ,
1625+ { expectedWorkspaceId : 'workspace-1' }
1626+ )
1627+ } )
1628+
1629+ it ( 'forwards a target-only update to the shared reference service' , async ( ) => {
1630+ const referenceTable = buildTable ( {
1631+ schema : {
1632+ columns : [
1633+ {
1634+ id : 'col_account' ,
1635+ name : 'account' ,
1636+ type : 'reference' ,
1637+ referenceTableId : 'tbl_accounts' ,
1638+ } ,
1639+ ] ,
1640+ } ,
1641+ } )
1642+ mockGetTableById . mockResolvedValue ( referenceTable )
1643+ mockUpdateColumnReference . mockResolvedValue ( {
1644+ ...referenceTable ,
1645+ schema : {
1646+ columns : [
1647+ {
1648+ ...referenceTable . schema . columns [ 0 ] ,
1649+ referenceTableId : 'tbl_companies' ,
1650+ } ,
1651+ ] ,
1652+ } ,
1653+ } )
1654+
1655+ const result = await userTableServerTool . execute (
1656+ {
1657+ operation : 'update_column' ,
1658+ args : {
1659+ tableId : 'tbl_1' ,
1660+ columnName : 'account' ,
1661+ referenceTableId : 'tbl_companies' ,
1662+ } ,
1663+ } ,
1664+ buildToolContext ( )
1665+ )
1666+
1667+ expect ( result . success ) . toBe ( true )
1668+ expect ( mockUpdateColumnReference ) . toHaveBeenCalledWith (
1669+ expect . objectContaining ( {
1670+ columnName : 'col_account' ,
1671+ referenceTableId : 'tbl_companies' ,
1672+ } ) ,
1673+ expect . any ( String ) ,
1674+ { expectedWorkspaceId : 'workspace-1' }
1675+ )
1676+ } )
1677+ } )
1678+
15851679describe ( 'userTableServerTool.update_column — select routing' , ( ) => {
15861680 const selectTable = buildTable ( {
15871681 schema : {
0 commit comments