Proyecto App Linux
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
import { signal } from '@angular/core';
|
||||
import { TestBed } from '@angular/core/testing';
|
||||
import { of } from 'rxjs';
|
||||
import { PlaylistsService, SettingsStore } from 'services';
|
||||
import { StartupBehavior } from 'shared-interfaces';
|
||||
import { WorkspaceStartupPreferencesService } from './workspace-startup-preferences.service';
|
||||
|
||||
describe('WorkspaceStartupPreferencesService', () => {
|
||||
let service: WorkspaceStartupPreferencesService;
|
||||
let playlistsService: { getAllPlaylists: jest.Mock };
|
||||
let settingsStore: {
|
||||
loadSettings: jest.Mock;
|
||||
showDashboard: ReturnType<typeof signal<boolean>>;
|
||||
startupBehavior: ReturnType<typeof signal<StartupBehavior>>;
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
localStorage.clear();
|
||||
|
||||
playlistsService = {
|
||||
getAllPlaylists: jest.fn().mockReturnValue(
|
||||
of([{ _id: 'playlist-1' }])
|
||||
),
|
||||
};
|
||||
settingsStore = {
|
||||
loadSettings: jest.fn().mockResolvedValue(undefined),
|
||||
showDashboard: signal(true),
|
||||
startupBehavior: signal(StartupBehavior.FirstView),
|
||||
};
|
||||
|
||||
TestBed.configureTestingModule({
|
||||
providers: [
|
||||
WorkspaceStartupPreferencesService,
|
||||
{
|
||||
provide: PlaylistsService,
|
||||
useValue: playlistsService,
|
||||
},
|
||||
{
|
||||
provide: SettingsStore,
|
||||
useValue: settingsStore,
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
service = TestBed.inject(WorkspaceStartupPreferencesService);
|
||||
});
|
||||
|
||||
it('resolves the first view to dashboard when dashboard is enabled', async () => {
|
||||
await expect(service.resolveInitialWorkspacePath()).resolves.toBe(
|
||||
'/workspace/dashboard'
|
||||
);
|
||||
});
|
||||
|
||||
it('resolves the first view to sources when dashboard is hidden', async () => {
|
||||
settingsStore.showDashboard.set(false);
|
||||
|
||||
await expect(service.resolveInitialWorkspacePath()).resolves.toBe(
|
||||
'/workspace/sources'
|
||||
);
|
||||
});
|
||||
|
||||
it('restores the last route when restore-last-view is enabled', async () => {
|
||||
settingsStore.startupBehavior.set(StartupBehavior.RestoreLastView);
|
||||
service.persistLastRestorablePath('/workspace/global-recent?q=matrix');
|
||||
|
||||
await expect(service.resolveInitialWorkspacePath()).resolves.toBe(
|
||||
'/workspace/global-recent'
|
||||
);
|
||||
});
|
||||
|
||||
it('falls back to sources when the stored dashboard route is hidden', async () => {
|
||||
settingsStore.showDashboard.set(false);
|
||||
settingsStore.startupBehavior.set(StartupBehavior.RestoreLastView);
|
||||
service.persistLastRestorablePath('/workspace/dashboard');
|
||||
|
||||
await expect(service.resolveInitialWorkspacePath()).resolves.toBe(
|
||||
'/workspace/sources'
|
||||
);
|
||||
});
|
||||
|
||||
it('canonicalizes detail routes to their section root', () => {
|
||||
expect(
|
||||
service.getRestorablePath(
|
||||
'/workspace/xtreams/playlist-1/vod/123/456?q=matrix'
|
||||
)
|
||||
).toBe('/workspace/xtreams/playlist-1/vod');
|
||||
});
|
||||
|
||||
it('ignores non-restorable routes', () => {
|
||||
expect(service.getRestorablePath('/workspace/settings')).toBeNull();
|
||||
expect(service.getRestorablePath('/workspace')).toBeNull();
|
||||
expect(service.getRestorablePath('/unknown')).toBeNull();
|
||||
});
|
||||
|
||||
it('falls back to the first available view when the stored playlist no longer exists', async () => {
|
||||
settingsStore.startupBehavior.set(StartupBehavior.RestoreLastView);
|
||||
playlistsService.getAllPlaylists.mockReturnValue(of([]));
|
||||
service.persistLastRestorablePath('/workspace/xtreams/missing/live');
|
||||
|
||||
await expect(service.resolveInitialWorkspacePath()).resolves.toBe(
|
||||
'/workspace/dashboard'
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user