feat(app): 剧场页九宫格与极简我的页

This commit is contained in:
Zhou Weidong committed 2026-10-20 05:28:51 +08:00
1 parent dc8ca7b743
commit 35338cbfc8
46 files changed
+2353 -4358

No files matched your search

+10 -22
View File
@@ -7,8 +7,6 @@ import 'package:fruitshorts/core/data/remote/api_exception.dart';
import 'package:fruitshorts/core/data/repositories/search_repository.dart';
import 'package:fruitshorts/pages/discover/discover_logic.dart';
import '../support/fake_watch_history.dart';
Drama _drama(String id, {String language = 'id'}) => Drama(
id: id,
title: id,
@@ -25,11 +23,8 @@ void main() {
'should_query_backend_and_render_results_when_search_text_changes',
() async {
final repository = _FakeSearchRepository(results: [_drama('velvet')]);
final logic = DiscoverLogic(
history: FakeWatchHistory(),
drama: _drama('signal'),
searchRepository: repository,
)..searchDebounce = Duration.zero;
final logic = DiscoverLogic(searchRepository: repository)
..searchDebounce = Duration.zero;
logic.search.text = 'velvet';
logic.onSearchChanged();
@@ -39,18 +34,15 @@ void main() {
(keyword: 'velvet', pageIndex: 1, pageSize: 20),
]);
expect(logic.searchLoading, isFalse);
expect(logic.visibleDramas(const []).single.id, 'velvet');
expect(logic.searchResults.single.id, 'velvet');
logic.dispose();
},
);
test('should_keep_server_results_when_text_only_loses_whitespace', () async {
final repository = _FakeSearchRepository(results: [_drama('velvet')]);
final logic = DiscoverLogic(
history: FakeWatchHistory(),
drama: _drama('signal'),
searchRepository: repository,
)..searchDebounce = Duration.zero;
final logic = DiscoverLogic(searchRepository: repository)
..searchDebounce = Duration.zero;
logic.search.text = 'velvet ';
logic.onSearchChanged();
@@ -60,14 +52,12 @@ void main() {
await pumpEventQueue();
expect(repository.calls, hasLength(1));
expect(logic.visibleDramas(const []).single.id, 'velvet');
expect(logic.searchResults.single.id, 'velvet');
logic.dispose();
});
test('should_expose_error_message_when_search_fails', () async {
final logic = DiscoverLogic(
history: FakeWatchHistory(),
drama: _drama('signal'),
searchRepository: _FakeSearchRepository(
error: const ApiException(400, 'Keyword is invalid'),
),
@@ -84,11 +74,8 @@ void main() {
test('should_clear_server_results_when_search_text_is_empty', () async {
final repository = _FakeSearchRepository(results: [_drama('velvet')]);
final logic = DiscoverLogic(
history: FakeWatchHistory(),
drama: _drama('signal'),
searchRepository: repository,
)..searchDebounce = Duration.zero;
final logic = DiscoverLogic(searchRepository: repository)
..searchDebounce = Duration.zero;
logic.search.text = 'velvet';
logic.onSearchChanged();
@@ -96,7 +83,8 @@ void main() {
logic.search.clear();
logic.onSearchChanged();
expect(logic.visibleDramas([_drama('local')]).single.id, 'local');
expect(logic.hasSearchQuery, isFalse);
expect(logic.searchResults, isEmpty);
logic.dispose();
});
}