mobile bluesky app made with flutter lazurite.stormlightlabs.org/
mobile bluesky flutter
at main 118 lines 3.7 kB view raw
1import 'package:flutter_riverpod/flutter_riverpod.dart'; 2import 'package:flutter_test/flutter_test.dart'; 3import 'package:lazurite/src/features/debug/application/debug_overlay_controller.dart'; 4 5void main() { 6 group('DebugOverlayState', () { 7 test('default state has isVisible false and activeTabIndex 0', () { 8 const state = DebugOverlayState(); 9 10 expect(state.isVisible, false); 11 expect(state.activeTabIndex, 0); 12 }); 13 14 test('copyWith creates a copy with updated values', () { 15 const state = DebugOverlayState(); 16 17 final copy = state.copyWith(isVisible: true, activeTabIndex: 1); 18 19 expect(copy.isVisible, true); 20 expect(copy.activeTabIndex, 1); 21 }); 22 23 test('copyWith preserves original values when not specified', () { 24 const state = DebugOverlayState(isVisible: true, activeTabIndex: 2); 25 26 final copy = state.copyWith(); 27 28 expect(copy.isVisible, true); 29 expect(copy.activeTabIndex, 2); 30 }); 31 32 test('equality works correctly', () { 33 const state1 = DebugOverlayState(isVisible: true, activeTabIndex: 1); 34 const state2 = DebugOverlayState(isVisible: true, activeTabIndex: 1); 35 const state3 = DebugOverlayState(isVisible: false, activeTabIndex: 1); 36 37 expect(state1, equals(state2)); 38 expect(state1, isNot(equals(state3))); 39 }); 40 41 test('hashCode is consistent with equality', () { 42 const state1 = DebugOverlayState(isVisible: true, activeTabIndex: 1); 43 const state2 = DebugOverlayState(isVisible: true, activeTabIndex: 1); 44 45 expect(state1.hashCode, equals(state2.hashCode)); 46 }); 47 }); 48 49 group('DebugOverlayController', () { 50 late ProviderContainer container; 51 52 setUp(() { 53 container = ProviderContainer(); 54 }); 55 56 tearDown(() { 57 container.dispose(); 58 }); 59 60 test('initial state is not visible', () { 61 final state = container.read(debugOverlayControllerProvider); 62 63 expect(state.isVisible, false); 64 }); 65 66 test('show() sets isVisible to true', () { 67 container.read(debugOverlayControllerProvider.notifier).show(); 68 69 final state = container.read(debugOverlayControllerProvider); 70 71 expect(state.isVisible, true); 72 }); 73 74 test('hide() sets isVisible to false', () { 75 container.read(debugOverlayControllerProvider.notifier).show(); 76 container.read(debugOverlayControllerProvider.notifier).hide(); 77 78 final state = container.read(debugOverlayControllerProvider); 79 80 expect(state.isVisible, false); 81 }); 82 83 test('toggle() toggles visibility from false to true', () { 84 container.read(debugOverlayControllerProvider.notifier).toggle(); 85 86 final state = container.read(debugOverlayControllerProvider); 87 88 expect(state.isVisible, true); 89 }); 90 91 test('toggle() toggles visibility from true to false', () { 92 container.read(debugOverlayControllerProvider.notifier).show(); 93 container.read(debugOverlayControllerProvider.notifier).toggle(); 94 95 final state = container.read(debugOverlayControllerProvider); 96 97 expect(state.isVisible, false); 98 }); 99 100 test('setTab() sets the active tab index', () { 101 container.read(debugOverlayControllerProvider.notifier).setTab(1); 102 103 final state = container.read(debugOverlayControllerProvider); 104 105 expect(state.activeTabIndex, 1); 106 }); 107 108 test('setTab() preserves visibility', () { 109 container.read(debugOverlayControllerProvider.notifier).show(); 110 container.read(debugOverlayControllerProvider.notifier).setTab(1); 111 112 final state = container.read(debugOverlayControllerProvider); 113 114 expect(state.isVisible, true); 115 expect(state.activeTabIndex, 1); 116 }); 117 }); 118}