From 5ca1b94309035acd9c936e0b504853331748ad39 Mon Sep 17 00:00:00 2001 From: fischerscode Date: Thu, 10 Sep 2020 19:13:43 +0200 Subject: [PATCH 1/6] docs changes --- README.md | 3 ++- CHANGELOG.md => packages/dart/CHANGELOG.md | 1 + packages/dart/README.md | 5 +---- packages/flutter/CHANGELOG.md | 2 ++ packages/flutter/README.md | 5 +---- 5 files changed, 7 insertions(+), 9 deletions(-) rename CHANGELOG.md => packages/dart/CHANGELOG.md (94%) create mode 100644 packages/flutter/CHANGELOG.md diff --git a/README.md b/README.md index cd73effc2..4942c6885 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ -![Parse Logo](https://i2.wp.com/blog.openshift.com/wp-content/uploads/parse-server-logo-1.png?fit=200%2C200&ssl=1&resize=350%2C200) +![Parse Logo](https://parseplatform.org/img/logo.svg) + --- This repository contains packages that allow communication with a Parse Server, diff --git a/CHANGELOG.md b/packages/dart/CHANGELOG.md similarity index 94% rename from CHANGELOG.md rename to packages/dart/CHANGELOG.md index c17e5d3d5..6d36111d2 100644 --- a/CHANGELOG.md +++ b/packages/dart/CHANGELOG.md @@ -1,4 +1,5 @@ ## 1.0.28 +Spit this package: All flutter parts are now in [this](https://pub.dev/packages/parse_server_sdk_flutter) package! ## 1.0.27 User login / signUp / loginAnonymous delete SessionId stored in device before calling server diff --git a/packages/dart/README.md b/packages/dart/README.md index 04ff714f3..7069d1228 100644 --- a/packages/dart/README.md +++ b/packages/dart/README.md @@ -1,4 +1,4 @@ -![Dart Logo](https://dart.dev/assets/shared/dart-logo-for-shares.png?2) ![Parse Logo](https://i2.wp.com/blog.openshift.com/wp-content/uploads/parse-server-logo-1.png?fit=200%2C200&ssl=1&resize=350%2C200) +![Parse Logo](https://parseplatform.org/img/logo.svg) ![Dart Logo](https://dart.dev/assets/shared/dart-logo-for-shares.png?2) **THIS README IS WORK IN PROGRESS** @@ -8,9 +8,6 @@ This is a Dart package that allows communication with a Parse Server, (https://p This is a work in progress and we are consistently updating it. Please let us know if you think anything needs changing/adding, and more than ever, please do join in on this project. (Even if it is just to improve our documentation) -## Join in! -Want to get involved? Join our Slack channel and help out! (http://flutter-parse-sdk.slack.com) - ## Getting Started To install, either add to your pubspec.yaml ```yml diff --git a/packages/flutter/CHANGELOG.md b/packages/flutter/CHANGELOG.md new file mode 100644 index 000000000..57713cde8 --- /dev/null +++ b/packages/flutter/CHANGELOG.md @@ -0,0 +1,2 @@ +## 1.0.28 + diff --git a/packages/flutter/README.md b/packages/flutter/README.md index 800477861..2cc329d4b 100644 --- a/packages/flutter/README.md +++ b/packages/flutter/README.md @@ -1,14 +1,11 @@ -![Parse Logo](https://upload.wikimedia.org/wikipedia/commons/1/17/Google-flutter-logo.png)![Flutter Logo](https://i2.wp.com/blog.openshift.com/wp-content/uploads/parse-server-logo-1.png?fit=200%2C200&ssl=1&resize=350%2C200) +![Parse Logo](https://parseplatform.org/img/logo.svg) ![Flutter Logo](https://i2.wp.com/blog.openshift.com/wp-content/uploads/parse-server-logo-1.png?fit=200%2C200&ssl=1&resize=350%2C200) ## Parse For Flutter! Hi, this is a Flutter plugin that allows communication with a Parse Server, (https://parseplatform.org) either hosted on your own server or another, like (http://Back4App.com). This is a work in progress and we are consistently updating it. Please let us know if you think anything needs changing/adding, and more than ever, please do join in on this project. (Even if it is just to improve our documentation) -## Join in! -Want to get involved? Join our Slack channel and help out! (http://flutter-parse-sdk.slack.com) - ## Getting Started To install, either add to your pubspec.yaml ```yml From e5cc846541fc08139a94f2d07fec75c0b898c385 Mon Sep 17 00:00:00 2001 From: fischerscode Date: Thu, 10 Sep 2020 19:14:03 +0200 Subject: [PATCH 2/6] remove flutter_test --- packages/dart/pubspec.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/dart/pubspec.yaml b/packages/dart/pubspec.yaml index 888de316e..da4f07621 100644 --- a/packages/dart/pubspec.yaml +++ b/packages/dart/pubspec.yaml @@ -24,6 +24,5 @@ dependencies: dev_dependencies: # Testing - flutter_test: - sdk: flutter + test: ^1.15.3 mockito: ^4.1.1 From 71bba125337ae09476973c9ccc3bf102c43bd9f5 Mon Sep 17 00:00:00 2001 From: fischerscode Date: Thu, 10 Sep 2020 20:35:40 +0200 Subject: [PATCH 3/6] CoreStore was implemented twice --- packages/dart/lib/parse_server_sdk.dart | 21 ++++++++------- packages/dart/lib/src/data/core_store.dart | 31 ---------------------- 2 files changed, 11 insertions(+), 41 deletions(-) delete mode 100644 packages/dart/lib/src/data/core_store.dart diff --git a/packages/dart/lib/parse_server_sdk.dart b/packages/dart/lib/parse_server_sdk.dart index c5da87525..b0bf2b32b 100644 --- a/packages/dart/lib/parse_server_sdk.dart +++ b/packages/dart/lib/parse_server_sdk.dart @@ -19,17 +19,9 @@ import 'package:uuid/uuid.dart'; import 'package:web_socket_channel/web_socket_channel.dart'; import 'package:xxtea/xxtea.dart'; -part 'package:parse_server_sdk/src/data/core_store.dart'; -part 'package:parse_server_sdk/src/data/parse_subclass_handler.dart'; -part 'package:parse_server_sdk/src/objects/response/parse_error_response.dart'; -part 'package:parse_server_sdk/src/objects/response/parse_exception_response.dart'; -part 'package:parse_server_sdk/src/objects/response/parse_response_builder.dart'; -part 'package:parse_server_sdk/src/objects/response/parse_response_utils.dart'; -part 'package:parse_server_sdk/src/objects/response/parse_success_no_results.dart'; -part 'package:parse_server_sdk/src/storage/core_store_sem_impl.dart'; -part 'package:parse_server_sdk/src/storage/xxtea_codec.dart'; part 'src/base/parse_constants.dart'; part 'src/data/parse_core_data.dart'; +part 'src/data/parse_subclass_handler.dart'; part 'src/enums/parse_enum_api_rq.dart'; part 'src/network/parse_connectivity.dart'; part 'src/network/parse_http_client.dart'; @@ -52,14 +44,23 @@ part 'src/objects/parse_relation.dart'; part 'src/objects/parse_response.dart'; part 'src/objects/parse_session.dart'; part 'src/objects/parse_user.dart'; +part 'src/objects/response/parse_error_response.dart'; +part 'src/objects/response/parse_exception_response.dart'; +part 'src/objects/response/parse_response_builder.dart'; +part 'src/objects/response/parse_response_utils.dart'; +part 'src/objects/response/parse_success_no_results.dart'; +part 'src/storage/core_store.dart'; +part 'src/storage/core_store_memory.dart'; +part 'src/storage/core_store_sem_impl.dart'; +part 'src/storage/xxtea_codec.dart'; part 'src/utils/parse_date_format.dart'; part 'src/utils/parse_decoder.dart'; part 'src/utils/parse_encoder.dart'; part 'src/utils/parse_file_extensions.dart'; +part 'src/utils/parse_live_list.dart'; part 'src/utils/parse_logger.dart'; part 'src/utils/parse_login_helpers.dart'; part 'src/utils/parse_utils.dart'; -part 'src/utils/parse_live_list.dart'; class Parse { ParseCoreData data; diff --git a/packages/dart/lib/src/data/core_store.dart b/packages/dart/lib/src/data/core_store.dart deleted file mode 100644 index b7d2fe450..000000000 --- a/packages/dart/lib/src/data/core_store.dart +++ /dev/null @@ -1,31 +0,0 @@ -part of flutter_parse_sdk; - -abstract class CoreStore { - Future containsKey(String key); - - Future get(String key); - - Future getBool(String key); - - Future getInt(String key); - - Future getDouble(String key); - - Future getString(String key); - - Future> getStringList(String key); - - Future setBool(String key, bool value); - - Future setInt(String key, int value); - - Future setDouble(String key, double value); - - Future setString(String key, String value); - - Future setStringList(String key, List values); - - Future remove(String key); - - Future clear(); -} From c646bc0f10881ed1e1c80cb9262eaed3e67d1407 Mon Sep 17 00:00:00 2001 From: fischerscode Date: Thu, 10 Sep 2020 20:36:45 +0200 Subject: [PATCH 4/6] implemented CoreStoreMemoryImp (default corestore for dart) --- packages/dart/README.md | 4 +- .../dart/lib/src/data/parse_core_data.dart | 9 +-- .../lib/src/storage/core_store_memory.dart | 75 +++++++++++++++++++ .../test/parse_client_configuration_test.dart | 29 +++++++ packages/dart/test/parse_query_test.dart | 43 +++++++++++ 5 files changed, 152 insertions(+), 8 deletions(-) create mode 100644 packages/dart/lib/src/storage/core_store_memory.dart create mode 100644 packages/dart/test/parse_client_configuration_test.dart create mode 100644 packages/dart/test/parse_query_test.dart diff --git a/packages/dart/README.md b/packages/dart/README.md index 7069d1228..cfe6c71d9 100644 --- a/packages/dart/README.md +++ b/packages/dart/README.md @@ -34,7 +34,7 @@ If you want to use secure storage or use the Flutter web/desktop SDK, please cha await Parse().initialize( keyParseApplicationId, keyParseServerUrl, - coreStore: await CoreStoreSembastImp.getInstance()); + coreStore: await CoreStoreSembastImp.getInstance("/data")); ``` It's possible to add other parameters to work with your instance of Parse Server:- @@ -48,7 +48,7 @@ It's possible to add other parameters to work with your instance of Parse Server liveQueryUrl: keyLiveQueryUrl, // Required if using LiveQuery autoSendSessionId: true, // Required for authentication and ACL securityContext: securityContext, // Again, required for some setups - coreStore: await CoreStoreSharedPrefsImp.getInstance()); // Local data storage method. Will use SharedPreferences instead of Sembast as an internal DB + coreStore: CoreStoreMemoryImp()); // Non persistent mode (default): Sdk will store everything in memmore instead of using Sembast as an internal DB. ``` diff --git a/packages/dart/lib/src/data/parse_core_data.dart b/packages/dart/lib/src/data/parse_core_data.dart index 514b83dd5..de4fe75c3 100644 --- a/packages/dart/lib/src/data/parse_core_data.dart +++ b/packages/dart/lib/src/data/parse_core_data.dart @@ -35,14 +35,11 @@ class ParseCoreData { List liveListRetryIntervals, ParseConnectivityProvider connectivityProvider, String fileDirectory, - Stream appResumedStream, + Stream appResumedStream, }) async { _instance = ParseCoreData._init(appId, serverUrl); - assert(_instance.storage != null || store != null, - 'There is no CoreStore set.'); - - _instance.storage ??= store; + _instance.storage ??= store ?? CoreStoreMemoryImp(); if (debug != null) { _instance.debug = debug; @@ -98,7 +95,7 @@ class ParseCoreData { _instance.fileDirectory = fileDirectory; } - if(appResumedStream!= null){ + if (appResumedStream != null) { _instance.appResumedStream = appResumedStream; } } diff --git a/packages/dart/lib/src/storage/core_store_memory.dart b/packages/dart/lib/src/storage/core_store_memory.dart new file mode 100644 index 000000000..238c2ffd0 --- /dev/null +++ b/packages/dart/lib/src/storage/core_store_memory.dart @@ -0,0 +1,75 @@ +part of flutter_parse_sdk; + +class CoreStoreMemoryImp implements CoreStore { + static Map _data = {}; + + @override + Future clear() async { + _data = {}; + } + + @override + Future containsKey(String key) async { + return _data.containsKey(key); + } + + @override + Future get(String key) async { + return _data[key]; + } + + @override + Future getBool(String key) async { + return _data[key]; + } + + @override + Future getDouble(String key) async { + return _data[key]; + } + + @override + Future getInt(String key) async { + return _data[key]; + } + + @override + Future getString(String key) async { + return _data[key]; + } + + @override + Future> getStringList(String key) async { + return _data[key]; + } + + @override + Future remove(String key) async { + return _data.remove(key); + } + + @override + Future setBool(String key, bool value) async { + _data[key] = value; + } + + @override + Future setDouble(String key, double value) async { + _data[key] = value; + } + + @override + Future setInt(String key, int value) async { + _data[key] = value; + } + + @override + Future setString(String key, String value) async { + _data[key] = value; + } + + @override + Future setStringList(String key, List values) async { + _data[key] = values; + } +} diff --git a/packages/dart/test/parse_client_configuration_test.dart b/packages/dart/test/parse_client_configuration_test.dart new file mode 100644 index 000000000..f55f2ebf1 --- /dev/null +++ b/packages/dart/test/parse_client_configuration_test.dart @@ -0,0 +1,29 @@ +import 'package:parse_server_sdk/parse_server_sdk.dart'; +import 'package:test/test.dart'; + +void main() { + test('testBuilder', () async { + await Parse().initialize('appId', 'serverUrl', + clientKey: 'clientKey', + liveQueryUrl: 'liveQueryUrl', + appName: 'appName', + appPackageName: 'somePackageName', + appVersion: 'someAppVersion', + masterKey: 'masterKey', + sessionId: 'sessionId', + fileDirectory: 'someDirectory', + debug: true,); + + expect(ParseCoreData().applicationId, 'appId'); + expect(ParseCoreData().serverUrl, 'serverUrl'); + expect(ParseCoreData().clientKey, 'clientKey'); + expect(ParseCoreData().liveQueryURL, 'liveQueryUrl'); + expect(ParseCoreData().appName, 'appName'); + expect(ParseCoreData().appPackageName, 'somePackageName'); + expect(ParseCoreData().appVersion, 'someAppVersion'); + expect(ParseCoreData().masterKey, 'masterKey'); + expect(ParseCoreData().sessionId, 'sessionId'); + expect(ParseCoreData().debug, true); + expect(ParseCoreData().fileDirectory, 'someDirectory'); + }); +} \ No newline at end of file diff --git a/packages/dart/test/parse_query_test.dart b/packages/dart/test/parse_query_test.dart new file mode 100644 index 000000000..7a8ccb563 --- /dev/null +++ b/packages/dart/test/parse_query_test.dart @@ -0,0 +1,43 @@ +import 'package:mockito/mockito.dart'; +import 'package:parse_server_sdk/parse_server_sdk.dart'; +import 'package:test/test.dart'; + +class MockClient extends Mock implements ParseHTTPClient {} + +void main() { + group('queryBuilder', () { + test('whereRelatedTo', () async { + final MockClient client = MockClient(); + + await Parse().initialize( + 'appId', + 'https://test.parse.com', + debug: true, + // to prevent automatic detection + fileDirectory: 'someDirectory', + // to prevent automatic detection + appName: 'appName', + // to prevent automatic detection + appPackageName: 'somePackageName', + // to prevent automatic detection + appVersion: 'someAppVersion', + ); + + final QueryBuilder queryBuilder = + QueryBuilder(ParseObject('_User', client: client)); + queryBuilder.whereRelatedTo('likes', 'Post', '8TOXdXf3tz'); + + when(client.data).thenReturn(ParseCoreData()); + await queryBuilder.query(); + + final Uri result = verify(client.get(captureAny)).captured.single; + + expect(result.path, '/classes/_User'); + + final Uri expectedQuery = Uri( + query: + 'where={"\$relatedTo":{"object":{"__type":"Pointer","className":"Post","objectId":"8TOXdXf3tz"},"key":"likes"}}'); + expect(result.query, expectedQuery.query); + }); + }); +} From 159d59aaac4530890fbe48e47c69bf72918c53fe Mon Sep 17 00:00:00 2001 From: fischerscode Date: Thu, 10 Sep 2020 21:03:56 +0200 Subject: [PATCH 5/6] fix tests --- .travis.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 13c0c03b0..2728a0e40 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,11 +7,14 @@ dart: install: - git clone https://github.com/flutter/flutter.git -b stable --depth 1 - export PATH=./flutter/bin:$PATH + - export PATH=./flutter/bin:$PATH - flutter doctor script: - - flutter packages get - - flutter test --no-pub test/ + - (cd packages/dart && dart pub get) + - (cd packages/dart && dart test test/) + - (cd packages/flutter && flutter pub get) + - (cd packages/flutter && flutter test --no-pub test/) cache: directories: From 89119b4fd776d54b35c0e29bcab21c88f18e6f4c Mon Sep 17 00:00:00 2001 From: fischerscode Date: Thu, 10 Sep 2020 21:04:18 +0200 Subject: [PATCH 6/6] Update .travis.yml --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 2728a0e40..a9fdeaa96 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,6 @@ dart: install: - git clone https://github.com/flutter/flutter.git -b stable --depth 1 - export PATH=./flutter/bin:$PATH - - export PATH=./flutter/bin:$PATH - flutter doctor script: