Skip to content

Commit 6646320

Browse files
committed
refactor(llc): Decouple tests from client implementation
This commit refactors the test suite to use the abstract `StreamFeedsClient` class instead of the concrete `StreamFeedsClientImpl` implementation. This change improves test isolation by programming against the public API contract rather than the internal implementation details. Key changes: - Updated all test files to instantiate and reference `StreamFeedsClient`. - Removed direct imports of `feeds_client_impl.dart` from the test suite. - Removed the unnecessary Flutter SDK dependency from `pubspec.yaml`. - Exposed `WebSocketProvider` and `DefaultApi` as `@visibleForTesting` parameters in the `StreamFeedsClient` factory constructor to facilitate mocking.
1 parent 765eb5d commit 6646320

12 files changed

+23
-46
lines changed

packages/stream_feeds/lib/src/feeds_client.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import 'package:meta/meta.dart';
12
import 'package:stream_core/stream_core.dart';
23

34
import 'client/feeds_client_impl.dart';
@@ -160,6 +161,8 @@ abstract interface class StreamFeedsClient {
160161
NetworkStateProvider? networkStateProvider,
161162
LifecycleStateProvider? lifecycleStateProvider,
162163
List<AutomaticReconnectionPolicy>? reconnectionPolicies,
164+
@visibleForTesting WebSocketProvider? wsProvider,
165+
@visibleForTesting api.DefaultApi? feedsRestApi,
163166
}) = StreamFeedsClientImpl;
164167

165168
User get user;

packages/stream_feeds/pubspec.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ dependencies:
2222
collection: ^1.18.0
2323
dio: ^5.9.0
2424
equatable: ^2.0.5
25-
flutter:
26-
sdk: flutter
2725
freezed_annotation: ^3.0.0
2826
http: ^1.1.0
2927
intl: ">=0.18.1 <=0.21.0"

packages/stream_feeds/test/state/activity_list_test.dart

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,21 @@ import 'dart:async';
22
import 'dart:convert';
33

44
import 'package:mocktail/mocktail.dart';
5-
import 'package:stream_feeds/src/client/feeds_client_impl.dart';
6-
import 'package:stream_feeds/src/generated/api/model/activity_reaction_added_event.dart';
7-
import 'package:stream_feeds/src/generated/api/model/activity_reaction_deleted_event.dart';
8-
import 'package:stream_feeds/src/generated/api/model/activity_updated_event.dart';
9-
import 'package:stream_feeds/src/generated/api/model/bookmark_added_event.dart';
10-
import 'package:stream_feeds/src/generated/api/model/bookmark_deleted_event.dart';
11-
import 'package:stream_feeds/src/generated/api/model/comment_added_event.dart';
12-
import 'package:stream_feeds/src/generated/api/model/feeds_reaction_response.dart';
135
import 'package:stream_feeds/stream_feeds.dart';
146
import 'package:test/test.dart';
157

168
import '../test_utils.dart';
179

1810
void main() {
19-
late StreamFeedsClientImpl client;
11+
late StreamFeedsClient client;
2012
late MockDefaultApi feedsApi;
2113
late MockWebSocketChannel webSocketChannel;
2214

2315
setUp(() {
2416
feedsApi = MockDefaultApi();
2517
webSocketChannel = MockWebSocketChannel();
2618

27-
client = StreamFeedsClientImpl(
19+
client = StreamFeedsClient(
2820
apiKey: 'apiKey',
2921
user: const User(id: 'luke_skywalker'),
3022
tokenProvider: TokenProvider.static(UserToken(testToken)),

packages/stream_feeds/test/state/activity_test.dart

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,22 @@ import 'dart:async';
22
import 'dart:convert';
33

44
import 'package:mocktail/mocktail.dart';
5-
import 'package:stream_feeds/src/client/feeds_client_impl.dart';
65
import 'package:stream_feeds/src/state/activity_state.dart';
76
import 'package:stream_feeds/stream_feeds.dart';
87
import 'package:test/test.dart';
98

109
import '../test_utils.dart';
1110

1211
void main() {
13-
late StreamFeedsClientImpl client;
12+
late StreamFeedsClient client;
1413
late MockDefaultApi feedsApi;
1514
late MockWebSocketChannel webSocketChannel;
1615

1716
setUp(() {
1817
feedsApi = MockDefaultApi();
1918
webSocketChannel = MockWebSocketChannel();
2019

21-
client = StreamFeedsClientImpl(
20+
client = StreamFeedsClient(
2221
apiKey: 'apiKey',
2322
user: const User(id: 'luke_skywalker'),
2423
tokenProvider: TokenProvider.static(UserToken(testToken)),

packages/stream_feeds/test/state/bookmark_folder_list_test.dart

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,21 @@ import 'dart:async';
22
import 'dart:convert';
33

44
import 'package:mocktail/mocktail.dart';
5-
import 'package:stream_feeds/src/client/feeds_client_impl.dart';
6-
import 'package:stream_feeds/src/generated/api/model/bookmark_folder_updated_event.dart';
75
import 'package:stream_feeds/stream_feeds.dart';
86
import 'package:test/test.dart';
97

108
import '../test_utils.dart';
119

1210
void main() {
13-
late StreamFeedsClientImpl client;
11+
late StreamFeedsClient client;
1412
late MockDefaultApi feedsApi;
1513
late MockWebSocketChannel webSocketChannel;
1614

1715
setUp(() {
1816
feedsApi = MockDefaultApi();
1917
webSocketChannel = MockWebSocketChannel();
2018

21-
client = StreamFeedsClientImpl(
19+
client = StreamFeedsClient(
2220
apiKey: 'apiKey',
2321
user: const User(id: 'luke_skywalker'),
2422
tokenProvider: TokenProvider.static(UserToken(testToken)),

packages/stream_feeds/test/state/bookmark_list_test.dart

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,21 @@ import 'dart:async';
22
import 'dart:convert';
33

44
import 'package:mocktail/mocktail.dart';
5-
import 'package:stream_feeds/src/client/feeds_client_impl.dart';
6-
import 'package:stream_feeds/src/generated/api/model/bookmark_updated_event.dart';
75
import 'package:stream_feeds/stream_feeds.dart';
86
import 'package:test/test.dart';
97

108
import '../test_utils.dart';
119

1210
void main() {
13-
late StreamFeedsClientImpl client;
11+
late StreamFeedsClient client;
1412
late MockDefaultApi feedsApi;
1513
late MockWebSocketChannel webSocketChannel;
1614

1715
setUp(() {
1816
feedsApi = MockDefaultApi();
1917
webSocketChannel = MockWebSocketChannel();
2018

21-
client = StreamFeedsClientImpl(
19+
client = StreamFeedsClient(
2220
apiKey: 'apiKey',
2321
user: const User(id: 'luke_skywalker'),
2422
tokenProvider: TokenProvider.static(UserToken(testToken)),

packages/stream_feeds/test/state/comment_list_test.dart

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ import 'dart:async';
22
import 'dart:convert';
33

44
import 'package:mocktail/mocktail.dart';
5-
import 'package:stream_feeds/src/client/feeds_client_impl.dart';
6-
import 'package:stream_feeds/src/generated/api/model/comment_updated_event.dart';
75
import 'package:stream_feeds/stream_feeds.dart';
86
import 'package:test/test.dart';
97

@@ -12,7 +10,7 @@ import '../test_utils.dart';
1210
class FakeQueryCommentsRequest extends Fake implements QueryCommentsRequest {}
1311

1412
void main() {
15-
late StreamFeedsClientImpl client;
13+
late StreamFeedsClient client;
1614
late MockDefaultApi feedsApi;
1715
late MockWebSocketChannel webSocketChannel;
1816

@@ -24,7 +22,7 @@ void main() {
2422
feedsApi = MockDefaultApi();
2523
webSocketChannel = MockWebSocketChannel();
2624

27-
client = StreamFeedsClientImpl(
25+
client = StreamFeedsClient(
2826
apiKey: 'apiKey',
2927
user: const User(id: 'luke_skywalker'),
3028
tokenProvider: TokenProvider.static(UserToken(testToken)),

packages/stream_feeds/test/state/feed_list_test.dart

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,21 @@ import 'dart:async';
22
import 'dart:convert';
33

44
import 'package:mocktail/mocktail.dart';
5-
import 'package:stream_feeds/src/client/feeds_client_impl.dart';
6-
import 'package:stream_feeds/src/generated/api/model/feed_updated_event.dart';
75
import 'package:stream_feeds/stream_feeds.dart';
86
import 'package:test/test.dart';
97

108
import '../test_utils.dart';
119

1210
void main() {
13-
late StreamFeedsClientImpl client;
11+
late StreamFeedsClient client;
1412
late MockDefaultApi feedsApi;
1513
late MockWebSocketChannel webSocketChannel;
1614

1715
setUp(() {
1816
feedsApi = MockDefaultApi();
1917
webSocketChannel = MockWebSocketChannel();
2018

21-
client = StreamFeedsClientImpl(
19+
client = StreamFeedsClient(
2220
apiKey: 'apiKey',
2321
user: const User(id: 'luke_skywalker'),
2422
tokenProvider: TokenProvider.static(UserToken(testToken)),

packages/stream_feeds/test/state/feed_test.dart

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,21 @@ import 'dart:async';
44
import 'dart:convert';
55

66
import 'package:mocktail/mocktail.dart';
7-
import 'package:stream_feeds/src/client/feeds_client_impl.dart';
87
import 'package:stream_feeds/stream_feeds.dart';
98
import 'package:test/test.dart';
109

1110
import '../test_utils.dart';
1211

1312
void main() {
14-
late StreamFeedsClientImpl client;
13+
late StreamFeedsClient client;
1514
late MockDefaultApi feedsApi;
1615
late MockWebSocketChannel webSocketChannel;
1716

1817
setUp(() {
1918
feedsApi = MockDefaultApi();
2019
webSocketChannel = MockWebSocketChannel();
2120

22-
client = StreamFeedsClientImpl(
21+
client = StreamFeedsClient(
2322
apiKey: 'apiKey',
2423
user: const User(id: 'luke_skywalker'),
2524
tokenProvider: TokenProvider.static(UserToken(testToken)),

packages/stream_feeds/test/state/follow_list_test.dart

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,21 @@ import 'dart:async';
22
import 'dart:convert';
33

44
import 'package:mocktail/mocktail.dart';
5-
import 'package:stream_feeds/src/client/feeds_client_impl.dart';
6-
import 'package:stream_feeds/src/generated/api/model/follow_updated_event.dart';
75
import 'package:stream_feeds/stream_feeds.dart';
86
import 'package:test/test.dart';
97

108
import '../test_utils.dart';
119

1210
void main() {
13-
late StreamFeedsClientImpl client;
11+
late StreamFeedsClient client;
1412
late MockDefaultApi feedsApi;
1513
late MockWebSocketChannel webSocketChannel;
1614

1715
setUp(() {
1816
feedsApi = MockDefaultApi();
1917
webSocketChannel = MockWebSocketChannel();
2018

21-
client = StreamFeedsClientImpl(
19+
client = StreamFeedsClient(
2220
apiKey: 'apiKey',
2321
user: const User(id: 'luke_skywalker'),
2422
tokenProvider: TokenProvider.static(UserToken(testToken)),

0 commit comments

Comments
 (0)