Files
plezy/test/screens/auth_screen_test.dart
T

117 lines
3.6 KiB
Dart

import 'package:drift/native.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:plezy/connection/connection.dart';
import 'package:plezy/connection/connection_registry.dart';
import 'package:plezy/database/app_database.dart';
import 'package:plezy/models/plex/plex_home_user.dart';
import 'package:plezy/profiles/plex_home_service.dart';
import 'package:plezy/profiles/profile.dart';
import 'package:plezy/profiles/profile_connection_registry.dart';
import 'package:plezy/screens/auth_screen.dart';
import 'package:plezy/services/storage_service.dart';
import '../test_helpers/prefs.dart';
void main() {
setUp(resetSharedPreferencesForTest);
test('initial profile is built from the refreshed Plex Home cache', () async {
final db = AppDatabase.forTesting(NativeDatabase.memory());
final connections = ConnectionRegistry(db);
final profileConnections = ProfileConnectionRegistry(db);
final storage = await StorageService.getInstance();
final plexHome = PlexHomeService(
connections: connections,
profileConnections: profileConnections,
storage: storage,
plexHomeUserFetcher: (_) async => [
PlexHomeUser(
id: 1,
uuid: 'home-user-a',
title: 'Home User',
thumb: '',
hasPassword: false,
restricted: false,
updatedAt: null,
admin: true,
guest: false,
protected: false,
),
],
);
addTearDown(() async {
await plexHome.dispose();
await db.close();
});
final account = PlexAccountConnection(
id: 'plex-account-a',
accountToken: 'account-token',
clientIdentifier: 'client-a',
accountLabel: 'Plex',
createdAt: DateTime(2026, 1, 1),
);
await connections.upsert(account);
await plexHome.refresh(account);
final profile = initialPlexHomeProfileFromCache(plexHome, account);
expect(profile, isNotNull);
expect(profile!.id, plexHomeProfileId(accountConnectionId: account.id, homeUserUuid: 'home-user-a'));
expect(profile.parentConnectionId, account.id);
expect(profile.displayName, 'Home User');
});
test('initial profile selection is required when home users exist but no profile is active', () {
expect(
shouldPromptForInitialProfileSelection(
activeProfile: null,
hasProfiles: false,
accountHasHomeUsers: true,
requireProfileSelectionOnOpen: false,
),
isTrue,
);
});
test('initial profile selection is skipped when a profile was auto-selected', () {
final profile = Profile.local(id: 'local-owner', displayName: 'Owner', createdAt: DateTime(2026, 1, 1));
expect(
shouldPromptForInitialProfileSelection(
activeProfile: profile,
hasProfiles: true,
accountHasHomeUsers: true,
requireProfileSelectionOnOpen: false,
),
isFalse,
);
});
test('initial profile selection is required when the launch setting is enabled', () {
final profile = Profile.local(id: 'local-owner', displayName: 'Owner', createdAt: DateTime(2026, 1, 1));
expect(
shouldPromptForInitialProfileSelection(
activeProfile: profile,
hasProfiles: true,
accountHasHomeUsers: true,
requireProfileSelectionOnOpen: true,
),
isTrue,
);
});
test('initial profile selection is skipped when no profiles are available', () {
expect(
shouldPromptForInitialProfileSelection(
activeProfile: null,
hasProfiles: false,
accountHasHomeUsers: false,
requireProfileSelectionOnOpen: false,
),
isFalse,
);
});
}