---
description: "GetX testing conventions for LegacyApp"
alwaysApply: false
---

# GetX Testing Standards — LegacyApp

## Test pattern
```dart
void main() {
  late ProductsController controller;
  late MockProductRepository mockRepo;

  setUp(() {
    mockRepo = MockProductRepository();
    Get.testMode = true;
    controller = Get.put(ProductsController(mockRepo));
  });

  tearDown(() => Get.deleteAll());

  test('loads products on init', () async {
    when(() => mockRepo.getProducts()).thenAnswer((_) async => [fakeProduct]);
    await controller.fetchProducts();
    expect(controller.products, [fakeProduct]);
    expect(controller.isLoading.value, false);
  });

  testWidgets('ProductsView shows shimmer while loading', (tester) async {
    controller.isLoading.value = true;
    await tester.pumpWidget(GetMaterialApp(home: ProductsView()));
    expect(find.byType(ProductShimmer), findsOneWidget);
  });
}
```

## Rules
- Use `Get.testMode = true` in setUp
- Always call `Get.deleteAll()` in tearDown
- Wrap widget tests in `GetMaterialApp`, not `MaterialApp`
