mirror of
https://github.com/allaunthefox/Research-Stack.git
synced 2026-07-30 18:56:16 +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)
72 lines
3.1 KiB
TypeScript
72 lines
3.1 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
|
|
test('Install OIDC Plugin in Jellyfin', async ({ browser }) => {
|
|
const context = await browser.newContext({ storageState: 'auth-state.json' });
|
|
const page = await context.newPage();
|
|
|
|
console.log('Navigating to Jellyfin Plugins...');
|
|
await page.goto('https://media.researchstack.info/web/#/dashboard/plugins');
|
|
await page.waitForLoadState('networkidle');
|
|
await page.waitForTimeout(4000);
|
|
|
|
// Login if needed
|
|
const usernameInput = page.locator('input[type="text"], input#txtManualName');
|
|
const passwordInput = page.locator('input[type="password"], input#txtManualPassword');
|
|
|
|
if (await usernameInput.isVisible()) {
|
|
console.log('Logging in...');
|
|
await usernameInput.fill('admin');
|
|
await passwordInput.fill('RY03KhsFez73K5va2uUb');
|
|
await page.locator('button[type="submit"], button.button-submit').first().click();
|
|
await page.waitForTimeout(6000);
|
|
}
|
|
|
|
// Double check we are on plugins page
|
|
if (!page.url().includes('#/dashboard/plugins')) {
|
|
await page.goto('https://media.researchstack.info/web/#/dashboard/plugins');
|
|
await page.waitForLoadState('networkidle');
|
|
await page.waitForTimeout(4000);
|
|
}
|
|
|
|
console.log('Clicking Available tab...');
|
|
// Find the Available tab pill
|
|
const availableTab = page.locator('a:has-text("Available"), button:has-text("Available"), div:has-text("Available"), span:has-text("Available")').first();
|
|
await availableTab.click({ force: true });
|
|
await page.waitForTimeout(4000);
|
|
await page.screenshot({ path: 'jellyfin-plugins-available.png' });
|
|
|
|
// Type in the search box to find OpenID Connect
|
|
console.log('Searching for OpenID Connect in catalog...');
|
|
const searchInput = page.locator('input[type="search"], input[placeholder*="Search"]').first();
|
|
if (await searchInput.isVisible()) {
|
|
await searchInput.fill('OpenID Connect');
|
|
await page.waitForTimeout(3000);
|
|
await page.screenshot({ path: 'jellyfin-plugins-search-results.png' });
|
|
}
|
|
|
|
// Click on the OpenID Connect card
|
|
console.log('Clicking OpenID Connect card...');
|
|
const oidcCard = page.locator('a:has-text("OpenID Connect"), .card:has-text("OpenID Connect"), .cardHeader:has-text("OpenID Connect")').first();
|
|
await oidcCard.click({ force: true });
|
|
await page.waitForTimeout(4000);
|
|
await page.screenshot({ path: 'jellyfin-plugin-details.png' });
|
|
|
|
// Click Install
|
|
console.log('Clicking Install button...');
|
|
const installBtn = page.locator('button:has-text("Install"), button.button-submit').first();
|
|
await installBtn.click({ force: true });
|
|
await page.waitForTimeout(4000);
|
|
await page.screenshot({ path: 'jellyfin-plugin-install-clicked.png' });
|
|
|
|
// Handle OK button in modal dialog if any
|
|
const okBtn = page.locator('button:has-text("OK"), button:has-text("Ok"), button.button-submit').first();
|
|
if (await okBtn.isVisible()) {
|
|
console.log('Clicking OK on dialog...');
|
|
await okBtn.click({ force: true });
|
|
await page.waitForTimeout(3000);
|
|
await page.screenshot({ path: 'jellyfin-plugin-install-confirmed.png' });
|
|
}
|
|
|
|
console.log('OIDC Plugin installation completed.');
|
|
await context.close();
|
|
});
|