mobile bluesky app made with flutter
lazurite.stormlightlabs.org/
mobile
bluesky
flutter
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}