105 lines
3.2 KiB
Dart
105 lines
3.2 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:plezy/media/media_backend.dart';
|
|
import 'package:plezy/media/media_item.dart';
|
|
import 'package:plezy/media/media_kind.dart';
|
|
import 'package:plezy/services/settings_service.dart';
|
|
import 'package:plezy/utils/media_navigation_helper.dart';
|
|
import '../test_helpers/media_items.dart';
|
|
|
|
void main() {
|
|
test('episode detail target opens parent show and focuses season episode', () {
|
|
final episode = testMediaItem(
|
|
id: 'episode-1',
|
|
backend: MediaBackend.plex,
|
|
kind: MediaKind.episode,
|
|
title: 'Episode 1',
|
|
parentId: 'season-2',
|
|
parentIndex: 2,
|
|
grandparentId: 'show-1',
|
|
grandparentTitle: 'The Show',
|
|
serverId: 'server-1',
|
|
);
|
|
|
|
final target = mediaDetailNavigationTargetFor(episode);
|
|
|
|
expect(target.metadata.id, 'show-1');
|
|
expect(target.metadata.kind, MediaKind.show);
|
|
expect(target.initialSeasonId, 'season-2');
|
|
expect(target.initialSeasonIndex, 2);
|
|
expect(target.initialEpisodeId, 'episode-1');
|
|
});
|
|
|
|
test('season detail target opens parent show and focuses season', () {
|
|
final season = testMediaItem(
|
|
id: 'season-3',
|
|
backend: MediaBackend.jellyfin,
|
|
kind: MediaKind.season,
|
|
title: 'Season 3',
|
|
index: 3,
|
|
parentId: 'show-1',
|
|
parentTitle: 'The Show',
|
|
serverId: 'server-1',
|
|
);
|
|
|
|
final target = mediaDetailNavigationTargetFor(season);
|
|
|
|
expect(target.metadata.id, 'show-1');
|
|
expect(target.metadata.kind, MediaKind.show);
|
|
expect(target.initialSeasonId, 'season-3');
|
|
expect(target.initialSeasonIndex, 3);
|
|
expect(target.initialEpisodeId, isNull);
|
|
});
|
|
|
|
test('movie detail target keeps the movie itself', () {
|
|
final movie = testMediaItem(id: 'movie-1', backend: MediaBackend.plex, kind: MediaKind.movie, title: 'Movie');
|
|
|
|
final target = mediaDetailNavigationTargetFor(movie);
|
|
|
|
expect(target.metadata, same(movie));
|
|
expect(target.initialSeasonId, isNull);
|
|
expect(target.initialEpisodeId, isNull);
|
|
});
|
|
|
|
group('episode activation details decision', () {
|
|
test('normal activation uses the episode action setting', () {
|
|
expect(
|
|
shouldOpenEpisodeDetailsForActivation(
|
|
playDirectly: false,
|
|
continueWatchingAction: ContinueWatchingAction.details,
|
|
episodeAction: EpisodeAction.play,
|
|
),
|
|
isFalse,
|
|
);
|
|
|
|
expect(
|
|
shouldOpenEpisodeDetailsForActivation(
|
|
playDirectly: false,
|
|
continueWatchingAction: ContinueWatchingAction.play,
|
|
episodeAction: EpisodeAction.details,
|
|
),
|
|
isTrue,
|
|
);
|
|
});
|
|
|
|
test('play-direct activation uses only the continue watching action setting', () {
|
|
expect(
|
|
shouldOpenEpisodeDetailsForActivation(
|
|
playDirectly: true,
|
|
continueWatchingAction: ContinueWatchingAction.play,
|
|
episodeAction: EpisodeAction.details,
|
|
),
|
|
isFalse,
|
|
);
|
|
|
|
expect(
|
|
shouldOpenEpisodeDetailsForActivation(
|
|
playDirectly: true,
|
|
continueWatchingAction: ContinueWatchingAction.details,
|
|
episodeAction: EpisodeAction.play,
|
|
),
|
|
isTrue,
|
|
);
|
|
});
|
|
});
|
|
}
|