Skip to content

Commit aa22bbc

Browse files
committed
test: add tests for queryModerationConfigs and handle success/failure cases
1 parent 57ba57b commit aa22bbc

File tree

3 files changed

+83
-3
lines changed

3 files changed

+83
-3
lines changed

packages/stream_feeds/lib/src/client/moderation_client.dart

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import 'package:stream_core/stream_core.dart';
22

3-
import '../../stream_feeds.dart' show ModerationConfigsQuery;
43
import '../generated/api/api.dart' as api;
4+
import '../models.dart' show ModerationConfigData, PaginationResult;
55
import '../repository/moderation_repository.dart';
6+
import '../state.dart' show ModerationConfigsQuery;
67

78
/// Controller exposing moderation functionalities.
89
///
@@ -160,8 +161,9 @@ class ModerationClient {
160161
///
161162
/// Retrieves moderation configurations using the specified [queryModerationConfigsRequest] filters and pagination.
162163
///
163-
/// Returns a [Result] containing a [api.QueryModerationConfigsResponse] or an error.
164-
Future<void> queryModerationConfigs({
164+
/// Returns a [Result] containing a [PaginationResult] of [ModerationConfigData] or an error.
165+
Future<Result<PaginationResult<ModerationConfigData>>>
166+
queryModerationConfigs({
165167
required ModerationConfigsQuery queryModerationConfigsRequest,
166168
}) {
167169
return _moderationRepository

packages/stream_feeds/test/client/moderation_client_test.dart

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,4 +520,68 @@ void main() {
520520
},
521521
);
522522
});
523+
524+
group('queryModerationConfigs', () {
525+
setUpAll(() {
526+
registerFallbackValue(const QueryModerationConfigsRequest());
527+
});
528+
529+
moderationClientTest(
530+
'should query moderation configs successfully',
531+
body: (tester) async {
532+
const query = ModerationConfigsQuery(limit: 10);
533+
final request = query.toRequest();
534+
535+
tester.mockApi(
536+
(api) => api.queryModerationConfigs(
537+
queryModerationConfigsRequest: request,
538+
),
539+
result: createDefaultQueryModerationConfigsResponse(
540+
configs: [createDefaultConfigResponse()],
541+
),
542+
);
543+
544+
final result = await tester.moderation.queryModerationConfigs(
545+
queryModerationConfigsRequest: query,
546+
);
547+
548+
expect(result.isSuccess, isTrue);
549+
final paginationResult = result.getOrThrow();
550+
expect(paginationResult.items, isNotEmpty);
551+
552+
tester.verifyApi(
553+
(api) => api.queryModerationConfigs(
554+
queryModerationConfigsRequest: request,
555+
),
556+
);
557+
},
558+
);
559+
560+
moderationClientTest(
561+
'should handle query moderation configs failure',
562+
body: (tester) async {
563+
const query = ModerationConfigsQuery(limit: 10);
564+
final request = query.toRequest();
565+
566+
tester.mockApiFailure(
567+
(api) => api.queryModerationConfigs(
568+
queryModerationConfigsRequest: request,
569+
),
570+
error: Exception('Failed to query configs'),
571+
);
572+
573+
final result = await tester.moderation.queryModerationConfigs(
574+
queryModerationConfigsRequest: query,
575+
);
576+
577+
expect(result.isFailure, isTrue);
578+
579+
tester.verifyApi(
580+
(api) => api.queryModerationConfigs(
581+
queryModerationConfigsRequest: request,
582+
),
583+
);
584+
},
585+
);
586+
});
523587
}

packages/stream_feeds_test/lib/src/helpers/test_data.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -885,6 +885,20 @@ QueryModerationConfigsResponse createDefaultQueryModerationConfigsResponse({
885885
);
886886
}
887887

888+
ConfigResponse createDefaultConfigResponse({
889+
String key = 'default-config',
890+
String team = 'default-team',
891+
}) {
892+
return ConfigResponse(
893+
key: key,
894+
team: team,
895+
async: true,
896+
createdAt: DateTime(2021, 1, 1),
897+
updatedAt: DateTime(2021, 2, 1),
898+
supportedVideoCallHarmTypes: const [],
899+
);
900+
}
901+
888902
BanResponse createDefaultBanResponse() {
889903
return const BanResponse(duration: '10ms');
890904
}

0 commit comments

Comments
 (0)