76 lines
2.3 KiB
Dart
76 lines
2.3 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:plezy/services/jellyfin_auth_header.dart';
|
|
|
|
void main() {
|
|
group('buildJellyfinAuthHeader', () {
|
|
test('formats the SDK-style MediaBrowser header', () {
|
|
final header = buildJellyfinAuthHeader(
|
|
clientName: 'Plezy',
|
|
clientVersion: '1.2.3',
|
|
deviceName: 'Living Room TV',
|
|
deviceId: 'dev-1',
|
|
accessToken: 'tok',
|
|
);
|
|
expect(
|
|
header,
|
|
'MediaBrowser Client="Plezy", Device="Living Room TV", DeviceId="dev-1", Version="1.2.3", Token="tok"',
|
|
);
|
|
});
|
|
|
|
test('omits Token when access token is null or empty', () {
|
|
for (final token in [null, '']) {
|
|
final header = buildJellyfinAuthHeader(
|
|
clientName: 'Plezy',
|
|
clientVersion: '1.2.3',
|
|
deviceName: 'Plezy',
|
|
deviceId: 'dev-1',
|
|
accessToken: token,
|
|
);
|
|
expect(header, isNot(contains('Token=')));
|
|
}
|
|
});
|
|
|
|
test('strips embedded quotes so a device name cannot corrupt the header', () {
|
|
final header = buildJellyfinAuthHeader(
|
|
clientName: 'Plezy',
|
|
clientVersion: '1.2.3',
|
|
deviceName: 'My "cool" TV',
|
|
deviceId: 'dev-1',
|
|
accessToken: 'tok',
|
|
);
|
|
expect(header, contains('Device="My cool TV"'));
|
|
});
|
|
|
|
test('uses non-empty fallbacks for required session identity fields', () {
|
|
final header = buildJellyfinAuthHeader(
|
|
clientName: '',
|
|
clientVersion: ' ',
|
|
deviceName: '\u0000\u007f',
|
|
deviceId: 'dev-1',
|
|
);
|
|
|
|
expect(header, 'MediaBrowser Client="Plezy", Device="Plezy", DeviceId="dev-1", Version="1.0"');
|
|
});
|
|
|
|
test('omits an empty device ID instead of emitting a malformed field', () {
|
|
final header = buildJellyfinAuthHeader(
|
|
clientName: 'Plezy',
|
|
clientVersion: '1.2.3',
|
|
deviceName: 'Living Room',
|
|
deviceId: '',
|
|
accessToken: 'tok',
|
|
);
|
|
|
|
expect(header, isNot(contains('DeviceId=')));
|
|
expect(header, contains('Token="tok"'));
|
|
});
|
|
|
|
test('rejects an empty or unsafe unauthenticated device ID', () {
|
|
for (final deviceId in ['', ' dev-1 ', 'dev\u0000-1', '"dev-1"']) {
|
|
expect(() => requireJellyfinDeviceId(deviceId), throwsArgumentError);
|
|
}
|
|
expect(requireJellyfinDeviceId('dev-1'), 'dev-1');
|
|
});
|
|
});
|
|
}
|