Skip to content

Commit 50bc331

Browse files
committed
Add roadster repository
1 parent 809ae18 commit 50bc331

File tree

9 files changed

+268
-33
lines changed

9 files changed

+268
-33
lines changed

lib/di/app_repository_providers.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:flutter_bloc/flutter_bloc.dart';
22
import 'package:flutter_bloc_app_template/repository/email_list_repository.dart';
33
import 'package:flutter_bloc_app_template/repository/launches_repository.dart';
4+
import 'package:flutter_bloc_app_template/repository/roadster_repository.dart';
45
import 'package:flutter_bloc_app_template/repository/rocket_repository.dart';
56
import 'package:flutter_bloc_app_template/routes/router.dart';
67
import 'package:provider/single_child_widget.dart' show SingleChildWidget;
@@ -22,6 +23,9 @@ abstract class AppRepositoryProviders {
2223
RepositoryProvider<RocketRepository>(
2324
create: (context) => diContainer.get<RocketRepository>(),
2425
),
26+
RepositoryProvider<RoadsterRepository>(
27+
create: (context) => diContainer.get<RoadsterRepository>(),
28+
),
2529
];
2630
}
2731
}

lib/di/di_initializer.config.dart

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/di/di_network_module.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import 'package:dio/dio.dart';
22
import 'package:flutter_bloc_app_template/data/network/data_source/launches_network_data_source.dart';
3+
import 'package:flutter_bloc_app_template/data/network/data_source/roadster_network_data_source.dart';
34
import 'package:flutter_bloc_app_template/data/network/data_source/rocket_network_data_source.dart';
45
import 'package:flutter_bloc_app_template/data/network/service/launch/launch_service.dart';
6+
import 'package:flutter_bloc_app_template/data/network/service/roadster/roadster_service.dart';
57
import 'package:flutter_bloc_app_template/data/network/service/rocket/rocket_service.dart';
68
import 'package:injectable/injectable.dart';
79
import 'package:talker_dio_logger/talker_dio_logger_interceptor.dart';
@@ -34,6 +36,11 @@ abstract class NetworkModule {
3436
return RocketService(dio);
3537
}
3638

39+
@factoryMethod
40+
RoadsterService provideRoadsterService(Dio dio) {
41+
return RoadsterService(dio);
42+
}
43+
3744
@factoryMethod
3845
LaunchesDataSource provideLaunchesDataSource(LaunchService service) {
3946
return LaunchesNetworkDataSource(service);
@@ -43,4 +50,9 @@ abstract class NetworkModule {
4350
RocketDataSource provideRocketDataSource(RocketService service) {
4451
return RocketNetworkDataSource(service);
4552
}
53+
54+
@factoryMethod
55+
RoadsterDataSource provideRoadsterDataSource(RoadsterService service) {
56+
return RoadsterNetworkDataSource(service);
57+
}
4658
}

lib/di/di_repository_module.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import 'package:flutter_bloc_app_template/data/network/data_source/launches_network_data_source.dart';
2+
import 'package:flutter_bloc_app_template/data/network/data_source/roadster_network_data_source.dart';
23
import 'package:flutter_bloc_app_template/data/network/data_source/rocket_network_data_source.dart';
34
import 'package:flutter_bloc_app_template/data/theme_storage.dart';
45
import 'package:flutter_bloc_app_template/repository/launches_repository.dart';
6+
import 'package:flutter_bloc_app_template/repository/roadster_repository.dart';
57
import 'package:flutter_bloc_app_template/repository/rocket_repository.dart';
68
import 'package:flutter_bloc_app_template/repository/theme_repository.dart';
79
import 'package:injectable/injectable.dart';
@@ -19,4 +21,8 @@ abstract class RepositoryModule {
1921
@factoryMethod
2022
RocketRepository provideRocketRepository(RocketDataSource dataSource) =>
2123
RocketRepositoryImpl(dataSource);
24+
25+
@factoryMethod
26+
RoadsterRepository provideRoadsterRepository(RoadsterDataSource dataSource) =>
27+
RoadsterRepositoryImpl(dataSource);
2228
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import 'package:flutter_bloc_app_template/data/network/api_result.dart';
2+
import 'package:flutter_bloc_app_template/data/network/data_source/roadster_network_data_source.dart';
3+
import 'package:flutter_bloc_app_template/models/roadster/roadster_ext.dart';
4+
import 'package:flutter_bloc_app_template/models/roadster/roadster_resource.dart';
5+
6+
abstract class RoadsterRepository {
7+
Future<RoadsterResource> getRoadster();
8+
}
9+
10+
class RoadsterRepositoryImpl implements RoadsterRepository {
11+
RoadsterRepositoryImpl(this._roadsterDataSource);
12+
13+
final RoadsterDataSource _roadsterDataSource;
14+
15+
@override
16+
Future<RoadsterResource> getRoadster() async {
17+
final result = await _roadsterDataSource.getRoadster();
18+
19+
return ApiResultWhen(result).when(
20+
success: (data) => data.toResource(),
21+
error: (message) => throw Exception(message),
22+
loading: () {
23+
throw Exception('Loading');
24+
},
25+
);
26+
}
27+
}

test/mocks.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_bloc_app_template/index.dart';
3+
import 'package:flutter_bloc_app_template/repository/roadster_repository.dart';
34
import 'package:flutter_bloc_app_template/repository/rocket_repository.dart';
45
import 'package:mockito/annotations.dart';
56

@@ -9,6 +10,7 @@ export 'mocks.mocks.dart';
910
EmailListRepository,
1011
LaunchesRepository,
1112
RocketRepository,
13+
RoadsterRepository,
1214
], customMocks: [
1315
MockSpec<NavigatorObserver>(onMissingStub: OnMissingStub.returnDefault)
1416
])

test/mocks.mocks.dart

Lines changed: 74 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,17 @@
33
// Do not manually edit this file.
44

55
// ignore_for_file: no_leading_underscores_for_library_prefixes
6-
import 'dart:async' as _i3;
6+
import 'dart:async' as _i4;
77

8-
import 'package:flutter/src/widgets/navigator.dart' as _i6;
8+
import 'package:flutter/src/widgets/navigator.dart' as _i8;
99
import 'package:flutter_bloc_app_template/index.dart' as _i2;
10-
import 'package:flutter_bloc_app_template/models/email.dart' as _i4;
10+
import 'package:flutter_bloc_app_template/models/email.dart' as _i5;
11+
import 'package:flutter_bloc_app_template/models/roadster/roadster_resource.dart'
12+
as _i3;
13+
import 'package:flutter_bloc_app_template/repository/roadster_repository.dart'
14+
as _i7;
1115
import 'package:flutter_bloc_app_template/repository/rocket_repository.dart'
12-
as _i5;
16+
as _i6;
1317
import 'package:mockito/mockito.dart' as _i1;
1418

1519
// ignore_for_file: type=lint
@@ -48,6 +52,17 @@ class _FakeRocketResource_1 extends _i1.SmartFake
4852
);
4953
}
5054

55+
class _FakeRoadsterResource_2 extends _i1.SmartFake
56+
implements _i3.RoadsterResource {
57+
_FakeRoadsterResource_2(
58+
Object parent,
59+
Invocation parentInvocation,
60+
) : super(
61+
parent,
62+
parentInvocation,
63+
);
64+
}
65+
5166
/// A class which mocks [EmailListRepository].
5267
///
5368
/// See the documentation for Mockito's code generation for more information.
@@ -58,13 +73,13 @@ class MockEmailListRepository extends _i1.Mock
5873
}
5974

6075
@override
61-
_i3.Future<List<_i4.Email>> loadData() => (super.noSuchMethod(
76+
_i4.Future<List<_i5.Email>> loadData() => (super.noSuchMethod(
6277
Invocation.method(
6378
#loadData,
6479
[],
6580
),
66-
returnValue: _i3.Future<List<_i4.Email>>.value(<_i4.Email>[]),
67-
) as _i3.Future<List<_i4.Email>>);
81+
returnValue: _i4.Future<List<_i5.Email>>.value(<_i5.Email>[]),
82+
) as _i4.Future<List<_i5.Email>>);
6883
}
6984

7085
/// A class which mocks [LaunchesRepository].
@@ -77,7 +92,7 @@ class MockLaunchesRepository extends _i1.Mock
7792
}
7893

7994
@override
80-
_i3.Future<List<_i2.LaunchResource>> getLaunches({
95+
_i4.Future<List<_i2.LaunchResource>> getLaunches({
8196
bool? hasId = true,
8297
int? limit,
8398
int? offset,
@@ -99,37 +114,37 @@ class MockLaunchesRepository extends _i1.Mock
99114
},
100115
),
101116
returnValue:
102-
_i3.Future<List<_i2.LaunchResource>>.value(<_i2.LaunchResource>[]),
103-
) as _i3.Future<List<_i2.LaunchResource>>);
117+
_i4.Future<List<_i2.LaunchResource>>.value(<_i2.LaunchResource>[]),
118+
) as _i4.Future<List<_i2.LaunchResource>>);
104119

105120
@override
106-
_i3.Future<_i2.LaunchFullResource> getLaunch(int? flightNumber) =>
121+
_i4.Future<_i2.LaunchFullResource> getLaunch(int? flightNumber) =>
107122
(super.noSuchMethod(
108123
Invocation.method(
109124
#getLaunch,
110125
[flightNumber],
111126
),
112127
returnValue:
113-
_i3.Future<_i2.LaunchFullResource>.value(_FakeLaunchFullResource_0(
128+
_i4.Future<_i2.LaunchFullResource>.value(_FakeLaunchFullResource_0(
114129
this,
115130
Invocation.method(
116131
#getLaunch,
117132
[flightNumber],
118133
),
119134
)),
120-
) as _i3.Future<_i2.LaunchFullResource>);
135+
) as _i4.Future<_i2.LaunchFullResource>);
121136
}
122137

123138
/// A class which mocks [RocketRepository].
124139
///
125140
/// See the documentation for Mockito's code generation for more information.
126-
class MockRocketRepository extends _i1.Mock implements _i5.RocketRepository {
141+
class MockRocketRepository extends _i1.Mock implements _i6.RocketRepository {
127142
MockRocketRepository() {
128143
_i1.throwOnMissingStub(this);
129144
}
130145

131146
@override
132-
_i3.Future<List<_i2.RocketResource>> getRockets({
147+
_i4.Future<List<_i2.RocketResource>> getRockets({
133148
bool? hasId = true,
134149
int? limit,
135150
int? offset,
@@ -145,34 +160,60 @@ class MockRocketRepository extends _i1.Mock implements _i5.RocketRepository {
145160
},
146161
),
147162
returnValue:
148-
_i3.Future<List<_i2.RocketResource>>.value(<_i2.RocketResource>[]),
149-
) as _i3.Future<List<_i2.RocketResource>>);
163+
_i4.Future<List<_i2.RocketResource>>.value(<_i2.RocketResource>[]),
164+
) as _i4.Future<List<_i2.RocketResource>>);
150165

151166
@override
152-
_i3.Future<_i2.RocketResource> getRocket(String? rocketId) =>
167+
_i4.Future<_i2.RocketResource> getRocket(String? rocketId) =>
153168
(super.noSuchMethod(
154169
Invocation.method(
155170
#getRocket,
156171
[rocketId],
157172
),
158-
returnValue: _i3.Future<_i2.RocketResource>.value(_FakeRocketResource_1(
173+
returnValue: _i4.Future<_i2.RocketResource>.value(_FakeRocketResource_1(
159174
this,
160175
Invocation.method(
161176
#getRocket,
162177
[rocketId],
163178
),
164179
)),
165-
) as _i3.Future<_i2.RocketResource>);
180+
) as _i4.Future<_i2.RocketResource>);
181+
}
182+
183+
/// A class which mocks [RoadsterRepository].
184+
///
185+
/// See the documentation for Mockito's code generation for more information.
186+
class MockRoadsterRepository extends _i1.Mock
187+
implements _i7.RoadsterRepository {
188+
MockRoadsterRepository() {
189+
_i1.throwOnMissingStub(this);
190+
}
191+
192+
@override
193+
_i4.Future<_i3.RoadsterResource> getRoadster() => (super.noSuchMethod(
194+
Invocation.method(
195+
#getRoadster,
196+
[],
197+
),
198+
returnValue:
199+
_i4.Future<_i3.RoadsterResource>.value(_FakeRoadsterResource_2(
200+
this,
201+
Invocation.method(
202+
#getRoadster,
203+
[],
204+
),
205+
)),
206+
) as _i4.Future<_i3.RoadsterResource>);
166207
}
167208

168209
/// A class which mocks [NavigatorObserver].
169210
///
170211
/// See the documentation for Mockito's code generation for more information.
171-
class MockNavigatorObserver extends _i1.Mock implements _i6.NavigatorObserver {
212+
class MockNavigatorObserver extends _i1.Mock implements _i8.NavigatorObserver {
172213
@override
173214
void didPush(
174-
_i6.Route<dynamic>? route,
175-
_i6.Route<dynamic>? previousRoute,
215+
_i8.Route<dynamic>? route,
216+
_i8.Route<dynamic>? previousRoute,
176217
) =>
177218
super.noSuchMethod(
178219
Invocation.method(
@@ -187,8 +228,8 @@ class MockNavigatorObserver extends _i1.Mock implements _i6.NavigatorObserver {
187228

188229
@override
189230
void didPop(
190-
_i6.Route<dynamic>? route,
191-
_i6.Route<dynamic>? previousRoute,
231+
_i8.Route<dynamic>? route,
232+
_i8.Route<dynamic>? previousRoute,
192233
) =>
193234
super.noSuchMethod(
194235
Invocation.method(
@@ -203,8 +244,8 @@ class MockNavigatorObserver extends _i1.Mock implements _i6.NavigatorObserver {
203244

204245
@override
205246
void didRemove(
206-
_i6.Route<dynamic>? route,
207-
_i6.Route<dynamic>? previousRoute,
247+
_i8.Route<dynamic>? route,
248+
_i8.Route<dynamic>? previousRoute,
208249
) =>
209250
super.noSuchMethod(
210251
Invocation.method(
@@ -219,8 +260,8 @@ class MockNavigatorObserver extends _i1.Mock implements _i6.NavigatorObserver {
219260

220261
@override
221262
void didReplace({
222-
_i6.Route<dynamic>? newRoute,
223-
_i6.Route<dynamic>? oldRoute,
263+
_i8.Route<dynamic>? newRoute,
264+
_i8.Route<dynamic>? oldRoute,
224265
}) =>
225266
super.noSuchMethod(
226267
Invocation.method(
@@ -236,8 +277,8 @@ class MockNavigatorObserver extends _i1.Mock implements _i6.NavigatorObserver {
236277

237278
@override
238279
void didChangeTop(
239-
_i6.Route<dynamic>? topRoute,
240-
_i6.Route<dynamic>? previousTopRoute,
280+
_i8.Route<dynamic>? topRoute,
281+
_i8.Route<dynamic>? previousTopRoute,
241282
) =>
242283
super.noSuchMethod(
243284
Invocation.method(
@@ -252,8 +293,8 @@ class MockNavigatorObserver extends _i1.Mock implements _i6.NavigatorObserver {
252293

253294
@override
254295
void didStartUserGesture(
255-
_i6.Route<dynamic>? route,
256-
_i6.Route<dynamic>? previousRoute,
296+
_i8.Route<dynamic>? route,
297+
_i8.Route<dynamic>? previousRoute,
257298
) =>
258299
super.noSuchMethod(
259300
Invocation.method(

0 commit comments

Comments
 (0)