Skip to content

Commit a29670e

Browse files
ltOgtmartijn00
authored andcommitted
add failing test
1 parent 1757966 commit a29670e

File tree

1 file changed

+70
-76
lines changed

1 file changed

+70
-76
lines changed

flutter_cache_manager/test/cache_manager_test.dart

Lines changed: 70 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -150,13 +150,10 @@ void main() {
150150
when(store.getFile(fileUrl)).thenAnswer((_) => Future.value(cachedInfo));
151151

152152
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));
157155

158-
var cacheManager = TestCacheManager(createTestConfig(),
159-
store: store, webHelper: webHelper);
156+
var cacheManager = TestCacheManager(createTestConfig(), store: store, webHelper: webHelper);
160157

161158
// ignore: deprecated_member_use_from_same_package
162159
var fileStream = cacheManager.getFile(fileUrl);
@@ -177,8 +174,7 @@ void main() {
177174
when(store.getFile(fileUrl)).thenAnswer((_) => Future.value(null));
178175

179176
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));
182178

183179
var cacheManager = TestCacheManager(
184180
createTestConfig(),
@@ -199,10 +195,8 @@ void main() {
199195
when(store.getFile(fileUrl)).thenAnswer((_) => Future.value(null));
200196

201197
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);
206200

207201
var cacheManager = TestCacheManager(
208202
createTestConfig(),
@@ -215,6 +209,36 @@ void main() {
215209
await expectLater(fileStream, emitsError(error));
216210
verify(webHelper.downloadFile(any, key: anyNamed('key'))).called(1);
217211
});
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+
});
218242
});
219243
group('explicit key', () {
220244
test('Valid cacheFile should not call to web', () async {
@@ -278,8 +302,7 @@ void main() {
278302
var store = MockCacheStore();
279303
var cacheManager = TestCacheManager(createTestConfig(), store: store);
280304

281-
var file = await cacheManager.putFile(fileUrl, fileBytes,
282-
fileExtension: extension);
305+
var file = await cacheManager.putFile(fileUrl, fileBytes, fileExtension: extension);
283306
expect(await file.exists(), true);
284307
expect(await file.readAsBytes(), fileBytes);
285308
verify(store.putFile(any)).called(1);
@@ -294,21 +317,18 @@ void main() {
294317
var store = MockCacheStore();
295318
var cacheManager = TestCacheManager(createTestConfig(), store: store);
296319

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);
299321
expect(await file.exists(), true);
300322
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;
303324
expect(arg.key, fileKey);
304325
expect(arg.url, fileUrl);
305326
});
306327

307328
test('Check if file is written and info is stored', () async {
308329
var fileUrl = 'baseflow.com/test';
309330
var extension = 'jpg';
310-
var memorySystem =
311-
await MemoryFileSystem().systemTempDirectory.createTemp('origin');
331+
var memorySystem = await MemoryFileSystem().systemTempDirectory.createTemp('origin');
312332

313333
var existingFile = memorySystem.childFile('testfile.jpg');
314334
var fileBytes = Uint8List(16);
@@ -317,9 +337,7 @@ void main() {
317337
var store = MockCacheStore();
318338
var cacheManager = TestCacheManager(createTestConfig(), store: store);
319339

320-
var file = await cacheManager.putFileStream(
321-
fileUrl, existingFile.openRead(),
322-
fileExtension: extension);
340+
var file = await cacheManager.putFileStream(fileUrl, existingFile.openRead(), fileExtension: extension);
323341
expect(await file.exists(), true);
324342
expect(await file.readAsBytes(), fileBytes);
325343
verify(store.putFile(any)).called(1);
@@ -329,8 +347,7 @@ void main() {
329347
var fileUrl = 'baseflow.com/test';
330348
var fileKey = 'test1234';
331349
var extension = 'jpg';
332-
var memorySystem =
333-
await MemoryFileSystem().systemTempDirectory.createTemp('origin');
350+
var memorySystem = await MemoryFileSystem().systemTempDirectory.createTemp('origin');
334351

335352
var existingFile = memorySystem.childFile('testfile.jpg');
336353
var fileBytes = Uint8List(16);
@@ -339,13 +356,11 @@ void main() {
339356
var store = MockCacheStore();
340357
var cacheManager = TestCacheManager(createTestConfig(), store: store);
341358

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);
345361
expect(await file.exists(), true);
346362
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;
349364
expect(arg.key, fileKey);
350365
expect(arg.url, fileUrl);
351366
});
@@ -356,13 +371,12 @@ void main() {
356371
var fileUrl = 'baseflow.com/test';
357372

358373
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+
)));
366380

367381
var cacheManager = TestCacheManager(createTestConfig(), store: store);
368382

@@ -374,8 +388,7 @@ void main() {
374388
var fileUrl = 'baseflow.com/test';
375389

376390
var store = MockCacheStore();
377-
when(store.retrieveCacheData(fileUrl))
378-
.thenAnswer((_) => Future.value(null));
391+
when(store.retrieveCacheData(fileUrl)).thenAnswer((_) => Future.value(null));
379392

380393
var cacheManager = TestCacheManager(createTestConfig(), store: store);
381394

@@ -387,13 +400,12 @@ void main() {
387400
var fileUrl = 'baseflow.com/test';
388401

389402
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+
)));
397409

398410
var cacheManager = TestCacheManager(createTestConfig(), store: store);
399411

@@ -405,12 +417,10 @@ void main() {
405417

406418
test('Download file just downloads file', () async {
407419
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);
410421
var store = MockCacheStore();
411422
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));
414424
var cacheManager = TestCacheManager(
415425
createTestConfig(),
416426
webHelper: webHelper,
@@ -421,15 +431,12 @@ void main() {
421431

422432
test('test file from memory', () async {
423433
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);
426435

427436
var store = MockCacheStore();
428-
when(store.getFileFromMemory(fileUrl))
429-
.thenAnswer((realInvocation) async => fileInfo);
437+
when(store.getFileFromMemory(fileUrl)).thenAnswer((realInvocation) async => fileInfo);
430438
var webHelper = MockWebHelper();
431-
var cacheManager = TestCacheManager(createTestConfig(),
432-
store: store, webHelper: webHelper);
439+
var cacheManager = TestCacheManager(createTestConfig(), store: store, webHelper: webHelper);
433440
var result = await cacheManager.getFileFromMemory(fileUrl);
434441
expect(result, fileInfo);
435442
});
@@ -448,15 +455,9 @@ void main() {
448455
var config = createTestConfig();
449456
var fileService = config.fileService;
450457
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()));
460461
});
461462

462463
var cacheManager = TestCacheManager(config);
@@ -491,15 +492,9 @@ void main() {
491492
when(store.getFile(fileUrl)).thenAnswer((_) => Future.value(null));
492493

493494
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()));
503498
});
504499

505500
var cacheManager = TestCacheManager(config);
@@ -527,6 +522,5 @@ class TestCacheManager extends CacheManager with ImageCacheManager {
527522
Config? config, {
528523
CacheStore? store,
529524
WebHelper? webHelper,
530-
}) : super.custom(config ?? createTestConfig(),
531-
cacheStore: store, webHelper: webHelper);
525+
}) : super.custom(config ?? createTestConfig(), cacheStore: store, webHelper: webHelper);
532526
}

0 commit comments

Comments
 (0)