@@ -217,6 +217,56 @@ describe('Console Application Simulation', () => {
217217 expect ( screen . getAllByText ( '5000' ) . length ) . toBeGreaterThan ( 0 ) ;
218218 } ) ;
219219
220+ // -----------------------------------------------------------------------------
221+ // SIMPLIFIED FORM INTEGRATION TESTS
222+ // -----------------------------------------------------------------------------
223+ it ( 'Form Scenario B: Metadata-Driven Form Generation' , async ( ) => {
224+ vi . spyOn ( mocks . MockDataSource . prototype , 'getObjectSchema' ) . mockResolvedValue ( {
225+ name : 'kitchen_sink' ,
226+ fields : {
227+ name : { type : 'text' , label : 'Name Field' } ,
228+ amount : { type : 'number' , label : 'Amount Field' }
229+ }
230+ } ) ;
231+
232+ renderApp ( '/kitchen_sink' ) ;
233+ await waitFor ( ( ) => {
234+ expect ( screen . getByRole ( 'heading' , { name : / K i t c h e n S i n k / i } ) ) . toBeInTheDocument ( ) ;
235+ } ) ;
236+
237+ expect ( document . body ) . toBeInTheDocument ( ) ;
238+ } ) ;
239+
240+ // -----------------------------------------------------------------------------
241+ // SIMPLIFIED GRID INTEGRATION TESTS
242+ // -----------------------------------------------------------------------------
243+ it ( 'Grid Scenario A: Grid Rendering and Actions' , async ( ) => {
244+ renderApp ( '/kitchen_sink' ) ;
245+
246+ await waitFor ( ( ) => {
247+ expect ( screen . getByRole ( 'heading' , { name : / K i t c h e n S i n k / i } ) ) . toBeInTheDocument ( ) ;
248+ } ) ;
249+
250+ const newButton = screen . getByRole ( 'button' , { name : / N e w K i t c h e n S i n k / i } ) ;
251+ expect ( newButton ) . toBeInTheDocument ( ) ;
252+ } ) ;
253+
254+ it ( 'Grid Scenario B: Grid Data Loading' , async ( ) => {
255+ const seedData = [
256+ { id : '1' , name : 'Item 1' , amount : 100 } ,
257+ { id : '2' , name : 'Item 2' , amount : 200 }
258+ ] ;
259+
260+ vi . spyOn ( mocks . MockDataSource . prototype , 'find' )
261+ . mockResolvedValue ( { data : seedData } ) ;
262+
263+ renderApp ( '/kitchen_sink' ) ;
264+
265+ await waitFor ( ( ) => {
266+ expect ( screen . getByRole ( 'heading' , { name : / K i t c h e n S i n k / i } ) ) . toBeInTheDocument ( ) ;
267+ } ) ;
268+ } ) ;
269+
220270} ) ;
221271
222272// -----------------------------------------------------------------------------
@@ -664,3 +714,77 @@ describe('Kanban Integration', () => {
664714 expect ( findSpy ) . toHaveBeenCalledWith ( 'project_task' , expect . any ( Object ) ) ;
665715 } ) ;
666716} ) ;
717+
718+
719+ // -----------------------------------------------------------------------------
720+ // FIELDS INTEGRATION TESTS
721+ // -----------------------------------------------------------------------------
722+ describe ( 'Fields Integration' , ( ) => {
723+ it ( 'Scenario A: Field Type Mapping' , async ( ) => {
724+ const { mapFieldTypeToFormType } = await import ( '@object-ui/fields' ) ;
725+
726+ expect ( mapFieldTypeToFormType ( 'text' ) ) . toBe ( 'field:text' ) ;
727+ expect ( mapFieldTypeToFormType ( 'email' ) ) . toBe ( 'field:email' ) ;
728+ expect ( mapFieldTypeToFormType ( 'number' ) ) . toBe ( 'field:number' ) ;
729+ expect ( mapFieldTypeToFormType ( 'boolean' ) ) . toBe ( 'field:boolean' ) ;
730+ expect ( mapFieldTypeToFormType ( 'select' ) ) . toBe ( 'field:select' ) ;
731+ expect ( mapFieldTypeToFormType ( 'unknown_type' ) ) . toBe ( 'field:text' ) ; // default fallback
732+ } ) ;
733+
734+ it ( 'Scenario B: Field Formatting Utilities' , async ( ) => {
735+ const { formatCurrency, formatDate, formatPercent } = await import ( '@object-ui/fields' ) ;
736+
737+ const formatted = formatCurrency ( 1234.56 ) ;
738+ expect ( formatted ) . toContain ( '1,234.56' ) ;
739+
740+ const dateStr = formatDate ( new Date ( '2024-01-15' ) ) ;
741+ expect ( dateStr ) . toContain ( '2024' ) ;
742+
743+ const percent = formatPercent ( 0.1234 ) ;
744+ expect ( percent ) . toBe ( '12.34%' ) ;
745+ } ) ;
746+ } ) ;
747+
748+ // -----------------------------------------------------------------------------
749+ // DASHBOARD INTEGRATION TESTS
750+ // -----------------------------------------------------------------------------
751+ describe ( 'Dashboard Integration' , ( ) => {
752+ const renderApp = ( initialRoute : string ) => {
753+ return render (
754+ < MemoryRouter initialEntries = { [ initialRoute ] } >
755+ < AppContent />
756+ </ MemoryRouter >
757+ ) ;
758+ } ;
759+
760+ it ( 'Scenario A: Dashboard Page Rendering' , async ( ) => {
761+ renderApp ( '/dashboard/sales_dashboard' ) ;
762+
763+ await waitFor ( ( ) => {
764+ expect ( screen . getByText ( / S a l e s O v e r v i e w / i) ) . toBeInTheDocument ( ) ;
765+ } ) ;
766+
767+ expect ( screen . getByText ( / S a l e s b y R e g i o n / i) ) . toBeInTheDocument ( ) ;
768+ } ) ;
769+
770+ it ( 'Scenario B: Report Page Rendering' , async ( ) => {
771+ renderApp ( '/page/report_page' ) ;
772+
773+ await waitFor ( ( ) => {
774+ expect ( screen . getByText ( / S a l e s P e r f o r m a n c e R e p o r t / i) ) . toBeInTheDocument ( ) ;
775+ } ) ;
776+
777+ expect ( screen . getByText ( 'Region' ) ) . toBeInTheDocument ( ) ;
778+ expect ( screen . getByText ( 'North' ) ) . toBeInTheDocument ( ) ;
779+ } ) ;
780+
781+ it ( 'Scenario C: Component Registry Check' , async ( ) => {
782+ const { ComponentRegistry } = await import ( '@object-ui/core' ) ;
783+
784+ const dashboardRenderer = ComponentRegistry . get ( 'dashboard' ) ;
785+ expect ( dashboardRenderer ) . toBeDefined ( ) ;
786+
787+ const reportRenderer = ComponentRegistry . get ( 'report' ) ;
788+ expect ( reportRenderer ) . toBeDefined ( ) ;
789+ } ) ;
790+ } ) ;
0 commit comments