Files
plezy/test/models/plex_metadata_advanced_fields_test.dart
T

94 lines
2.8 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:plezy/models/plex/plex_metadata_preferences.dart';
import 'package:plezy/services/plex_mappers.dart';
void main() {
group('PlexMetadataPreferences', () {
test('canonicalizes booleans while preserving string, numeric, and empty preference values', () {
final preferences = PlexMetadataPreferences.fromMediaContainer({
'Metadata': [
{
'Setting': [
{'id': 'episodeSort', 'value': 1},
{'id': 'useOriginalTitle', 'value': true},
{'id': 'useLocalArtwork', 'value': false},
{'id': 'languageOverride', 'value': ''},
{'id': 'showOrdering', 'value': 'tvdbAbsolute'},
],
},
],
});
expect(preferences.values, {
'episodeSort': '1',
'useOriginalTitle': '1',
'useLocalArtwork': '0',
'languageOverride': '',
'showOrdering': 'tvdbAbsolute',
});
});
test('returns no preferences for absent, null, or malformed metadata envelopes', () {
final containers = <Map<String, dynamic>?>[
null,
const {},
const {'Metadata': null},
const {'Metadata': 'not-an-object'},
const {
'Metadata': [null, 'not-an-object'],
},
];
for (final container in containers) {
expect(PlexMetadataPreferences.fromMediaContainer(container).values, isEmpty, reason: '$container');
}
});
test('ignores malformed setting siblings without discarding valid rows', () {
final preferences = PlexMetadataPreferences.fromMediaContainer({
'Metadata': {
'Setting': [
null,
'not-an-object',
{'id': 7, 'value': 'wrong-id-type'},
{'id': 'missing-value'},
{'id': 'null-value', 'value': null},
{
'id': 'object-value',
'value': {'nested': true},
},
{'id': 'valid', 'value': -3},
],
},
});
expect(preferences.values, {'valid': '-3'});
});
test('accepts the single-setting object shape', () {
final preferences = PlexMetadataPreferences.fromMediaContainer({
'Metadata': {
'Setting': {'id': 'subtitleMode', 'value': 2},
},
});
expect(preferences.values, {'subtitleMode': '2'});
});
});
test('Plex metadata DTO preserves original title and flexible rating values', () {
final metadata = PlexMetadataDto.fromJson({
'ratingKey': 'movie-1',
'originalTitle': 'Le titre original',
'rating': '8.2',
'audienceRating': 8,
'userRating': '9.5',
});
expect(metadata.originalTitle, 'Le titre original');
expect(metadata.rating, 8.2);
expect(metadata.audienceRating, 8.0);
expect(metadata.userRating, 9.5);
});
}