Skip to content

Commit 6aaf966

Browse files
authored
chore(datastore): Add multi auth integration tests (#5204)
1 parent 6f7c254 commit 6aaf966

33 files changed

+2047
-485
lines changed

.github/dependabot.yaml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -540,12 +540,16 @@ updates:
540540
- dependency-name: "worker_bee_builder"
541541
- dependency-name: "amplify_datastore"
542542
- dependency-name: "amplify_datastore_plugin_interface"
543-
- dependency-name: "amplify_auth_cognito_dart"
543+
- dependency-name: "amplify_auth_cognito"
544+
- dependency-name: "amplify_analytics_pinpoint"
544545
- dependency-name: "amplify_analytics_pinpoint_dart"
545546
- dependency-name: "amplify_db_common_dart"
546547
- dependency-name: "smithy"
547548
- dependency-name: "smithy_aws"
549+
- dependency-name: "amplify_db_common"
550+
- dependency-name: "amplify_auth_cognito_dart"
548551
- dependency-name: "smithy_codegen"
552+
- dependency-name: "amplify_authenticator"
549553
- package-ecosystem: "pub"
550554
directory: "packages/amplify_datastore/example"
551555
schedule:
@@ -569,12 +573,16 @@ updates:
569573
- dependency-name: "worker_bee_builder"
570574
- dependency-name: "amplify_datastore"
571575
- dependency-name: "amplify_datastore_plugin_interface"
572-
- dependency-name: "amplify_auth_cognito_dart"
576+
- dependency-name: "amplify_auth_cognito"
577+
- dependency-name: "amplify_analytics_pinpoint"
573578
- dependency-name: "amplify_analytics_pinpoint_dart"
574579
- dependency-name: "amplify_db_common_dart"
575580
- dependency-name: "smithy"
576581
- dependency-name: "smithy_aws"
582+
- dependency-name: "amplify_db_common"
583+
- dependency-name: "amplify_auth_cognito_dart"
577584
- dependency-name: "smithy_codegen"
585+
- dependency-name: "amplify_authenticator"
578586
- package-ecosystem: "pub"
579587
directory: "packages/amplify_datastore_plugin_interface"
580588
schedule:

.github/workflows/amplify_datastore_example.yaml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,34 @@ on:
2626
- 'packages/amplify_datastore_plugin_interface/pubspec.yaml'
2727
- 'packages/amplify_lints/lib/**/*.yaml'
2828
- 'packages/amplify_lints/pubspec.yaml'
29+
- 'packages/analytics/amplify_analytics_pinpoint/android/**/*'
30+
- 'packages/analytics/amplify_analytics_pinpoint/lib/**/*.dart'
31+
- 'packages/analytics/amplify_analytics_pinpoint/pubspec.yaml'
2932
- 'packages/analytics/amplify_analytics_pinpoint_dart/lib/**/*.dart'
3033
- 'packages/analytics/amplify_analytics_pinpoint_dart/pubspec.yaml'
3134
- 'packages/api/amplify_api/lib/**/*.dart'
3235
- 'packages/api/amplify_api/pubspec.yaml'
3336
- 'packages/api/amplify_api_dart/lib/**/*.dart'
3437
- 'packages/api/amplify_api_dart/pubspec.yaml'
38+
- 'packages/auth/amplify_auth_cognito/android/**/*'
39+
- 'packages/auth/amplify_auth_cognito/darwin/**/*'
40+
- 'packages/auth/amplify_auth_cognito/lib/**/*.dart'
41+
- 'packages/auth/amplify_auth_cognito/pubspec.yaml'
3542
- 'packages/auth/amplify_auth_cognito_dart/lib/**/*.dart'
3643
- 'packages/auth/amplify_auth_cognito_dart/pubspec.yaml'
44+
- 'packages/authenticator/amplify_authenticator/lib/**/*.dart'
45+
- 'packages/authenticator/amplify_authenticator/pubspec.yaml'
3746
- 'packages/aws_common/lib/**/*.dart'
3847
- 'packages/aws_common/pubspec.yaml'
3948
- 'packages/aws_signature_v4/lib/**/*.dart'
4049
- 'packages/aws_signature_v4/pubspec.yaml'
50+
- 'packages/common/amplify_db_common/android/**/*'
51+
- 'packages/common/amplify_db_common/ios/**/*'
52+
- 'packages/common/amplify_db_common/lib/**/*.dart'
53+
- 'packages/common/amplify_db_common/linux/**/*'
54+
- 'packages/common/amplify_db_common/macos/**/*'
55+
- 'packages/common/amplify_db_common/pubspec.yaml'
56+
- 'packages/common/amplify_db_common/windows/**/*'
4157
- 'packages/common/amplify_db_common_dart/lib/**/*.dart'
4258
- 'packages/common/amplify_db_common_dart/pubspec.yaml'
4359
- 'packages/secure_storage/amplify_secure_storage/android/**/*'
@@ -79,18 +95,34 @@ on:
7995
- 'packages/amplify_datastore_plugin_interface/pubspec.yaml'
8096
- 'packages/amplify_lints/lib/**/*.yaml'
8197
- 'packages/amplify_lints/pubspec.yaml'
98+
- 'packages/analytics/amplify_analytics_pinpoint/android/**/*'
99+
- 'packages/analytics/amplify_analytics_pinpoint/lib/**/*.dart'
100+
- 'packages/analytics/amplify_analytics_pinpoint/pubspec.yaml'
82101
- 'packages/analytics/amplify_analytics_pinpoint_dart/lib/**/*.dart'
83102
- 'packages/analytics/amplify_analytics_pinpoint_dart/pubspec.yaml'
84103
- 'packages/api/amplify_api/lib/**/*.dart'
85104
- 'packages/api/amplify_api/pubspec.yaml'
86105
- 'packages/api/amplify_api_dart/lib/**/*.dart'
87106
- 'packages/api/amplify_api_dart/pubspec.yaml'
107+
- 'packages/auth/amplify_auth_cognito/android/**/*'
108+
- 'packages/auth/amplify_auth_cognito/darwin/**/*'
109+
- 'packages/auth/amplify_auth_cognito/lib/**/*.dart'
110+
- 'packages/auth/amplify_auth_cognito/pubspec.yaml'
88111
- 'packages/auth/amplify_auth_cognito_dart/lib/**/*.dart'
89112
- 'packages/auth/amplify_auth_cognito_dart/pubspec.yaml'
113+
- 'packages/authenticator/amplify_authenticator/lib/**/*.dart'
114+
- 'packages/authenticator/amplify_authenticator/pubspec.yaml'
90115
- 'packages/aws_common/lib/**/*.dart'
91116
- 'packages/aws_common/pubspec.yaml'
92117
- 'packages/aws_signature_v4/lib/**/*.dart'
93118
- 'packages/aws_signature_v4/pubspec.yaml'
119+
- 'packages/common/amplify_db_common/android/**/*'
120+
- 'packages/common/amplify_db_common/ios/**/*'
121+
- 'packages/common/amplify_db_common/lib/**/*.dart'
122+
- 'packages/common/amplify_db_common/linux/**/*'
123+
- 'packages/common/amplify_db_common/macos/**/*'
124+
- 'packages/common/amplify_db_common/pubspec.yaml'
125+
- 'packages/common/amplify_db_common/windows/**/*'
94126
- 'packages/common/amplify_db_common_dart/lib/**/*.dart'
95127
- 'packages/common/amplify_db_common_dart/pubspec.yaml'
96128
- 'packages/secure_storage/amplify_secure_storage/android/**/*'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
import 'package:amplify_flutter/amplify_flutter.dart';
5+
import 'package:amplify_integration_test/amplify_integration_test.dart';
6+
import 'package:flutter_test/flutter_test.dart';
7+
import 'package:integration_test/integration_test.dart';
8+
9+
import '../utils/setup_utils.dart';
10+
import '../utils/test_cloud_synced_model_operation.dart';
11+
import 'models/auth/ModelProvider.dart';
12+
13+
void main() {
14+
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
15+
16+
final enableCloudSync = shouldEnableCloudSync();
17+
group(
18+
'Basic auth model operation${enableCloudSync ? ' with API sync 🌩 enabled' : ''} -',
19+
() {
20+
setUpAll(() async {
21+
await configureDataStore(
22+
enableCloudSync: enableCloudSync,
23+
modelProvider: ModelProvider.instance);
24+
});
25+
tearDownAll(() async {
26+
if (enableCloudSync) {
27+
await deleteTestUser(testUser);
28+
}
29+
});
30+
31+
group("owner only auth model", () {
32+
PrivateTodo testPrivateTodo = PrivateTodo(content: 'test content');
33+
testWidgets(
34+
'should save a new model ${enableCloudSync ? 'and sync to cloud' : ''}',
35+
(WidgetTester tester) async {
36+
if (enableCloudSync) {
37+
await testCloudSyncedModelOperation(
38+
rootModels: [testPrivateTodo],
39+
expectedRootModelVersion: 1,
40+
rootModelOperator: Amplify.DataStore.save,
41+
rootModelEventsAssertor: (events) {
42+
events.forEach((event) {
43+
expect(event.element.deleted, isFalse);
44+
});
45+
},
46+
);
47+
} else {
48+
await Amplify.DataStore.save(testPrivateTodo);
49+
}
50+
51+
var queriedTodos = await Amplify.DataStore.query(PrivateTodo.classType);
52+
expect(queriedTodos, contains(testPrivateTodo));
53+
});
54+
55+
testWidgets(
56+
'should update existing model ${enableCloudSync ? 'and sync to cloud' : ''}',
57+
(WidgetTester tester) async {
58+
var updatedTestTodo =
59+
testPrivateTodo.copyWith(content: "updated test todo");
60+
61+
if (enableCloudSync) {
62+
await testCloudSyncedModelOperation(
63+
rootModels: [updatedTestTodo],
64+
expectedRootModelVersion: 2,
65+
rootModelOperator: Amplify.DataStore.save,
66+
rootModelEventsAssertor: (events) {
67+
events.forEach((event) {
68+
expect(event.element.deleted, isFalse);
69+
});
70+
},
71+
);
72+
} else {
73+
await Amplify.DataStore.save(updatedTestTodo);
74+
}
75+
76+
var queriedTodos = await Amplify.DataStore.query(
77+
PrivateTodo.classType,
78+
where: PrivateTodo.ID.eq(updatedTestTodo.id),
79+
);
80+
81+
expect(queriedTodos, contains(updatedTestTodo));
82+
},
83+
);
84+
85+
testWidgets(
86+
'should delete existing model ${enableCloudSync ? 'and sync to cloud' : ''}',
87+
(WidgetTester tester) async {
88+
if (enableCloudSync) {
89+
await testCloudSyncedModelOperation(
90+
rootModels: [testPrivateTodo],
91+
expectedRootModelVersion: 3,
92+
rootModelOperator: Amplify.DataStore.delete,
93+
rootModelEventsAssertor: (events) {
94+
events.forEach((event) {
95+
expect(event.element.deleted, isTrue);
96+
});
97+
},
98+
);
99+
} else {
100+
await Amplify.DataStore.delete(testPrivateTodo);
101+
}
102+
103+
var queriedTodos =
104+
await Amplify.DataStore.query(PrivateTodo.classType);
105+
106+
// verify Todo was deleted
107+
expect(queriedTodos, isNot(contains(testPrivateTodo)));
108+
},
109+
);
110+
});
111+
112+
group("multi auth model", () {
113+
MultiAuthTodo testMultiAuthTodo = MultiAuthTodo(content: 'test content');
114+
115+
testWidgets(
116+
'should save a new model ${enableCloudSync ? 'and sync to cloud' : ''}',
117+
(WidgetTester tester) async {
118+
if (enableCloudSync) {
119+
await testCloudSyncedModelOperation(
120+
rootModels: [testMultiAuthTodo],
121+
expectedRootModelVersion: 1,
122+
rootModelOperator: Amplify.DataStore.save,
123+
rootModelEventsAssertor: (events) {
124+
events.forEach((event) {
125+
expect(event.element.deleted, isFalse);
126+
});
127+
},
128+
);
129+
} else {
130+
await Amplify.DataStore.save(testMultiAuthTodo);
131+
}
132+
133+
var queriedTodos =
134+
await Amplify.DataStore.query(MultiAuthTodo.classType);
135+
expect(queriedTodos, contains(testMultiAuthTodo));
136+
});
137+
138+
testWidgets(
139+
'should update existing model ${enableCloudSync ? 'and sync to cloud' : ''}',
140+
(WidgetTester tester) async {
141+
var updatedTestTodo =
142+
testMultiAuthTodo.copyWith(content: "updated test todo");
143+
144+
if (enableCloudSync) {
145+
await testCloudSyncedModelOperation(
146+
rootModels: [updatedTestTodo],
147+
expectedRootModelVersion: 2,
148+
rootModelOperator: Amplify.DataStore.save,
149+
rootModelEventsAssertor: (events) {
150+
events.forEach((event) {
151+
expect(event.element.deleted, isFalse);
152+
});
153+
},
154+
);
155+
} else {
156+
await Amplify.DataStore.save(updatedTestTodo);
157+
}
158+
159+
var queriedTodos = await Amplify.DataStore.query(
160+
MultiAuthTodo.classType,
161+
where: MultiAuthTodo.ID.eq(updatedTestTodo.id),
162+
);
163+
164+
expect(queriedTodos, contains(updatedTestTodo));
165+
},
166+
);
167+
168+
testWidgets(
169+
'should delete existing model ${enableCloudSync ? 'and sync to cloud' : ''}',
170+
(WidgetTester tester) async {
171+
if (enableCloudSync) {
172+
await testCloudSyncedModelOperation(
173+
rootModels: [testMultiAuthTodo],
174+
expectedRootModelVersion: 3,
175+
rootModelOperator: Amplify.DataStore.delete,
176+
rootModelEventsAssertor: (events) {
177+
events.forEach((event) {
178+
expect(event.element.deleted, isTrue);
179+
});
180+
},
181+
);
182+
} else {
183+
await Amplify.DataStore.delete(testMultiAuthTodo);
184+
}
185+
186+
var queriedTodos =
187+
await Amplify.DataStore.query(MultiAuthTodo.classType);
188+
189+
// verify Todo was deleted
190+
expect(queriedTodos, isNot(contains(testMultiAuthTodo)));
191+
},
192+
);
193+
});
194+
});
195+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/*
2+
* Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License").
5+
* You may not use this file except in compliance with the License.
6+
* A copy of the License is located at
7+
*
8+
* http://aws.amazon.com/apache2.0
9+
*
10+
* or in the "license" file accompanying this file. This file is distributed
11+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12+
* express or implied. See the License for the specific language governing
13+
* permissions and limitations under the License.
14+
*/
15+
16+
// NOTE: This file is generated and may not follow lint rules defined in your app
17+
// Generated files can be excluded from analysis in analysis_options.yaml
18+
// For more info, see: https://dart.dev/guides/language/analysis-options#excluding-code-from-analysis
19+
20+
// ignore_for_file: public_member_api_docs, annotate_overrides, dead_code, dead_codepublic_member_api_docs, depend_on_referenced_packages, file_names, library_private_types_in_public_api, no_leading_underscores_for_library_prefixes, no_leading_underscores_for_local_identifiers, non_constant_identifier_names, null_check_on_nullable_type_parameter, override_on_non_overriding_member, prefer_adjacent_string_concatenation, prefer_const_constructors, prefer_if_null_operators, prefer_interpolation_to_compose_strings, slash_for_doc_comments, sort_child_properties_last, unnecessary_const, unnecessary_constructor_name, unnecessary_late, unnecessary_new, unnecessary_null_aware_assignments, unnecessary_nullable_for_final_variable_declarations, unnecessary_string_interpolations, use_build_context_synchronously
21+
22+
import 'package:amplify_core/amplify_core.dart' as amplify_core;
23+
24+
import '../../../../lib/models/MultiAuthTodo.dart';
25+
import '../../../../lib/models/PrivateTodo.dart';
26+
27+
export '../../../../lib/models/MultiAuthTodo.dart';
28+
export '../../../../lib/models/PrivateTodo.dart';
29+
30+
class ModelProvider implements amplify_core.ModelProviderInterface {
31+
@override
32+
String version = "44ab790c924e12028850f0fe58e4adb4";
33+
@override
34+
List<amplify_core.ModelSchema> modelSchemas = [
35+
MultiAuthTodo.schema,
36+
PrivateTodo.schema,
37+
];
38+
@override
39+
List<amplify_core.ModelSchema> customTypeSchemas = [];
40+
static final ModelProvider _instance = ModelProvider();
41+
42+
static ModelProvider get instance => _instance;
43+
44+
amplify_core.ModelType getModelTypeByModelName(String modelName) {
45+
switch (modelName) {
46+
case "MultiAuthTodo":
47+
return MultiAuthTodo.classType;
48+
case "PrivateTodo":
49+
return PrivateTodo.classType;
50+
default:
51+
throw Exception(
52+
"Failed to find model in model provider for model name: " +
53+
modelName);
54+
}
55+
}
56+
}
57+
58+
class ModelFieldValue<T> {
59+
const ModelFieldValue.value(this.value);
60+
61+
final T value;
62+
}

0 commit comments

Comments
 (0)