import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:get/get.dart'; import 'package:mocktail/mocktail.dart'; import 'package:rasadyar_app/presentation/pages/splash/logic.dart'; import 'package:rasadyar_app/presentation/pages/splash/view.dart'; import 'package:rasadyar_core/core.dart'; class MockSplashLogic extends GetxController with Mock implements SplashLogic { @override late final AnimationController scaleController; @override late final AnimationController rotateController; @override Rxn> scaleAnimation = Rxn(); @override Rxn> rotationAnimation = Rxn(); } class MockGService extends Mock implements GService {} class MockTokenStorageService extends Mock implements TokenStorageService {} void main() { group('SplashPage Tests', () { late MockSplashLogic mockController; late MockGService mockGService; late MockTokenStorageService mockTokenService; setUp(() { mockController = MockSplashLogic(); mockGService = MockGService(); mockTokenService = MockTokenStorageService(); Get.put(mockController); Get.put(mockGService); Get.put(mockTokenService); }); tearDown(() { Get.reset(); }); testWidgets('should display splash screen with animations', (WidgetTester tester) async { // Arrange final mockScaleAnimation = Animation.fromValueListenable( ValueNotifier(1.0), ); final mockRotationAnimation = Animation.fromValueListenable( ValueNotifier(0.0), ); mockController.scaleAnimation.value = mockScaleAnimation; mockController.rotationAnimation.value = mockRotationAnimation; // Act await tester.pumpWidget( MaterialApp( home: SplashPage(), ), ); // Assert expect(find.byType(Scaffold), findsOneWidget); expect(find.byType(ScaleTransition), findsOneWidget); expect(find.byType(RotationTransition), findsOneWidget); expect(find.byType(Stack), findsOneWidget); }); testWidgets('should have correct background color', (WidgetTester tester) async { // Arrange final mockScaleAnimation = Animation.fromValueListenable( ValueNotifier(1.0), ); final mockRotationAnimation = Animation.fromValueListenable( ValueNotifier(0.0), ); mockController.scaleAnimation.value = mockScaleAnimation; mockController.rotationAnimation.value = mockRotationAnimation; // Act await tester.pumpWidget( MaterialApp( home: SplashPage(), ), ); // Assert final scaffold = tester.widget(find.byType(Scaffold)); expect(scaffold.backgroundColor, AppColor.blueDarker); }); testWidgets('should render animations when controllers are available', (WidgetTester tester) async { // Arrange final mockScaleAnimation = Animation.fromValueListenable( ValueNotifier(1.2), ); final mockRotationAnimation = Animation.fromValueListenable( ValueNotifier(0.5), ); mockController.scaleAnimation.value = mockScaleAnimation; mockController.rotationAnimation.value = mockRotationAnimation; // Act await tester.pumpWidget( MaterialApp( home: SplashPage(), ), ); await tester.pump(); // Assert expect(find.byType(ScaleTransition), findsOneWidget); expect(find.byType(RotationTransition), findsOneWidget); }); }); }