fix(favorite): 统一收藏状态与互动图标
This commit is contained in:
1 parent
4b97f89c0b
commit
d3dbc9f8dc
13 files changed
+347
-213
No files matched your search
@@ -16,20 +16,20 @@ DramaDetailLogic _logic(
|
||||
FakeWatchHistory history, {
|
||||
FavoriteController? favorites,
|
||||
PlaybackPositionCache? positionCache,
|
||||
}) =>
|
||||
DramaDetailLogic(
|
||||
drama: drama,
|
||||
history: history,
|
||||
playback: FakePlaybackRepository(),
|
||||
favorites: favorites ?? FavoriteController(InMemoryFavoriteRepository()),
|
||||
positionCache: positionCache ?? PlaybackPositionCache(),
|
||||
);
|
||||
}) => DramaDetailLogic(
|
||||
drama: drama,
|
||||
history: history,
|
||||
playback: FakePlaybackRepository(),
|
||||
favorites: favorites ?? FavoriteController(InMemoryFavoriteRepository()),
|
||||
positionCache: positionCache ?? PlaybackPositionCache(),
|
||||
);
|
||||
|
||||
Drama _card(String id) => Drama(
|
||||
Drama _card(String id, {int? favoriteCount}) => Drama(
|
||||
id: id,
|
||||
title: id,
|
||||
synopsis: 'synopsis',
|
||||
posterUrl: '/files/$id.jpg',
|
||||
favoriteCount: favoriteCount,
|
||||
totalEpisodes: 3,
|
||||
episodes: [
|
||||
Episode(
|
||||
@@ -42,11 +42,12 @@ Drama _card(String id) => Drama(
|
||||
],
|
||||
);
|
||||
|
||||
Drama _detail(String id) => Drama(
|
||||
Drama _detail(String id, {int? favoriteCount}) => Drama(
|
||||
id: id,
|
||||
title: id,
|
||||
synopsis: 'synopsis',
|
||||
posterUrl: '/files/$id.jpg',
|
||||
favoriteCount: favoriteCount,
|
||||
totalEpisodes: 3,
|
||||
detailLoaded: true,
|
||||
episodes: [
|
||||
@@ -62,21 +63,24 @@ Drama _detail(String id) => Drama(
|
||||
);
|
||||
|
||||
void main() {
|
||||
test('should_upgrade_to_full_episode_list_when_detail_loads_for_list_card', () async {
|
||||
var calls = 0;
|
||||
final logic = _logic(_card('signal'), FakeWatchHistory());
|
||||
test(
|
||||
'should_upgrade_to_full_episode_list_when_detail_loads_for_list_card',
|
||||
() async {
|
||||
var calls = 0;
|
||||
final logic = _logic(_card('signal'), FakeWatchHistory());
|
||||
|
||||
await logic.load(() async {
|
||||
calls++;
|
||||
return _detail('signal');
|
||||
});
|
||||
await logic.load(() async {
|
||||
calls++;
|
||||
return _detail('signal');
|
||||
});
|
||||
|
||||
expect(calls, 1);
|
||||
expect(logic.loading, isFalse);
|
||||
expect(logic.failed, isFalse);
|
||||
expect(logic.drama.episodes, hasLength(3));
|
||||
logic.dispose();
|
||||
});
|
||||
expect(calls, 1);
|
||||
expect(logic.loading, isFalse);
|
||||
expect(logic.failed, isFalse);
|
||||
expect(logic.drama.episodes, hasLength(3));
|
||||
logic.dispose();
|
||||
},
|
||||
);
|
||||
|
||||
test('should_keep_card_and_report_reason_when_load_fails', () async {
|
||||
final logic = _logic(_card('signal'), FakeWatchHistory());
|
||||
@@ -107,6 +111,19 @@ void main() {
|
||||
logic.dispose();
|
||||
});
|
||||
|
||||
test('should_use_detail_favorite_count_as_authoritative', () async {
|
||||
final favorites = FavoriteController(InMemoryFavoriteRepository());
|
||||
final card = _card('signal', favoriteCount: 2);
|
||||
expect(favorites.favoriteCountFor(card), 2);
|
||||
final logic = _logic(card, FakeWatchHistory(), favorites: favorites);
|
||||
|
||||
await logic.load(() async => _detail('signal', favoriteCount: 9));
|
||||
|
||||
expect(favorites.favoriteCount('signal'), 9);
|
||||
expect(logic.adjustedFavoriteCount, 9);
|
||||
logic.dispose();
|
||||
});
|
||||
|
||||
test('should_prefer_recent_local_position_when_loading_continue', () async {
|
||||
final cache = PlaybackPositionCache();
|
||||
cache.save(
|
||||
|
||||
Reference in new issue
Block a user