Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

- fix comment in JsonCacheHive class constructor — [120](https://github.com/dartoos-dev/json_cache/issues/120).

- rename class JsonCacheSecStorage to JsonCacheFlutterSecureStorage — **BREAKING CHANGE** — [126](https://github.com/dartoos-dev/json_cache/issues/126).

### Removed

- drop support for the 'EncryptedSharedPreferences' package — **BREAKING CHANGE** — [125](https://github.com/dartoos-dev/json_cache/issues/125).
- support for the 'EncryptedSharedPreferences' package — **BREAKING CHANGE** — [125](https://github.com/dartoos-dev/json_cache/issues/125).

## [1.5.2] - 2023-02-28

Expand Down
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ Rultor.com](https://www.rultor.com/b/dartoos-dev/json_cache)](https://www.rultor
- [JsonCacheTry — Enhanced Diagnostic Messages](#jsoncachetry)
- [JsonCachePrefs — SharedPreferences](#jsoncacheprefs)
- [JsonCacheLocalStorage — LocalStorage](#jsoncachelocalstorage)
- [JsonCacheSecStorage — FlutterSecureStorage](#jsoncachesecstorage)
- [JsonCacheFlutterSecureStorage — FlutterSecureStorage](#jsoncachefluttersecurestorage)
- [JsonCacheCrossLocalStorage — CrossLocalStorage](#jsoncachecrosslocalstorage)
- [JsonCacheHive — Hive](#jsoncachehive)
- [Unit Test Tips](#unit-test-tips)
Expand Down Expand Up @@ -286,16 +286,16 @@ is an implementation on top of the
```


### JsonCacheSecStorage
### JsonCacheFlutterSecureStorage

JsonCacheSecStorage
JsonCacheFlutterSecureStorage
is an implementation on top of the
[flutter_secure_storage](https://pub.dev/packages/flutter_secure_storage) package.

```dart
final secStorage = FlutterSecureStorage(…);
final JsonCache jsonCache = JsonCacheSecStorage(secStorage);
final flutterSecureStorage = FlutterSecureStorage(…);
final JsonCache jsonCache = JsonCacheFlutterSecureStorage(flutterSecureStorage);
// In order to write a string value, define it as a map key whose associated
// value is a boolean placeholder value set to 'true'.
jsonCache.refresh('secret', {'a secret info': true});
Expand Down
2 changes: 1 addition & 1 deletion lib/json_cache.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ export 'src/json_cache.dart';
export 'src/json_cache_cross_local_storage.dart';
export 'src/json_cache_exception.dart';
export 'src/json_cache_fake.dart';
export 'src/json_cache_flutter_secure_storage.dart';
export 'src/json_cache_hive.dart';
export 'src/json_cache_hollow.dart';
export 'src/json_cache_local_storage.dart';
export 'src/json_cache_mem.dart';
export 'src/json_cache_prefs.dart';
export 'src/json_cache_sec_storage.dart';
export 'src/json_cache_try.dart';
export 'src/json_cache_wrap.dart';
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ import 'package:json_cache/json_cache.dart';
///
/// See also:
/// - [flutter_secure_storage](https://pub.dev/packages/flutter_secure_storage).
class JsonCacheSecStorage implements JsonCache {
class JsonCacheFlutterSecureStorage implements JsonCache {
/// Sets the [FlutterSecureStorage] instance.
const JsonCacheSecStorage(this._storage);
const JsonCacheFlutterSecureStorage(this._storage);

// the encapsulated [FlutterSecureStorage] instance.
// The encapsulated [FlutterSecureStorage] instance.
final FlutterSecureStorage _storage;

@override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,24 @@ import 'package:json_cache/json_cache.dart';
import 'flutter_secure_storage_mock.dart';

void main() {
group('JsonCacheSecStorage', () {
group('JsonCacheFlutterSecureStorage', () {
test('clear, value, refresh', () async {
final secStorageMock = FlutterSecureStorageMock();
final JsonCacheSecStorage secCache = JsonCacheSecStorage(secStorageMock);
final JsonCacheFlutterSecureStorage flutterSecureCache =
JsonCacheFlutterSecureStorage(secStorageMock);
const profKey = 'profile';
const profData = <String, Object>{'id': 1, 'name': 'John Due'};
await secCache.refresh(profKey, profData);
await flutterSecureCache.refresh(profKey, profData);
expect(secStorageMock.writeInvokations, 1);

var prof = await secCache.value(profKey);
var prof = await flutterSecureCache.value(profKey);
expect(prof, profData);
expect(secStorageMock.readInvokations, 1);

await secCache.clear();
await flutterSecureCache.clear();
expect(secStorageMock.deleteAllInvokations, 1);

prof = await secCache.value(profKey);
prof = await flutterSecureCache.value(profKey);
expect(prof, isNull);
expect(secStorageMock.readInvokations, 2);
});
Expand All @@ -34,52 +35,54 @@ void main() {
'notifications': {'enabled': true}
};
final secStorageMock = FlutterSecureStorageMock();
final JsonCacheSecStorage secCache = JsonCacheSecStorage(secStorageMock);
final JsonCacheFlutterSecureStorage flutterSecureCache =
JsonCacheFlutterSecureStorage(secStorageMock);
// update data
await secCache.refresh(profKey, profData);
await secCache.refresh(prefKey, prefData);
await flutterSecureCache.refresh(profKey, profData);
await flutterSecureCache.refresh(prefKey, prefData);

// test for `true`
expect(await secCache.contains(profKey), true);
expect(await secCache.contains(prefKey), true);
expect(await flutterSecureCache.contains(profKey), true);
expect(await flutterSecureCache.contains(prefKey), true);

// test for `false`
expect(await secCache.contains('a key'), false);
await secCache.remove(profKey);
expect(await secCache.contains(profKey), false);
await secCache.remove(prefKey);
expect(await secCache.contains(prefKey), false);
expect(await flutterSecureCache.contains('a key'), false);
await flutterSecureCache.remove(profKey);
expect(await flutterSecureCache.contains(profKey), false);
await flutterSecureCache.remove(prefKey);
expect(await flutterSecureCache.contains(prefKey), false);
});
test('remove', () async {
final secStorageMock = FlutterSecureStorageMock();
final JsonCacheSecStorage secCache = JsonCacheSecStorage(secStorageMock);
final JsonCacheFlutterSecureStorage flutterSecureCache =
JsonCacheFlutterSecureStorage(secStorageMock);
const profKey = 'profile';
const prefKey = 'preferences';
final profData = <String, Object>{'id': 1, 'name': 'John Due'};
final prefData = <String, Object>{
'theme': 'dark',
'notifications': {'enabled': true}
};
await secCache.refresh(profKey, profData);
await secCache.refresh(prefKey, prefData);
await flutterSecureCache.refresh(profKey, profData);
await flutterSecureCache.refresh(prefKey, prefData);
expect(secStorageMock.writeInvokations, 2);

var prof = await secCache.value(profKey);
var prof = await flutterSecureCache.value(profKey);
expect(prof, profData);
expect(secStorageMock.readInvokations, 1);

await secCache.remove(profKey);
await flutterSecureCache.remove(profKey);
expect(secStorageMock.deleteInvokations, 1);
prof = await secCache.value(profKey);
prof = await flutterSecureCache.value(profKey);
expect(prof, isNull);
expect(secStorageMock.readInvokations, 2);

var pref = await secCache.value(prefKey);
var pref = await flutterSecureCache.value(prefKey);
expect(pref, prefData);
expect(secStorageMock.readInvokations, 3);
await secCache.remove(prefKey);
await flutterSecureCache.remove(prefKey);
expect(secStorageMock.deleteInvokations, 2);
pref = await secCache.value(prefKey);
pref = await flutterSecureCache.value(prefKey);
expect(pref, isNull);
expect(secStorageMock.readInvokations, 4);
});
Expand Down