-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmeters_screen_test.dart
86 lines (74 loc) · 2.88 KB
/
meters_screen_test.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'package:firebase_database/firebase_database.dart';
import 'package:bloomiot/plants/meters_screen.dart';
// Generate Mocks
@GenerateMocks([
FirebaseDatabase,
DatabaseReference,
DatabaseEvent,
DataSnapshot,
])
import 'meters_screen_test.mocks.dart'; // Generated file
void main() {
late MockFirebaseDatabase mockFirebaseDatabase;
late MockDatabaseReference mockDatabaseRef;
late MockDatabaseReference mockLightRef;
late MockDatabaseReference mockSoilRef;
late MockDatabaseReference mockHumidityRef;
late MockDatabaseReference mockTempRef;
setUpAll(() {
// Setup Firebase Database mocks
mockFirebaseDatabase = MockFirebaseDatabase();
mockDatabaseRef = MockDatabaseReference();
mockLightRef = MockDatabaseReference();
mockSoilRef = MockDatabaseReference();
mockHumidityRef = MockDatabaseReference();
mockTempRef = MockDatabaseReference();
// Stub FirebaseDatabase.instance.ref()
when(mockFirebaseDatabase.ref()).thenReturn(mockDatabaseRef);
// Stub child references
when(mockDatabaseRef.child('sensors/light_level')).thenReturn(mockLightRef);
when(mockDatabaseRef.child('sensors/soil_moisture'))
.thenReturn(mockSoilRef);
when(mockDatabaseRef.child('sensors/humidity')).thenReturn(mockHumidityRef);
when(mockDatabaseRef.child('sensors/ds18b20_temperature'))
.thenReturn(mockTempRef);
});
testWidgets('Initializes with zero values', (WidgetTester tester) async {
await tester.pumpWidget(
MaterialApp(
home: SensorDashboard(),
),
);
expect(find.text('0.0%'), findsNWidgets(3)); // Light, Soil, Humidity
expect(find.text('0.0°C'), findsOneWidget);
});
testWidgets('Updates UI when sensor values change',
(WidgetTester tester) async {
// Configure stream responses
_mockStreamResponse(mockLightRef, 85.3);
_mockStreamResponse(mockSoilRef, 45.7);
_mockStreamResponse(mockHumidityRef, 60.0);
_mockStreamResponse(mockTempRef, 25.5);
await tester.pumpWidget(
MaterialApp(
home: SensorDashboard(),
),
);
await tester.pumpAndSettle(); // Wait for streams to initialize
expect(find.text('85.3%'), findsOneWidget);
expect(find.text('45.7%'), findsOneWidget);
expect(find.text('60.0%'), findsOneWidget);
expect(find.text('25.5°C'), findsOneWidget);
});
}
void _mockStreamResponse(MockDatabaseReference ref, dynamic value) {
final mockEvent = MockDatabaseEvent();
final mockSnapshot = MockDataSnapshot();
when(mockSnapshot.value).thenReturn(value);
when(mockEvent.snapshot).thenReturn(mockSnapshot);
when(ref.onValue).thenAnswer((_) => Stream.value(mockEvent));
}