88 lines
2.4 KiB
Dart
88 lines
2.4 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:xp_dashboard/src/widgets/stats_header.dart';
|
|
import 'package:xp_models/xp_models.dart';
|
|
|
|
void main() {
|
|
group('StatsHeader Widget Tests', () {
|
|
testWidgets('displays stats correctly', (WidgetTester tester) async {
|
|
// Create test data
|
|
final stats = DashboardStats(
|
|
today: TodayStats(
|
|
level: 5,
|
|
xp: 1250,
|
|
focusTime: 7200, // 2 hours
|
|
meetingTime: 3600, // 1 hour
|
|
focusSessions: 3,
|
|
),
|
|
streaks: StreakStats(
|
|
currentStreak: 7,
|
|
longestStreak: 15,
|
|
),
|
|
recentActivity: [],
|
|
timestamp: DateTime.now(),
|
|
);
|
|
|
|
// Build the widget
|
|
await tester.pumpWidget(
|
|
MaterialApp(
|
|
home: Scaffold(
|
|
body: StatsHeader(stats: stats),
|
|
),
|
|
),
|
|
);
|
|
|
|
// Verify the stats are displayed
|
|
expect(find.text('5'), findsOneWidget); // Level
|
|
expect(find.text('1.3K'), findsOneWidget); // XP formatted
|
|
expect(find.text('7'), findsOneWidget); // Streak
|
|
expect(find.text('Level'), findsOneWidget);
|
|
expect(find.text('XP'), findsOneWidget);
|
|
expect(find.text('Streak'), findsOneWidget);
|
|
});
|
|
|
|
testWidgets('handles null stats gracefully', (WidgetTester tester) async {
|
|
await tester.pumpWidget(
|
|
const MaterialApp(
|
|
home: Scaffold(
|
|
body: StatsHeader(stats: null),
|
|
),
|
|
),
|
|
);
|
|
|
|
// Should render empty container
|
|
expect(find.byType(SizedBox), findsOneWidget);
|
|
});
|
|
|
|
testWidgets('formats large numbers correctly', (WidgetTester tester) async {
|
|
final stats = DashboardStats(
|
|
today: TodayStats(
|
|
level: 50,
|
|
xp: 1500000, // 1.5M
|
|
focusTime: 0,
|
|
meetingTime: 0,
|
|
focusSessions: 0,
|
|
),
|
|
streaks: StreakStats(
|
|
currentStreak: 100,
|
|
longestStreak: 200,
|
|
),
|
|
recentActivity: [],
|
|
timestamp: DateTime.now(),
|
|
);
|
|
|
|
await tester.pumpWidget(
|
|
MaterialApp(
|
|
home: Scaffold(
|
|
body: StatsHeader(stats: stats),
|
|
),
|
|
),
|
|
);
|
|
|
|
expect(find.text('1.5M'), findsOneWidget); // XP formatted as millions
|
|
expect(find.text('50'), findsOneWidget); // Level
|
|
expect(find.text('100'), findsOneWidget); // Streak
|
|
});
|
|
});
|
|
}
|