(t *testing.T)
| 278 | } |
| 279 | |
| 280 | func TestGetSchema_IncludeDetails(t *testing.T) { |
| 281 | ordersTable := map[string]any{ |
| 282 | "name": "orders", |
| 283 | "rowCount": "182394", |
| 284 | "comment": "Customer orders", |
| 285 | "columns": []map[string]any{ |
| 286 | makeColumnWithDefault("id", "int8", "", "Order ID"), |
| 287 | makeColumnWithDefault("user_id", "int4", "", "Customer ref"), |
| 288 | makeColumnWithDefault("status", "varchar(32)", "'pending'", "Status flag"), |
| 289 | }, |
| 290 | "indexes": []map[string]any{ |
| 291 | // Intentionally out of order. |
| 292 | makeIndex("orders_user_id_idx", false, []string{"user_id"}), |
| 293 | makePrimaryKeyIndex("orders_pkey", []string{"id"}), |
| 294 | }, |
| 295 | "foreignKeys": []map[string]any{ |
| 296 | { |
| 297 | "name": "orders_user_id_fkey", |
| 298 | "columns": []string{"user_id"}, |
| 299 | "referencedTable": "users", |
| 300 | "referencedColumns": []string{"id"}, |
| 301 | }, |
| 302 | }, |
| 303 | } |
| 304 | resp := makeMetadataResponse(makeSchema("public", ordersTable)) |
| 305 | |
| 306 | s, _ := mockMetadataServer(t, employeeDB(), resp) |
| 307 | |
| 308 | result, structured, err := s.handleGetSchema(testContext(), nil, SchemaInput{ |
| 309 | Database: "employee_db", |
| 310 | Include: "details", |
| 311 | }) |
| 312 | require.NoError(t, err) |
| 313 | require.False(t, result.IsError) |
| 314 | |
| 315 | output, ok := structured.(*SchemaOutput) |
| 316 | require.True(t, ok) |
| 317 | orders := output.Schemas[0].Tables[0] |
| 318 | require.Equal(t, "Customer orders", orders.Comment) |
| 319 | // Column defaults and comments populated. |
| 320 | require.Equal(t, "'pending'", orders.Columns[2].Default) |
| 321 | require.Equal(t, "Status flag", orders.Columns[2].Comment) |
| 322 | // Indexes sorted alphabetically. |
| 323 | require.Len(t, orders.Indexes, 2) |
| 324 | require.Equal(t, "orders_pkey", orders.Indexes[0].Name) |
| 325 | require.Equal(t, "orders_user_id_idx", orders.Indexes[1].Name) |
| 326 | // FKs present. |
| 327 | require.Len(t, orders.ForeignKeys, 1) |
| 328 | require.Equal(t, "orders_user_id_fkey", orders.ForeignKeys[0].Name) |
| 329 | require.Equal(t, "users", orders.ForeignKeys[0].ReferencedTable) |
| 330 | } |
| 331 | |
| 332 | func TestGetSchema_TableFilter_ServerSideFilter(t *testing.T) { |
| 333 | ordersTable := makeTable("orders", 182394, |
nothing calls this directly
no test coverage detected