Line data Source code
1 : import 'dart:async';
2 :
3 : import 'package:firebase_auth/firebase_auth.dart';
4 : import 'package:mockito/mockito.dart';
5 : import 'package:redfire/services.dart';
6 : import 'package:redfire/types.dart';
7 :
8 : import '../../auth/data/user_example.dart';
9 : import '../../auth/mocks/auth_test_doubles.mocks.dart';
10 : import '../../firebase/mocks/firebase_test_doubles.mocks.dart';
11 : import '../../platform/mocks/platform_test_doubles.mocks.dart';
12 :
13 : class ServicesHarness {
14 : // auth
15 : late final AuthService _authService;
16 : late final MockFirebaseAuth _mockFirebaseAuth;
17 : late final MockGoogleSignIn _mockGoogleSignIn;
18 : late final MockSignInWithAppleWrapper _mockSignInWithAppleWrapper;
19 : // database
20 : late final DatabaseService _databaseService;
21 : late final MockFirebaseFirestore _mockFirebaseFirestore;
22 : // platform
23 : late final PlatformService _platformService;
24 : late final MockPlatformWrapper _mockPlatformWrapper;
25 : late final UrlLauncherWrapper _mockUrlLauncherWrapper;
26 :
27 0 : ServicesHarness() {
28 : // Create a real AuthService with mock plugins.
29 0 : _mockFirebaseAuth = MockFirebaseAuth();
30 0 : _mockGoogleSignIn = MockGoogleSignIn();
31 0 : _mockSignInWithAppleWrapper = MockSignInWithAppleWrapper();
32 0 : _authService = AuthService(
33 0 : firebase: _mockFirebaseAuth,
34 0 : google: _mockGoogleSignIn,
35 0 : apple: _mockSignInWithAppleWrapper);
36 :
37 : // Create a real DatabaseService with mock plugin.
38 0 : _mockFirebaseFirestore = MockFirebaseFirestore();
39 0 : _databaseService = DatabaseService(database: _mockFirebaseFirestore);
40 :
41 : // Create a real PlatformService with mock plugins.
42 0 : _mockPlatformWrapper = MockPlatformWrapper();
43 0 : _mockUrlLauncherWrapper = UrlLauncherWrapper();
44 0 : _platformService = PlatformService(
45 0 : platformWrapper: _mockPlatformWrapper,
46 0 : urlLauncherWrapper: _mockUrlLauncherWrapper);
47 : }
48 :
49 : // auth
50 0 : AuthService get auth => _authService;
51 0 : MockFirebaseAuth get mockFirebaseAuth => _mockFirebaseAuth;
52 0 : MockGoogleSignIn get mockGoogleSignIn => _mockGoogleSignIn;
53 0 : MockSignInWithAppleWrapper get mockSignInWithAppleWrapper =>
54 0 : _mockSignInWithAppleWrapper;
55 : // database
56 0 : DatabaseService get database => _databaseService;
57 0 : MockFirebaseFirestore get mockFirebaseFirestore => _mockFirebaseFirestore;
58 : // platform
59 0 : PlatformService get platform => _platformService;
60 0 : MockPlatformWrapper get mockPlatformWrapper => _mockPlatformWrapper;
61 0 : UrlLauncherWrapper get mockUrlLauncherWrapper => _mockUrlLauncherWrapper;
62 : }
63 :
64 : class ServicesHarnessForAuth extends ServicesHarness {
65 : final _userStreamController = StreamController<User>();
66 :
67 0 : ServicesHarnessForAuth() {
68 : // Setup the firebase auth mock to allow emitting a user later in the test
69 0 : when(mockFirebaseAuth.authStateChanges())
70 0 : .thenAnswer((_) => _userStreamController.stream);
71 :
72 0 : when(mockPlatformWrapper.isMacOS).thenReturn(true);
73 : }
74 :
75 0 : void emitStubbedUser() {
76 0 : _userStreamController.add(UserExample.stubBasicMock());
77 : }
78 : }
|