Skip to content

Commit dc7de26

Browse files
chore: replace mockito with mocktail (#4813)
1 parent 46534e6 commit dc7de26

File tree

5 files changed

+133
-883
lines changed

5 files changed

+133
-883
lines changed

packages/notifications/push/amplify_push_notifications_pinpoint/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,4 @@ dev_dependencies:
3636
built_value_generator: 8.8.1
3737
flutter_test:
3838
sdk: flutter
39-
mockito: ^5.0.0
39+
mocktail: ^1.0.0

packages/notifications/push/amplify_push_notifications_pinpoint/test/pinpoint_provider_test.dart

Lines changed: 116 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,24 @@ import 'package:amplify_analytics_pinpoint_dart/src/impl/analytics_client/event_
88
import 'package:amplify_flutter/amplify_flutter.dart';
99
import 'package:amplify_push_notifications_pinpoint/src/pinpoint_provider.dart';
1010
import 'package:flutter_test/flutter_test.dart';
11-
import 'package:mockito/annotations.dart';
12-
import 'package:mockito/mockito.dart';
11+
import 'package:mocktail/mocktail.dart';
1312

14-
import 'pinpoint_provider_test.mocks.dart';
1513
import 'test_data/fake_notification_messges.dart';
1614

17-
@GenerateMocks(
18-
[
19-
AmplifyAuthProviderRepository,
20-
AWSIamAmplifyAuthProvider,
21-
UserProfile,
22-
AnalyticsClient,
23-
EndpointClient,
24-
EventClient,
25-
],
26-
)
15+
class MockAmplifyAuthProviderRepository extends Mock
16+
implements AmplifyAuthProviderRepository {}
17+
18+
class MockAWSIamAmplifyAuthProvider extends Mock
19+
implements AWSIamAmplifyAuthProvider {}
20+
21+
class MockUserProfile extends Mock implements UserProfile {}
22+
23+
class MockAnalyticsClient extends Mock implements AnalyticsClient {}
24+
25+
class MockEndpointClient extends Mock implements EndpointClient {}
26+
27+
class MockEventClient extends Mock implements EventClient {}
28+
2729
void main() {
2830
TestWidgetsFlutterBinding.ensureInitialized();
2931
final pinpointProvider = PinpointProvider();
@@ -35,9 +37,24 @@ void main() {
3537
final awsIamAmplifyAuthProvider = MockAWSIamAmplifyAuthProvider();
3638
final mockAnalyticsClient = MockAnalyticsClient();
3739
group('PinpointProvider', () {
40+
setUpAll(() {
41+
registerFallbackValue(
42+
const AmplifyAuthProviderToken<AmplifyAuthProvider>('mock-token'),
43+
);
44+
registerFallbackValue(
45+
const AWSCredentialsProvider(
46+
AWSCredentials(
47+
'accessKeyId',
48+
'secretAccessKey',
49+
),
50+
),
51+
);
52+
});
3853
test('init fails when retrieving an Auth provider was not successful', () {
39-
when(mockAmplifyAuthProviderRepository.getAuthProvider(any))
40-
.thenReturn(null);
54+
when(
55+
() => mockAmplifyAuthProviderRepository
56+
.getAuthProvider<AmplifyAuthProvider>(any()),
57+
).thenReturn(null);
4158
expect(
4259
() async => pinpointProvider.init(
4360
config: notificationsPinpointConfig,
@@ -72,28 +89,32 @@ void main() {
7289

7390
test('identifyUser should throw exception if the underlying call throws',
7491
() async {
75-
when(mockAmplifyAuthProviderRepository.getAuthProvider(any))
76-
.thenReturn(awsIamAmplifyAuthProvider);
7792
when(
78-
mockAnalyticsClient.init(
79-
pinpointAppId: anyNamed('pinpointAppId'),
80-
region: anyNamed('region'),
81-
authProvider: anyNamed('authProvider'),
93+
() => mockAmplifyAuthProviderRepository.getAuthProvider(
94+
APIAuthorizationType.iam.authProviderToken,
95+
),
96+
).thenReturn(awsIamAmplifyAuthProvider);
97+
when(
98+
() => mockAnalyticsClient.init(
99+
pinpointAppId: any(named: 'pinpointAppId'),
100+
region: any(named: 'region'),
101+
authProvider: any(named: 'authProvider'),
82102
),
83103
).thenAnswer((realInvocation) async {});
84104

85105
final mockEndpointClient = MockEndpointClient();
86106

87107
when(
88-
mockAnalyticsClient.endpointClient,
108+
() => mockAnalyticsClient.endpointClient,
89109
).thenReturn(mockEndpointClient);
90110

91111
await pinpointProvider.init(
92112
config: notificationsPinpointConfig,
93113
authProviderRepo: mockAmplifyAuthProviderRepository,
94114
analyticsClient: mockAnalyticsClient,
95115
);
96-
when(mockEndpointClient.setUser(any, any)).thenThrow(Exception());
116+
when(() => mockEndpointClient.setUser(any(), any()))
117+
.thenThrow(Exception());
97118
expect(
98119
pinpointProvider.identifyUser(
99120
userId: 'userId',
@@ -135,16 +156,32 @@ void main() {
135156
});
136157

137158
group('Happy path test', () {
159+
setUpAll(() {
160+
registerFallbackValue(
161+
const AmplifyAuthProviderToken<AmplifyAuthProvider>('mock-token'),
162+
);
163+
registerFallbackValue(
164+
const AWSCredentialsProvider(
165+
AWSCredentials(
166+
'accessKeyId',
167+
'secretAccessKey',
168+
),
169+
),
170+
);
171+
});
138172
TestWidgetsFlutterBinding.ensureInitialized();
139173

140174
test('init should run successfully', () async {
141-
when(mockAmplifyAuthProviderRepository.getAuthProvider(any))
142-
.thenReturn(awsIamAmplifyAuthProvider);
143175
when(
144-
mockAnalyticsClient.init(
145-
pinpointAppId: anyNamed('pinpointAppId'),
146-
region: anyNamed('region'),
147-
authProvider: anyNamed('authProvider'),
176+
() => mockAmplifyAuthProviderRepository.getAuthProvider(
177+
APIAuthorizationType.iam.authProviderToken,
178+
),
179+
).thenReturn(awsIamAmplifyAuthProvider);
180+
when(
181+
() => mockAnalyticsClient.init(
182+
pinpointAppId: any(named: 'pinpointAppId'),
183+
region: any(named: 'region'),
184+
authProvider: any(named: 'authProvider'),
148185
),
149186
).thenAnswer((realInvocation) async {});
150187
expect(
@@ -158,20 +195,26 @@ void main() {
158195
});
159196

160197
test('identifyUser should run successfully', () async {
161-
when(mockAmplifyAuthProviderRepository.getAuthProvider(any))
162-
.thenReturn(awsIamAmplifyAuthProvider);
163198
when(
164-
mockAnalyticsClient.init(
165-
pinpointAppId: anyNamed('pinpointAppId'),
166-
region: anyNamed('region'),
167-
authProvider: anyNamed('authProvider'),
199+
() => mockAmplifyAuthProviderRepository.getAuthProvider(
200+
APIAuthorizationType.iam.authProviderToken,
201+
),
202+
).thenReturn(awsIamAmplifyAuthProvider);
203+
when(
204+
() => mockAnalyticsClient.init(
205+
pinpointAppId: any(named: 'pinpointAppId'),
206+
region: any(named: 'region'),
207+
authProvider: any(named: 'authProvider'),
168208
),
169209
).thenAnswer((realInvocation) async {});
170210

171211
final mockEndpointClient = MockEndpointClient();
212+
when(() => mockEndpointClient.setUser(any(), any()))
213+
.thenAnswer((_) async => {});
214+
when(mockEndpointClient.updateEndpoint).thenAnswer((_) async => {});
172215

173216
when(
174-
mockAnalyticsClient.endpointClient,
217+
() => mockAnalyticsClient.endpointClient,
175218
).thenReturn(mockEndpointClient);
176219

177220
await pinpointProvider.init(
@@ -187,27 +230,33 @@ void main() {
187230
),
188231
completes,
189232
);
190-
verify(mockEndpointClient.setUser(any, any));
233+
verify(() => mockEndpointClient.setUser(any(), any()));
191234
});
192235

193236
test('registerDevice should run successfully', () async {
194-
when(mockAmplifyAuthProviderRepository.getAuthProvider(any))
195-
.thenReturn(awsIamAmplifyAuthProvider);
196237
when(
197-
mockAnalyticsClient.init(
198-
pinpointAppId: anyNamed('pinpointAppId'),
199-
region: anyNamed('region'),
200-
authProvider: anyNamed('authProvider'),
238+
() => mockAmplifyAuthProviderRepository.getAuthProvider(
239+
APIAuthorizationType.iam.authProviderToken,
240+
),
241+
).thenReturn(awsIamAmplifyAuthProvider);
242+
when(
243+
() => mockAnalyticsClient.init(
244+
pinpointAppId: any(named: 'pinpointAppId'),
245+
region: any(named: 'region'),
246+
authProvider: any(named: 'authProvider'),
201247
),
202248
).thenAnswer((realInvocation) async {});
203249

204250
final mockEndpointClient = MockEndpointClient();
251+
when(() => mockEndpointClient.setUser(any(), any()))
252+
.thenAnswer((_) async => {});
253+
when(mockEndpointClient.updateEndpoint).thenAnswer((_) async => {});
205254

206255
when(
207-
mockAnalyticsClient.endpointClient,
256+
() => mockAnalyticsClient.endpointClient,
208257
).thenReturn(mockEndpointClient);
209258

210-
expect(
259+
await expectLater(
211260
pinpointProvider.init(
212261
config: notificationsPinpointConfig,
213262
authProviderRepo: mockAmplifyAuthProviderRepository,
@@ -222,27 +271,37 @@ void main() {
222271
),
223272
completes,
224273
);
225-
verify(mockEndpointClient.updateEndpoint());
274+
verify(mockEndpointClient.updateEndpoint);
226275
});
227276

228277
test('recordEvent should run successfully', () async {
229-
when(mockAmplifyAuthProviderRepository.getAuthProvider(any))
230-
.thenReturn(awsIamAmplifyAuthProvider);
231278
when(
232-
mockAnalyticsClient.init(
233-
pinpointAppId: anyNamed('pinpointAppId'),
234-
region: anyNamed('region'),
235-
authProvider: anyNamed('authProvider'),
279+
() => mockAmplifyAuthProviderRepository.getAuthProvider(
280+
APIAuthorizationType.iam.authProviderToken,
281+
),
282+
).thenReturn(awsIamAmplifyAuthProvider);
283+
when(
284+
() => mockAnalyticsClient.init(
285+
pinpointAppId: any(named: 'pinpointAppId'),
286+
region: any(named: 'region'),
287+
authProvider: any(named: 'authProvider'),
236288
),
237289
).thenAnswer((realInvocation) async {});
238290

239291
final mockEventClient = MockEventClient();
292+
when(
293+
() => mockEventClient.recordEvent(
294+
eventType: any(named: 'eventType'),
295+
session: any(named: 'session'),
296+
properties: any(named: 'properties'),
297+
),
298+
).thenAnswer((_) async => {});
240299

241300
when(
242-
mockAnalyticsClient.eventClient,
301+
() => mockAnalyticsClient.eventClient,
243302
).thenReturn(mockEventClient);
244303

245-
expect(
304+
await expectLater(
246305
pinpointProvider.init(
247306
config: notificationsPinpointConfig,
248307
authProviderRepo: mockAmplifyAuthProviderRepository,
@@ -251,7 +310,7 @@ void main() {
251310
completes,
252311
);
253312

254-
expect(
313+
await expectLater(
255314
pinpointProvider.recordNotificationEvent(
256315
eventType: PinpointEventType.foregroundMessageReceived,
257316
notification:
@@ -260,10 +319,10 @@ void main() {
260319
completes,
261320
);
262321
verify(
263-
mockEventClient.recordEvent(
322+
() => mockEventClient.recordEvent(
264323
eventType:
265324
'${PinpointEventSource.campaign.name}.${PinpointEventType.foregroundMessageReceived.name}',
266-
properties: anyNamed('properties'),
325+
properties: any(named: 'properties'),
267326
),
268327
);
269328
});

0 commit comments

Comments
 (0)