11import 'package:flutter_test/flutter_test.dart' ;
2- import 'package:on_time_front/data/data_sources/schedule_local_data_source.dart' ;
32import 'package:on_time_front/data/data_sources/schedule_remote_data_source.dart' ;
43import 'package:on_time_front/data/repositories/schedule_repository_impl.dart' ;
54import 'package:on_time_front/domain/entities/place_entity.dart' ;
65import 'package:on_time_front/domain/entities/schedule_entity.dart' ;
76import 'package:on_time_front/domain/entities/timed_preparation_snapshot_entity.dart' ;
87import 'package:on_time_front/domain/repositories/timed_preparation_repository.dart' ;
98
10- class FakeScheduleLocalDataSource implements ScheduleLocalDataSource {
11- @override
12- Future <void > createSchedule (ScheduleEntity scheduleEntity) async {}
13-
14- @override
15- Future <void > deleteSchedule (ScheduleEntity scheduleEntity) async {}
16-
17- @override
18- Future <ScheduleEntity > getScheduleById (String id) async {
19- throw UnimplementedError ();
20- }
21-
22- @override
23- Future <List <ScheduleEntity >> getSchedulesByDate (
24- DateTime startDate,
25- DateTime ? endDate,
26- ) async {
27- throw UnimplementedError ();
28- }
29-
30- @override
31- Future <void > updateSchedule (ScheduleEntity scheduleEntity) async {}
32- }
33-
349class FakeScheduleRemoteDataSource implements ScheduleRemoteDataSource {
3510 FakeScheduleRemoteDataSource ({
3611 required this .getSchedulesByDateHandler,
@@ -98,6 +73,75 @@ class FakeTimedPreparationRepository implements TimedPreparationRepository {
9873}
9974
10075void main () {
76+ test ('createSchedule publishes created schedule to stream cache' , () async {
77+ final schedule = _schedule (
78+ id: 'created' ,
79+ scheduleTime: DateTime (2026 , 3 , 20 , 9 ),
80+ );
81+ final repository = ScheduleRepositoryImpl (
82+ scheduleRemoteDataSource: FakeScheduleRemoteDataSource (
83+ getSchedulesByDateHandler: (_, __) async => const [],
84+ ),
85+ timedPreparationRepository: FakeTimedPreparationRepository (),
86+ );
87+
88+ await repository.createSchedule (schedule);
89+
90+ final latest = await repository.scheduleStream.firstWhere (
91+ (schedules) => schedules.any ((schedule) => schedule.id == 'created' ),
92+ );
93+
94+ expect (latest.single, schedule);
95+ });
96+
97+ test ('deleteSchedule removes deleted schedule from stream cache' , () async {
98+ final schedule = _schedule (
99+ id: 'deleted' ,
100+ scheduleTime: DateTime (2026 , 3 , 20 , 9 ),
101+ );
102+ final repository = ScheduleRepositoryImpl (
103+ scheduleRemoteDataSource: FakeScheduleRemoteDataSource (
104+ getSchedulesByDateHandler: (_, __) async => const [],
105+ ),
106+ timedPreparationRepository: FakeTimedPreparationRepository (),
107+ );
108+ final events = < Set <ScheduleEntity >> [];
109+ final subscription = repository.scheduleStream.listen (events.add);
110+ addTearDown (subscription.cancel);
111+
112+ await repository.createSchedule (schedule);
113+ await repository.deleteSchedule (schedule);
114+ await pumpEventQueue ();
115+
116+ expect (events.map ((event) => event.map ((s) => s.id).toList ()), [
117+ < String > [],
118+ ['deleted' ],
119+ < String > [],
120+ ]);
121+ });
122+
123+ test ('getScheduleById publishes fetched schedule to stream cache' , () async {
124+ final schedule = _schedule (
125+ id: 'fetched' ,
126+ scheduleTime: DateTime (2026 , 3 , 20 , 9 ),
127+ );
128+ final repository = ScheduleRepositoryImpl (
129+ scheduleRemoteDataSource: FakeScheduleRemoteDataSource (
130+ getSchedulesByDateHandler: (_, __) async => const [],
131+ getScheduleByIdHandler: (_) async => schedule,
132+ ),
133+ timedPreparationRepository: FakeTimedPreparationRepository (),
134+ );
135+
136+ final result = await repository.getScheduleById (schedule.id);
137+ final latest = await repository.scheduleStream.firstWhere (
138+ (schedules) => schedules.any ((schedule) => schedule.id == 'fetched' ),
139+ );
140+
141+ expect (result, schedule);
142+ expect (latest.single, schedule);
143+ });
144+
101145 test (
102146 'watchSchedulesByDate emits inclusive-start exclusive-end schedules sorted by time' ,
103147 () async {
@@ -121,7 +165,6 @@ void main() {
121165 );
122166
123167 final repository = ScheduleRepositoryImpl (
124- scheduleLocalDataSource: FakeScheduleLocalDataSource (),
125168 scheduleRemoteDataSource: FakeScheduleRemoteDataSource (
126169 getSchedulesByDateHandler: (_, __) async => [
127170 insideLater,
@@ -164,7 +207,6 @@ void main() {
164207 );
165208
166209 final repository = ScheduleRepositoryImpl (
167- scheduleLocalDataSource: FakeScheduleLocalDataSource (),
168210 scheduleRemoteDataSource: FakeScheduleRemoteDataSource (
169211 getSchedulesByDateHandler: (startDate, _) async {
170212 if (startDate == marchStart) {
@@ -251,7 +293,6 @@ void main() {
251293 );
252294
253295 final repository = ScheduleRepositoryImpl (
254- scheduleLocalDataSource: FakeScheduleLocalDataSource (),
255296 scheduleRemoteDataSource: remote,
256297 timedPreparationRepository: FakeTimedPreparationRepository (),
257298 );
@@ -298,7 +339,6 @@ void main() {
298339 );
299340
300341 final repository = ScheduleRepositoryImpl (
301- scheduleLocalDataSource: FakeScheduleLocalDataSource (),
302342 scheduleRemoteDataSource: FakeScheduleRemoteDataSource (
303343 getSchedulesByDateHandler: (_, __) async => [initialSchedule],
304344 getScheduleByIdHandler: (_) async => editedSchedule,
0 commit comments