Skip to content

Commit

Permalink
expose memoryCacheContainsKey method from cache_store
Browse files Browse the repository at this point in the history
  • Loading branch information
vinicius0026 authored and martijn00 committed Jul 31, 2024
1 parent 8027df2 commit 6cd8334
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 47 deletions.
4 changes: 4 additions & 0 deletions flutter_cache_manager/lib/src/cache_store.dart
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,10 @@ class CacheStore {
}
}

bool memoryCacheContainsKey(String key) {
return _memCache.containsKey(key);
}

Future<void> dispose() async {
final provider = await _cacheInfoRepository;
await provider.close();
Expand Down
87 changes: 40 additions & 47 deletions flutter_cache_manager/test/cache_store_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,23 @@ void main() {
await store.getFile(fileUrl);
expect(await store.getFileFromMemory(fileUrl), isNotNull);
});

test(
'Store.memoryCacheContainsKey should return true if the key is present in the memory cache',
() async {
var config = createTestConfig();
var store = CacheStore(config);

var cacheObject = CacheObject(
'baseflow.com/test.png',
relativePath: 'testimage.png',
validTill: clock.now().add(const Duration(days: 7)),
);
await store.putFile(cacheObject);

expect(store.memoryCacheContainsKey('baseflow.com/test.png'), true);
expect(store.memoryCacheContainsKey('unseen-file'), false);
});
});

group('Storing files in store', () {
Expand All @@ -127,9 +144,7 @@ void main() {
verify(config.repo.updateOrInsert(cacheObject)).called(1);
});

test(
'Store should store fileinfo in repo and id should be available afterwards',
() async {
test('Store should store fileinfo in repo and id should be available afterwards', () async {
var config = createTestConfig();

var cacheObject = CacheObject(
Expand Down Expand Up @@ -174,8 +189,7 @@ void main() {
);
await store.removeCachedFile(cacheObject);

verify(config.mockRepo.deleteAll(argThat(contains(cacheObject.id))))
.called(1);
verify(config.mockRepo.deleteAll(argThat(contains(cacheObject.id)))).called(1);
});

test('Store should remove file over capacity', () async {
Expand All @@ -191,20 +205,16 @@ void main() {
);
await config.returnsFile('testimage.png');

when(config.mockRepo.getObjectsOverCapacity(any))
.thenAnswer((_) => Future.value([cacheObject]));
when(config.mockRepo.getOldObjects(any))
.thenAnswer((_) => Future.value([]));
when(config.mockRepo.get('baseflow.com/test.png'))
.thenAnswer((_) => Future.value(cacheObject));
when(config.mockRepo.getObjectsOverCapacity(any)).thenAnswer((_) => Future.value([cacheObject]));
when(config.mockRepo.getOldObjects(any)).thenAnswer((_) => Future.value([]));
when(config.mockRepo.get('baseflow.com/test.png')).thenAnswer((_) => Future.value(cacheObject));

expect(await store.getFile('baseflow.com/test.png'), isNotNull);

await untilCalled(config.mockRepo.deleteAll(any));

verify(config.mockRepo.getObjectsOverCapacity(any)).called(1);
verify(config.mockRepo.deleteAll(argThat(contains(cacheObject.id))))
.called(1);
verify(config.mockRepo.deleteAll(argThat(contains(cacheObject.id)))).called(1);
});

test('Store should remove file over that are too old', () async {
Expand All @@ -220,20 +230,16 @@ void main() {
validTill: clock.now().add(const Duration(days: 7)),
);

when(config.mockRepo.getObjectsOverCapacity(any))
.thenAnswer((_) => Future.value([]));
when(config.mockRepo.getOldObjects(any))
.thenAnswer((_) => Future.value([cacheObject]));
when(config.mockRepo.get('baseflow.com/test.png'))
.thenAnswer((_) => Future.value(cacheObject));
when(config.mockRepo.getObjectsOverCapacity(any)).thenAnswer((_) => Future.value([]));
when(config.mockRepo.getOldObjects(any)).thenAnswer((_) => Future.value([cacheObject]));
when(config.mockRepo.get('baseflow.com/test.png')).thenAnswer((_) => Future.value(cacheObject));

expect(await store.getFile('baseflow.com/test.png'), isNotNull);

await untilCalled(config.mockRepo.deleteAll(any));

verify(config.mockRepo.getOldObjects(any)).called(1);
verify(config.mockRepo.deleteAll(argThat(contains(cacheObject.id))))
.called(1);
verify(config.mockRepo.deleteAll(argThat(contains(cacheObject.id)))).called(1);
});

test('Store should remove file old and over capacity', () async {
Expand All @@ -249,12 +255,9 @@ void main() {
validTill: clock.now().add(const Duration(days: 7)),
);

when(config.mockRepo.getObjectsOverCapacity(any))
.thenAnswer((_) => Future.value([cacheObject]));
when(config.mockRepo.getOldObjects(any))
.thenAnswer((_) => Future.value([cacheObject]));
when(config.mockRepo.get('baseflow.com/test.png'))
.thenAnswer((_) => Future.value(cacheObject));
when(config.mockRepo.getObjectsOverCapacity(any)).thenAnswer((_) => Future.value([cacheObject]));
when(config.mockRepo.getOldObjects(any)).thenAnswer((_) => Future.value([cacheObject]));
when(config.mockRepo.get('baseflow.com/test.png')).thenAnswer((_) => Future.value(cacheObject));

expect(await store.getFile('baseflow.com/test.png'), isNotNull);

Expand All @@ -263,8 +266,7 @@ void main() {

verify(config.mockRepo.getObjectsOverCapacity(any)).called(1);
verify(config.mockRepo.getOldObjects(any)).called(1);
verify(config.mockRepo.deleteAll(argThat(contains(cacheObject.id))))
.called(1);
verify(config.mockRepo.deleteAll(argThat(contains(cacheObject.id)))).called(1);
});

test('Store should recheck cache info when file is removed', () async {
Expand All @@ -280,20 +282,16 @@ void main() {
validTill: clock.now().add(const Duration(days: 7)),
);

when(config.mockRepo.getObjectsOverCapacity(any))
.thenAnswer((_) => Future.value([]));
when(config.mockRepo.getOldObjects(any))
.thenAnswer((_) => Future.value([]));
when(config.mockRepo.get('baseflow.com/test.png'))
.thenAnswer((_) => Future.value(cacheObject));
when(config.mockRepo.getObjectsOverCapacity(any)).thenAnswer((_) => Future.value([]));
when(config.mockRepo.getOldObjects(any)).thenAnswer((_) => Future.value([]));
when(config.mockRepo.get('baseflow.com/test.png')).thenAnswer((_) => Future.value(cacheObject));

expect(await store.getFile('baseflow.com/test.png'), isNotNull);
await file.delete();
expect(await store.getFile('baseflow.com/test.png'), isNull);
});

test('Store should not remove files that are not old or over capacity',
() async {
test('Store should not remove files that are not old or over capacity', () async {
var config = createTestConfig();
var store = CacheStore(config);
store.cleanupRunMinInterval = const Duration(milliseconds: 1);
Expand All @@ -306,12 +304,9 @@ void main() {
validTill: clock.now().add(const Duration(days: 7)),
);

when(config.mockRepo.getObjectsOverCapacity(any))
.thenAnswer((_) => Future.value([]));
when(config.mockRepo.getOldObjects(any))
.thenAnswer((_) => Future.value([]));
when(config.mockRepo.get('baseflow.com/test.png'))
.thenAnswer((_) => Future.value(cacheObject));
when(config.mockRepo.getObjectsOverCapacity(any)).thenAnswer((_) => Future.value([]));
when(config.mockRepo.getOldObjects(any)).thenAnswer((_) => Future.value([]));
when(config.mockRepo.get('baseflow.com/test.png')).thenAnswer((_) => Future.value(cacheObject));

expect(await store.getFile('baseflow.com/test.png'), isNotNull);

Expand Down Expand Up @@ -346,13 +341,11 @@ void main() {
validTill: clock.now().add(const Duration(days: 7)),
);

when(config.mockRepo.getAllObjects())
.thenAnswer((_) => Future.value([co1, co2, co3]));
when(config.mockRepo.getAllObjects()).thenAnswer((_) => Future.value([co1, co2, co3]));

await store.emptyCache();

verify(config.mockRepo
.deleteAll(argThat(containsAll([co1.id, co2.id, co3.id])))).called(1);
verify(config.mockRepo.deleteAll(argThat(containsAll([co1.id, co2.id, co3.id])))).called(1);
});
});
}
Expand Down

0 comments on commit 6cd8334

Please sign in to comment.