Skip to content

Commit 7e6032d

Browse files
committed
tests: add tests for dashbot router
1 parent c61d051 commit 7e6032d

File tree

1 file changed

+227
-0
lines changed

1 file changed

+227
-0
lines changed
Lines changed: 227 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,227 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:flutter_test/flutter_test.dart';
3+
4+
import 'package:apidash/dashbot/core/routes/dashbot_router.dart';
5+
import 'package:apidash/dashbot/core/routes/dashbot_routes.dart';
6+
import 'package:apidash/dashbot/core/constants/constants.dart';
7+
8+
void main() {
9+
group('DashbotRouter', () {
10+
group('generateRoute', () {
11+
test('should return MaterialPageRoute for dashbotHome route', () {
12+
// Arrange
13+
const settings = RouteSettings(name: DashbotRoutes.dashbotHome);
14+
15+
// Act
16+
final route = generateRoute(settings);
17+
18+
// Assert
19+
expect(route, isA<MaterialPageRoute>());
20+
expect(route!.settings.name, equals(DashbotRoutes.dashbotHome));
21+
});
22+
23+
test('should return MaterialPageRoute for dashbotDefault route', () {
24+
// Arrange
25+
const settings = RouteSettings(name: DashbotRoutes.dashbotDefault);
26+
27+
// Act
28+
final route = generateRoute(settings);
29+
30+
// Assert
31+
expect(route, isA<MaterialPageRoute>());
32+
expect(route!.settings.name, equals(DashbotRoutes.dashbotDefault));
33+
});
34+
35+
test('should return MaterialPageRoute for dashbotChat route', () {
36+
// Arrange
37+
const settings = RouteSettings(name: DashbotRoutes.dashbotChat);
38+
39+
// Act
40+
final route = generateRoute(settings);
41+
42+
// Assert
43+
expect(route, isA<MaterialPageRoute>());
44+
expect(route!.settings.name, equals(DashbotRoutes.dashbotChat));
45+
});
46+
47+
test(
48+
'should return MaterialPageRoute for dashbotChat route with ChatMessageType argument',
49+
() {
50+
// Arrange
51+
const initialTask = ChatMessageType.generateTest;
52+
const settings = RouteSettings(
53+
name: DashbotRoutes.dashbotChat,
54+
arguments: initialTask,
55+
);
56+
57+
// Act
58+
final route = generateRoute(settings);
59+
60+
// Assert
61+
expect(route, isA<MaterialPageRoute>());
62+
expect(route!.settings.name, equals(DashbotRoutes.dashbotChat));
63+
});
64+
65+
test('should handle dashbotChat route with non-ChatMessageType argument',
66+
() {
67+
// Arrange
68+
const settings = RouteSettings(
69+
name: DashbotRoutes.dashbotChat,
70+
arguments: 'invalid_argument',
71+
);
72+
73+
// Act
74+
final route = generateRoute(settings);
75+
76+
// Assert
77+
expect(route, isA<MaterialPageRoute>());
78+
expect(route!.settings.name, equals(DashbotRoutes.dashbotChat));
79+
});
80+
81+
test('should return default route for unknown route names', () {
82+
// Arrange
83+
const settings = RouteSettings(name: '/unknown_route');
84+
85+
// Act
86+
final route = generateRoute(settings);
87+
88+
// Assert
89+
expect(route, isA<MaterialPageRoute>());
90+
expect(route!.settings.name, equals(DashbotRoutes.dashbotDefault));
91+
});
92+
93+
test('should return default route for null route name', () {
94+
// Arrange
95+
const settings = RouteSettings(name: null);
96+
97+
// Act
98+
final route = generateRoute(settings);
99+
100+
// Assert
101+
expect(route, isA<MaterialPageRoute>());
102+
expect(route!.settings.name, equals(DashbotRoutes.dashbotDefault));
103+
});
104+
105+
test('should handle all ChatMessageType enum values as arguments', () {
106+
for (final messageType in ChatMessageType.values) {
107+
// Arrange
108+
final settings = RouteSettings(
109+
name: DashbotRoutes.dashbotChat,
110+
arguments: messageType,
111+
);
112+
113+
// Act
114+
final route = generateRoute(settings);
115+
116+
// Assert
117+
expect(route, isA<MaterialPageRoute>());
118+
expect(route!.settings.name, equals(DashbotRoutes.dashbotChat));
119+
}
120+
});
121+
122+
test('should return correct route settings for each defined route', () {
123+
// Test all defined routes
124+
final routesToTest = [
125+
DashbotRoutes.dashbotHome,
126+
DashbotRoutes.dashbotDefault,
127+
DashbotRoutes.dashbotChat,
128+
];
129+
130+
for (final routeName in routesToTest) {
131+
// Arrange
132+
final settings = RouteSettings(name: routeName);
133+
134+
// Act
135+
final route = generateRoute(settings);
136+
137+
// Assert
138+
expect(route, isA<MaterialPageRoute>());
139+
expect(route!.settings.name, isNotNull);
140+
141+
// Each route should have its respective name in settings
142+
if (routeName == DashbotRoutes.dashbotChat) {
143+
expect(route.settings.name, equals(DashbotRoutes.dashbotChat));
144+
} else if (routeName == DashbotRoutes.dashbotHome) {
145+
expect(route.settings.name, equals(DashbotRoutes.dashbotHome));
146+
} else {
147+
expect(route.settings.name, equals(DashbotRoutes.dashbotDefault));
148+
}
149+
}
150+
});
151+
152+
test('should handle empty string route name', () {
153+
// Arrange
154+
const settings = RouteSettings(name: '');
155+
156+
// Act
157+
final route = generateRoute(settings);
158+
159+
// Assert
160+
expect(route, isA<MaterialPageRoute>());
161+
expect(route!.settings.name, equals(DashbotRoutes.dashbotDefault));
162+
});
163+
164+
test('should handle route with arguments but different route name', () {
165+
// Arrange
166+
const settings = RouteSettings(
167+
name: DashbotRoutes.dashbotDefault,
168+
arguments: ChatMessageType.generateCode,
169+
);
170+
171+
// Act
172+
final route = generateRoute(settings);
173+
174+
// Assert
175+
expect(route, isA<MaterialPageRoute>());
176+
expect(route!.settings.name, equals(DashbotRoutes.dashbotDefault));
177+
});
178+
179+
test('should ensure route is not null for all valid routes', () {
180+
// Test that generateRoute never returns null for defined routes
181+
final routesToTest = [
182+
DashbotRoutes.dashbotHome,
183+
DashbotRoutes.dashbotDefault,
184+
DashbotRoutes.dashbotChat,
185+
'/unknown_route',
186+
null,
187+
'',
188+
];
189+
190+
for (final routeName in routesToTest) {
191+
// Arrange
192+
final settings = RouteSettings(name: routeName);
193+
194+
// Act
195+
final route = generateRoute(settings);
196+
197+
// Assert
198+
expect(route, isNotNull,
199+
reason: 'Route should not be null for route name: $routeName');
200+
expect(route, isA<MaterialPageRoute>());
201+
}
202+
});
203+
204+
test('should handle special characters in route names', () {
205+
// Test routes with special characters
206+
final specialRoutes = [
207+
'/route-with-dashes',
208+
'/route_with_underscores',
209+
'/route123',
210+
'/route/with/slashes',
211+
];
212+
213+
for (final routeName in specialRoutes) {
214+
// Arrange
215+
final settings = RouteSettings(name: routeName);
216+
217+
// Act
218+
final route = generateRoute(settings);
219+
220+
// Assert
221+
expect(route, isA<MaterialPageRoute>());
222+
expect(route!.settings.name, equals(DashbotRoutes.dashbotDefault));
223+
}
224+
});
225+
});
226+
});
227+
}

0 commit comments

Comments
 (0)