@@ -150,13 +150,10 @@ void main() {
150
150
when (store.getFile (fileUrl)).thenAnswer ((_) => Future .value (cachedInfo));
151
151
152
152
var webHelper = MockWebHelper ();
153
- var downloadedInfo = FileInfo (file, FileSource .Online ,
154
- DateTime .now ().add (const Duration (days: 1 )), fileUrl);
155
- when (webHelper.downloadFile (fileUrl, key: anyNamed ('key' )))
156
- .thenAnswer ((_) => Stream .value (downloadedInfo));
153
+ var downloadedInfo = FileInfo (file, FileSource .Online , DateTime .now ().add (const Duration (days: 1 )), fileUrl);
154
+ when (webHelper.downloadFile (fileUrl, key: anyNamed ('key' ))).thenAnswer ((_) => Stream .value (downloadedInfo));
157
155
158
- var cacheManager = TestCacheManager (createTestConfig (),
159
- store: store, webHelper: webHelper);
156
+ var cacheManager = TestCacheManager (createTestConfig (), store: store, webHelper: webHelper);
160
157
161
158
// ignore: deprecated_member_use_from_same_package
162
159
var fileStream = cacheManager.getFile (fileUrl);
@@ -177,8 +174,7 @@ void main() {
177
174
when (store.getFile (fileUrl)).thenAnswer ((_) => Future .value (null ));
178
175
179
176
var webHelper = MockWebHelper ();
180
- when (webHelper.downloadFile (fileUrl, key: anyNamed ('key' )))
181
- .thenAnswer ((_) => Stream .value (fileInfo));
177
+ when (webHelper.downloadFile (fileUrl, key: anyNamed ('key' ))).thenAnswer ((_) => Stream .value (fileInfo));
182
178
183
179
var cacheManager = TestCacheManager (
184
180
createTestConfig (),
@@ -199,10 +195,8 @@ void main() {
199
195
when (store.getFile (fileUrl)).thenAnswer ((_) => Future .value (null ));
200
196
201
197
var webHelper = MockWebHelper ();
202
- var error = HttpExceptionWithStatus (404 , 'Invalid statusCode: 404' ,
203
- uri: Uri .parse (fileUrl));
204
- when (webHelper.downloadFile (fileUrl, key: anyNamed ('key' )))
205
- .thenThrow (error);
198
+ var error = HttpExceptionWithStatus (404 , 'Invalid statusCode: 404' , uri: Uri .parse (fileUrl));
199
+ when (webHelper.downloadFile (fileUrl, key: anyNamed ('key' ))).thenThrow (error);
206
200
207
201
var cacheManager = TestCacheManager (
208
202
createTestConfig (),
@@ -215,6 +209,36 @@ void main() {
215
209
await expectLater (fileStream, emitsError (error));
216
210
verify (webHelper.downloadFile (any, key: anyNamed ('key' ))).called (1 );
217
211
});
212
+
213
+ test ('Outdated cacheFile should call to web, where 404 response should add Error to Stream and evict cache' ,
214
+ () async {
215
+ var fileName = 'test.jpg' ;
216
+ var fileUrl = 'baseflow.com/test' ;
217
+ var validTill = DateTime .now ().subtract (const Duration (days: 1 ));
218
+
219
+ var store = MockCacheStore ();
220
+ var file = await createTestConfig ().fileSystem.createFile (fileName);
221
+ var cachedInfo = FileInfo (file, FileSource .Cache , validTill, fileUrl);
222
+ var cacheObject = CacheObject (fileUrl, relativePath: file.path, validTill: validTill, id: 123 );
223
+ when (store.getFile (fileUrl)).thenAnswer ((_) => Future .value (cachedInfo));
224
+ when (store.retrieveCacheData (fileUrl)).thenAnswer ((_) => Future .value (cacheObject));
225
+
226
+ var webHelper = MockWebHelper ();
227
+ var error = HttpExceptionWithStatus (404 , 'Invalid statusCode: 404' , uri: Uri .parse (fileUrl));
228
+ when (webHelper.downloadFile (fileUrl, key: anyNamed ('key' ))).thenThrow (error);
229
+
230
+ var cacheManager = TestCacheManager (
231
+ createTestConfig (),
232
+ store: store,
233
+ webHelper: webHelper,
234
+ );
235
+
236
+ // ignore: deprecated_member_use_from_same_package
237
+ var fileStream = cacheManager.getFile (fileUrl);
238
+ await expectLater (fileStream, emitsInOrder ([cachedInfo, emitsError (error)]));
239
+ verify (webHelper.downloadFile (any, key: anyNamed ('key' ))).called (1 );
240
+ verify (store.removeCachedFile (cacheObject)).called (1 );
241
+ });
218
242
});
219
243
group ('explicit key' , () {
220
244
test ('Valid cacheFile should not call to web' , () async {
@@ -278,8 +302,7 @@ void main() {
278
302
var store = MockCacheStore ();
279
303
var cacheManager = TestCacheManager (createTestConfig (), store: store);
280
304
281
- var file = await cacheManager.putFile (fileUrl, fileBytes,
282
- fileExtension: extension );
305
+ var file = await cacheManager.putFile (fileUrl, fileBytes, fileExtension: extension );
283
306
expect (await file.exists (), true );
284
307
expect (await file.readAsBytes (), fileBytes);
285
308
verify (store.putFile (any)).called (1 );
@@ -294,21 +317,18 @@ void main() {
294
317
var store = MockCacheStore ();
295
318
var cacheManager = TestCacheManager (createTestConfig (), store: store);
296
319
297
- var file = await cacheManager.putFile (fileUrl, fileBytes,
298
- key: fileKey, fileExtension: extension );
320
+ var file = await cacheManager.putFile (fileUrl, fileBytes, key: fileKey, fileExtension: extension );
299
321
expect (await file.exists (), true );
300
322
expect (await file.readAsBytes (), fileBytes);
301
- final arg =
302
- verify (store.putFile (captureAny)).captured.first as CacheObject ;
323
+ final arg = verify (store.putFile (captureAny)).captured.first as CacheObject ;
303
324
expect (arg.key, fileKey);
304
325
expect (arg.url, fileUrl);
305
326
});
306
327
307
328
test ('Check if file is written and info is stored' , () async {
308
329
var fileUrl = 'baseflow.com/test' ;
309
330
var extension = 'jpg' ;
310
- var memorySystem =
311
- await MemoryFileSystem ().systemTempDirectory.createTemp ('origin' );
331
+ var memorySystem = await MemoryFileSystem ().systemTempDirectory.createTemp ('origin' );
312
332
313
333
var existingFile = memorySystem.childFile ('testfile.jpg' );
314
334
var fileBytes = Uint8List (16 );
@@ -317,9 +337,7 @@ void main() {
317
337
var store = MockCacheStore ();
318
338
var cacheManager = TestCacheManager (createTestConfig (), store: store);
319
339
320
- var file = await cacheManager.putFileStream (
321
- fileUrl, existingFile.openRead (),
322
- fileExtension: extension );
340
+ var file = await cacheManager.putFileStream (fileUrl, existingFile.openRead (), fileExtension: extension );
323
341
expect (await file.exists (), true );
324
342
expect (await file.readAsBytes (), fileBytes);
325
343
verify (store.putFile (any)).called (1 );
@@ -329,8 +347,7 @@ void main() {
329
347
var fileUrl = 'baseflow.com/test' ;
330
348
var fileKey = 'test1234' ;
331
349
var extension = 'jpg' ;
332
- var memorySystem =
333
- await MemoryFileSystem ().systemTempDirectory.createTemp ('origin' );
350
+ var memorySystem = await MemoryFileSystem ().systemTempDirectory.createTemp ('origin' );
334
351
335
352
var existingFile = memorySystem.childFile ('testfile.jpg' );
336
353
var fileBytes = Uint8List (16 );
@@ -339,13 +356,11 @@ void main() {
339
356
var store = MockCacheStore ();
340
357
var cacheManager = TestCacheManager (createTestConfig (), store: store);
341
358
342
- var file = await cacheManager.putFileStream (
343
- fileUrl, existingFile.openRead (),
344
- key: fileKey, fileExtension: extension );
359
+ var file =
360
+ await cacheManager.putFileStream (fileUrl, existingFile.openRead (), key: fileKey, fileExtension: extension );
345
361
expect (await file.exists (), true );
346
362
expect (await file.readAsBytes (), fileBytes);
347
- final arg =
348
- verify (store.putFile (captureAny)).captured.first as CacheObject ;
363
+ final arg = verify (store.putFile (captureAny)).captured.first as CacheObject ;
349
364
expect (arg.key, fileKey);
350
365
expect (arg.url, fileUrl);
351
366
});
@@ -356,13 +371,12 @@ void main() {
356
371
var fileUrl = 'baseflow.com/test' ;
357
372
358
373
var store = MockCacheStore ();
359
- when (store.retrieveCacheData (fileUrl))
360
- .thenAnswer ((_) => Future .value (CacheObject (
361
- fileUrl,
362
- relativePath: 'test.png' ,
363
- validTill: clock.now (),
364
- id: 123 ,
365
- )));
374
+ when (store.retrieveCacheData (fileUrl)).thenAnswer ((_) => Future .value (CacheObject (
375
+ fileUrl,
376
+ relativePath: 'test.png' ,
377
+ validTill: clock.now (),
378
+ id: 123 ,
379
+ )));
366
380
367
381
var cacheManager = TestCacheManager (createTestConfig (), store: store);
368
382
@@ -374,8 +388,7 @@ void main() {
374
388
var fileUrl = 'baseflow.com/test' ;
375
389
376
390
var store = MockCacheStore ();
377
- when (store.retrieveCacheData (fileUrl))
378
- .thenAnswer ((_) => Future .value (null ));
391
+ when (store.retrieveCacheData (fileUrl)).thenAnswer ((_) => Future .value (null ));
379
392
380
393
var cacheManager = TestCacheManager (createTestConfig (), store: store);
381
394
@@ -387,13 +400,12 @@ void main() {
387
400
var fileUrl = 'baseflow.com/test' ;
388
401
389
402
var store = MockCacheStore ();
390
- when (store.retrieveCacheData (fileUrl))
391
- .thenAnswer ((_) => Future .value (CacheObject (
392
- fileUrl,
393
- relativePath: 'test.png' ,
394
- validTill: clock.now (),
395
- id: null ,
396
- )));
403
+ when (store.retrieveCacheData (fileUrl)).thenAnswer ((_) => Future .value (CacheObject (
404
+ fileUrl,
405
+ relativePath: 'test.png' ,
406
+ validTill: clock.now (),
407
+ id: null ,
408
+ )));
397
409
398
410
var cacheManager = TestCacheManager (createTestConfig (), store: store);
399
411
@@ -405,12 +417,10 @@ void main() {
405
417
406
418
test ('Download file just downloads file' , () async {
407
419
var fileUrl = 'baseflow.com/test' ;
408
- var fileInfo = FileInfo (MemoryFileSystem .test ().file ('f' ), FileSource .Cache ,
409
- DateTime .now (), fileUrl);
420
+ var fileInfo = FileInfo (MemoryFileSystem .test ().file ('f' ), FileSource .Cache , DateTime .now (), fileUrl);
410
421
var store = MockCacheStore ();
411
422
var webHelper = MockWebHelper ();
412
- when (webHelper.downloadFile (fileUrl, key: anyNamed ('key' )))
413
- .thenAnswer ((_) => Stream .value (fileInfo));
423
+ when (webHelper.downloadFile (fileUrl, key: anyNamed ('key' ))).thenAnswer ((_) => Stream .value (fileInfo));
414
424
var cacheManager = TestCacheManager (
415
425
createTestConfig (),
416
426
webHelper: webHelper,
@@ -421,15 +431,12 @@ void main() {
421
431
422
432
test ('test file from memory' , () async {
423
433
var fileUrl = 'baseflow.com/test' ;
424
- var fileInfo = FileInfo (MemoryFileSystem .test ().file ('f' ), FileSource .Cache ,
425
- DateTime .now (), fileUrl);
434
+ var fileInfo = FileInfo (MemoryFileSystem .test ().file ('f' ), FileSource .Cache , DateTime .now (), fileUrl);
426
435
427
436
var store = MockCacheStore ();
428
- when (store.getFileFromMemory (fileUrl))
429
- .thenAnswer ((realInvocation) async => fileInfo);
437
+ when (store.getFileFromMemory (fileUrl)).thenAnswer ((realInvocation) async => fileInfo);
430
438
var webHelper = MockWebHelper ();
431
- var cacheManager = TestCacheManager (createTestConfig (),
432
- store: store, webHelper: webHelper);
439
+ var cacheManager = TestCacheManager (createTestConfig (), store: store, webHelper: webHelper);
433
440
var result = await cacheManager.getFileFromMemory (fileUrl);
434
441
expect (result, fileInfo);
435
442
});
@@ -448,15 +455,9 @@ void main() {
448
455
var config = createTestConfig ();
449
456
var fileService = config.fileService;
450
457
var downloadStreamController = StreamController <List <int >>();
451
- when (fileService.get (fileUrl, headers: anyNamed ('headers' )))
452
- .thenAnswer ((_) {
453
- return Future .value (MockFileFetcherResponse (
454
- downloadStreamController.stream,
455
- 6 ,
456
- 'testv1' ,
457
- '.jpg' ,
458
- 200 ,
459
- DateTime .now ()));
458
+ when (fileService.get (fileUrl, headers: anyNamed ('headers' ))).thenAnswer ((_) {
459
+ return Future .value (
460
+ MockFileFetcherResponse (downloadStreamController.stream, 6 , 'testv1' , '.jpg' , 200 , DateTime .now ()));
460
461
});
461
462
462
463
var cacheManager = TestCacheManager (config);
@@ -491,15 +492,9 @@ void main() {
491
492
when (store.getFile (fileUrl)).thenAnswer ((_) => Future .value (null ));
492
493
493
494
var downloadStreamController = StreamController <List <int >>();
494
- when (config.fileService.get (fileUrl, headers: anyNamed ('headers' )))
495
- .thenAnswer ((_) {
496
- return Future .value (MockFileFetcherResponse (
497
- downloadStreamController.stream,
498
- 6 ,
499
- 'testv1' ,
500
- '.jpg' ,
501
- 200 ,
502
- DateTime .now ()));
495
+ when (config.fileService.get (fileUrl, headers: anyNamed ('headers' ))).thenAnswer ((_) {
496
+ return Future .value (
497
+ MockFileFetcherResponse (downloadStreamController.stream, 6 , 'testv1' , '.jpg' , 200 , DateTime .now ()));
503
498
});
504
499
505
500
var cacheManager = TestCacheManager (config);
@@ -527,6 +522,5 @@ class TestCacheManager extends CacheManager with ImageCacheManager {
527
522
Config ? config, {
528
523
CacheStore ? store,
529
524
WebHelper ? webHelper,
530
- }) : super .custom (config ?? createTestConfig (),
531
- cacheStore: store, webHelper: webHelper);
525
+ }) : super .custom (config ?? createTestConfig (), cacheStore: store, webHelper: webHelper);
532
526
}
0 commit comments