import 'package:flutter_test/flutter_test.dart'; import 'package:jinzhi_flutter_app/features/web/application/mall_bridge_state.dart'; void main() { test('updates state and forwards tab interactions before ready', () async { final bridge = MallBridgeController.instance; bridge.detach(); addTearDown(bridge.detach); MallBridgeTab? activated; bool? reselected; var backCalls = 0; bridge.attach( activateTab: (tab, reselect) async { activated = tab; reselected = reselect; }, goBack: () async => backCalls++, ); await bridge.activate(MallBridgeTab.orders); expect(activated, MallBridgeTab.orders); expect(bridge.state.value.activeTab, MallBridgeTab.orders); bridge.update(const { 'ready': true, 'activeTab': 'orders', 'canGoBack': true, }); await bridge.activate(MallBridgeTab.orders, reselect: true); await bridge.goBack(); expect(bridge.state.value.activeTab, MallBridgeTab.orders); expect(bridge.state.value.canGoBack, isTrue); expect(activated, MallBridgeTab.orders); expect(reselected, isTrue); expect(backCalls, 1); }); test('accepts numeric and string booleans from H5', () { final bridge = MallBridgeController.instance; bridge.detach(); addTearDown(bridge.detach); bridge.update(const { 'ready': 1, 'activeTab': 'market', 'canGoBack': 'true', }); expect(bridge.state.value.ready, isTrue); expect(bridge.state.value.activeTab, MallBridgeTab.market); expect(bridge.state.value.canGoBack, isTrue); }); }