From 9d36f351ff630efbca6854d63be8d16fdec042dc Mon Sep 17 00:00:00 2001 From: Dan Reynolds Date: Fri, 8 Nov 2024 09:01:31 -0500 Subject: [PATCH] finish unencrypted indexed db tests --- .vscode/launch.json | 3 - .vscode/tasks.json | 6 +- test/{ => core}/loon_test.dart | 8 +- test/{ => core}/persistor/persistor_test.dart | 4 +- .../{ => core}/store/path_ref_store_test.dart | 0 .../store/value_ref_store_test.dart | 0 test/{ => core}/store/value_store_test.dart | 0 test/models/test_indexed_db_persistor.dart | 4 + .../encrypted_file_persistor_test.dart | 6 +- .../persistor/file_persistor_test.dart | 8 +- .../persistor/indexed_db_persistor_test.dart | 131 +++++++++++++++++- 11 files changed, 148 insertions(+), 22 deletions(-) rename test/{ => core}/loon_test.dart (99%) rename test/{ => core}/persistor/persistor_test.dart (98%) rename test/{ => core}/store/path_ref_store_test.dart (100%) rename test/{ => core}/store/value_ref_store_test.dart (100%) rename test/{ => core}/store/value_store_test.dart (100%) rename test/{ => native}/persistor/encrypted_file_persistor_test.dart (99%) rename test/{ => native}/persistor/file_persistor_test.dart (99%) rename test/{ => web}/persistor/indexed_db_persistor_test.dart (63%) diff --git a/.vscode/launch.json b/.vscode/launch.json index 1ff4608..968d86a 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,7 +1,4 @@ { - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { diff --git a/.vscode/tasks.json b/.vscode/tasks.json index dcf82c9..6dd7f5f 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -7,7 +7,7 @@ "label": "Core tests", "type": "shell", "command": "flutter", - "args": ["test", "test/loon_test.dart", "test/store", "test/persistor/persistor_test.dart"], + "args": ["test", "test/core"], "group": { "kind": "build", "isDefault": true @@ -19,7 +19,7 @@ "label": "Native tests", "type": "shell", "command": "flutter", - "args": ["test", "test/persistor/file_persistor_test.dart", "test/persistor/encrypted_file_persistor_test.dart"], + "args": ["test", "test/native"], "group": { "kind": "build", "isDefault": true @@ -33,7 +33,7 @@ "command": "flutter", "args": [ "test", - "test/persistor/indexed_db_persistor_test.dart", + "test/web", "--platform", "chrome" ], diff --git a/test/loon_test.dart b/test/core/loon_test.dart similarity index 99% rename from test/loon_test.dart rename to test/core/loon_test.dart index 3025af9..a40e7dd 100644 --- a/test/loon_test.dart +++ b/test/core/loon_test.dart @@ -1,10 +1,10 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:loon/loon.dart'; -import 'matchers/document_snapshot.dart'; -import 'models/test_persistor.dart'; -import 'models/test_user_model.dart'; -import 'utils.dart'; +import '../matchers/document_snapshot.dart'; +import '../models/test_persistor.dart'; +import '../models/test_user_model.dart'; +import '../utils.dart'; void main() { group( diff --git a/test/persistor/persistor_test.dart b/test/core/persistor/persistor_test.dart similarity index 98% rename from test/persistor/persistor_test.dart rename to test/core/persistor/persistor_test.dart index 518759e..7c2f439 100644 --- a/test/persistor/persistor_test.dart +++ b/test/core/persistor/persistor_test.dart @@ -1,8 +1,8 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:loon/loon.dart'; -import '../models/test_persistor.dart'; -import '../models/test_user_model.dart'; +import '../../models/test_persistor.dart'; +import '../../models/test_user_model.dart'; void main() { tearDown(() { diff --git a/test/store/path_ref_store_test.dart b/test/core/store/path_ref_store_test.dart similarity index 100% rename from test/store/path_ref_store_test.dart rename to test/core/store/path_ref_store_test.dart diff --git a/test/store/value_ref_store_test.dart b/test/core/store/value_ref_store_test.dart similarity index 100% rename from test/store/value_ref_store_test.dart rename to test/core/store/value_ref_store_test.dart diff --git a/test/store/value_store_test.dart b/test/core/store/value_store_test.dart similarity index 100% rename from test/store/value_store_test.dart rename to test/core/store/value_store_test.dart diff --git a/test/models/test_indexed_db_persistor.dart b/test/models/test_indexed_db_persistor.dart index 427bd1f..39d5f89 100644 --- a/test/models/test_indexed_db_persistor.dart +++ b/test/models/test_indexed_db_persistor.dart @@ -50,6 +50,10 @@ class TestIndexedDBPersistor extends IndexedDBPersistor { return objectStore.get(storeName.toJS); }); + if (result == null) { + return null; + } + final value = result[IndexedDBPersistor.valuePath]; return jsonDecode(encrypted ? encrypter.decrypt(value) : value); diff --git a/test/persistor/encrypted_file_persistor_test.dart b/test/native/persistor/encrypted_file_persistor_test.dart similarity index 99% rename from test/persistor/encrypted_file_persistor_test.dart rename to test/native/persistor/encrypted_file_persistor_test.dart index fc7ecf7..7765b67 100644 --- a/test/persistor/encrypted_file_persistor_test.dart +++ b/test/native/persistor/encrypted_file_persistor_test.dart @@ -2,9 +2,9 @@ import 'dart:convert'; import 'dart:io'; import 'package:flutter_test/flutter_test.dart'; import 'package:loon/loon.dart'; -import '../models/test_file_persistor.dart'; -import '../models/test_user_model.dart'; -import '../utils.dart'; +import '../../models/test_file_persistor.dart'; +import '../../models/test_user_model.dart'; +import '../../utils.dart'; // ignore: depend_on_referenced_packages import 'package:path_provider_platform_interface/path_provider_platform_interface.dart'; diff --git a/test/persistor/file_persistor_test.dart b/test/native/persistor/file_persistor_test.dart similarity index 99% rename from test/persistor/file_persistor_test.dart rename to test/native/persistor/file_persistor_test.dart index 651c927..e141e2f 100644 --- a/test/persistor/file_persistor_test.dart +++ b/test/native/persistor/file_persistor_test.dart @@ -8,10 +8,10 @@ import 'package:path_provider_platform_interface/path_provider_platform_interfac // ignore: depend_on_referenced_packages import 'package:plugin_platform_interface/plugin_platform_interface.dart'; -import '../models/test_file_persistor.dart'; -import '../models/test_large_model.dart'; -import '../models/test_user_model.dart'; -import '../utils.dart'; +import '../../models/test_file_persistor.dart'; +import '../../models/test_large_model.dart'; +import '../../models/test_user_model.dart'; +import '../../utils.dart'; late Directory testDirectory; diff --git a/test/persistor/indexed_db_persistor_test.dart b/test/web/persistor/indexed_db_persistor_test.dart similarity index 63% rename from test/persistor/indexed_db_persistor_test.dart rename to test/web/persistor/indexed_db_persistor_test.dart index 26130f0..f152972 100644 --- a/test/persistor/indexed_db_persistor_test.dart +++ b/test/web/persistor/indexed_db_persistor_test.dart @@ -1,9 +1,9 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:loon/loon.dart'; -import '../models/test_indexed_db_persistor.dart'; -import '../models/test_user_model.dart'; -import '../utils.dart'; +import '../../models/test_indexed_db_persistor.dart'; +import '../../models/test_user_model.dart'; +import '../../utils.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); @@ -222,5 +222,130 @@ void main() { ); }); }); + + group( + 'clear', + () { + test( + "Deletes collections and their subcollections", + () async { + final userCollection = Loon.collection( + 'users', + fromJson: TestUserModel.fromJson, + toJson: (user) => user.toJson(), + ); + final friendsCollection = userCollection.doc('1').subcollection( + 'friends', + fromJson: TestUserModel.fromJson, + toJson: (user) => user.toJson(), + persistorSettings: PersistorSettings( + key: Persistor.key('friends'), + ), + ); + + userCollection.doc('1').create(TestUserModel('User 1')); + userCollection.doc('2').create(TestUserModel('User 2')); + friendsCollection.doc('1').create(TestUserModel('Friend 1')); + + await completer.onSync; + + expect( + await persistor.getStore('__store__'), + { + "": { + "users": { + "__values": { + "1": {'name': 'User 1'}, + "2": {'name': 'User 2'}, + } + } + } + }, + ); + + expect( + await persistor.getStore('friends'), + { + "users__1__friends": { + "users": { + "1": { + "friends": { + "__values": { + "1": {'name': 'Friend 1'}, + } + } + } + } + } + }, + ); + + userCollection.delete(); + + await completer.onSync; + + expect( + await persistor.getStore('__store__'), + null, + ); + + expect( + await persistor.getStore('friends'), + null, + ); + }, + ); + }, + ); + + group( + 'clearAll', + () { + test( + "Deletes all file data stores", + () async { + final userCollection = Loon.collection( + 'users', + fromJson: TestUserModel.fromJson, + toJson: (user) => user.toJson(), + persistorSettings: PersistorSettings( + key: Persistor.key('users'), + ), + ); + + userCollection.doc('1').create(TestUserModel('User 1')); + userCollection.doc('2').create(TestUserModel('User 2')); + + await completer.onSync; + + expect(await persistor.getStore('users'), { + "users": { + "users": { + "__values": { + "1": {'name': 'User 1'}, + "2": {'name': 'User 2'}, + } + } + } + }); + expect(await persistor.getStore('__resolver__'), { + "__refs": { + Persistor.defaultKey.value: 1, + "users": 1, + }, + "__values": { + ValueStore.root: Persistor.defaultKey.value, + "users": "users", + }, + }); + + await Loon.clearAll(); + + expect(await persistor.getStore('users'), null); + expect(await persistor.getStore('__resolver__'), null); + }, + ); + }, + ); }); }