mirror of
https://github.com/allaunthefox/Research-Stack.git
synced 2026-07-31 03:05:21 +00:00
- Jellyfin setup wizard completed, admin account created (admin/jellyfin-admin) - SSO-Auth plugin v4.0.0.3 downloaded and placed in plugins directory - Authentik OIDC provider for Jellyfin updated with correct redirect URI - All services verified running Build: 3313 jobs, 0 errors (lake build Compiler)
79 lines
3.4 KiB
TypeScript
79 lines
3.4 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
|
|
test('Complete Jellyfin setup wizard with class selectors', async ({ browser }) => {
|
|
const context = await browser.newContext({ storageState: 'auth-state.json' });
|
|
const page = await context.newPage();
|
|
|
|
console.log('Navigating to Jellyfin wizard start...');
|
|
await page.goto('https://media.researchstack.info/web/#/wizard/start');
|
|
await page.waitForLoadState('networkidle');
|
|
await page.waitForTimeout(4000);
|
|
|
|
// Step 1: Display language (default is English)
|
|
console.log('Wizard Step 1: Preferred display language...');
|
|
await page.screenshot({ path: 'jellyfin-wizard-step1.png' });
|
|
await page.locator('.button-submit:visible').first().click();
|
|
await page.waitForTimeout(4000);
|
|
|
|
// Step 2: Create Admin account
|
|
console.log('Wizard Step 2: Creating Admin account...');
|
|
await page.screenshot({ path: 'jellyfin-wizard-step2.png' });
|
|
|
|
const usernameInput = page.locator('input#txtUsername:visible');
|
|
const passwordInput = page.locator('input#txtManualPassword:visible');
|
|
const confirmInput = page.locator('input#txtPasswordConfirm:visible');
|
|
|
|
await usernameInput.fill('admin');
|
|
await passwordInput.fill('RY03KhsFez73K5va2uUb');
|
|
await confirmInput.fill('RY03KhsFez73K5va2uUb');
|
|
|
|
await page.screenshot({ path: 'jellyfin-wizard-step2-filled.png' });
|
|
await page.locator('.button-submit:visible').first().click();
|
|
await page.waitForTimeout(4000);
|
|
|
|
// Step 3: Set up media libraries
|
|
console.log('Wizard Step 3: Media Libraries...');
|
|
await page.screenshot({ path: 'jellyfin-wizard-step3.png' });
|
|
await page.locator('.button-submit:visible').first().click();
|
|
await page.waitForTimeout(4000);
|
|
|
|
// Step 4: Preferred Metadata Language
|
|
console.log('Wizard Step 4: Metadata Language...');
|
|
await page.screenshot({ path: 'jellyfin-wizard-step4.png' });
|
|
await page.locator('.button-submit:visible').first().click();
|
|
await page.waitForTimeout(4000);
|
|
|
|
// Step 5: Configure Remote Access
|
|
console.log('Wizard Step 5: Remote Access...');
|
|
await page.screenshot({ path: 'jellyfin-wizard-step5.png' });
|
|
await page.locator('.button-submit:visible').first().click();
|
|
await page.waitForTimeout(4000);
|
|
|
|
// Step 6: Finish
|
|
console.log('Wizard Step 6: Finish...');
|
|
await page.screenshot({ path: 'jellyfin-wizard-step6.png' });
|
|
await page.locator('.button-submit:visible').first().click();
|
|
await page.waitForTimeout(8000);
|
|
|
|
console.log('Wizard complete. Current URL:', page.url());
|
|
await page.screenshot({ path: 'jellyfin-after-wizard.png' });
|
|
|
|
// Log in to Jellyfin
|
|
console.log('Logging in to Jellyfin with new admin account...');
|
|
const userLoginInput = page.locator('input#txtManualName:visible, input[type="text"]:visible').first();
|
|
const passLoginInput = page.locator('input#txtManualPassword:visible, input[type="password"]:visible').first();
|
|
|
|
if (await userLoginInput.isVisible()) {
|
|
await userLoginInput.fill('admin');
|
|
await passLoginInput.fill('RY03KhsFez73K5va2uUb');
|
|
await page.locator('button[type="submit"]:visible, .button-submit:visible').first().click();
|
|
await page.waitForTimeout(6000);
|
|
}
|
|
|
|
console.log('Home dashboard URL:', page.url());
|
|
await page.screenshot({ path: 'jellyfin-home-dashboard.png' });
|
|
const textContent = await page.evaluate(() => document.body.innerText);
|
|
console.log('Jellyfin main page text:', textContent.slice(0, 1000));
|
|
|
|
await context.close();
|
|
});
|