146 lines
4.9 KiB
TypeScript
146 lines
4.9 KiB
TypeScript
import { expect } from "@wdio/globals";
|
|
import LoginPage from "../pageobjects/LoginPage";
|
|
import { testConfig } from "../helpers/testConfig";
|
|
|
|
describe("Authentication Flow", () => {
|
|
beforeEach(async () => {
|
|
// Each test starts fresh - app should redirect to login
|
|
await LoginPage.waitForLoginPage();
|
|
});
|
|
|
|
describe("Server Connection", () => {
|
|
it("should display the server connection form", async () => {
|
|
expect(await LoginPage.isOnServerStep()).toBe(true);
|
|
expect(await LoginPage.pageTitle.getText()).toContain("JellyTau");
|
|
});
|
|
|
|
it("should show server URL input field", async () => {
|
|
const serverInput = await LoginPage.serverUrlInput;
|
|
|
|
expect(await serverInput.isDisplayed()).toBe(true);
|
|
expect(await serverInput.getAttribute("placeholder")).toContain("jellyfin");
|
|
});
|
|
|
|
it("should have a disabled connect button when URL is empty", async () => {
|
|
const connectButton = await LoginPage.connectButton;
|
|
|
|
// Button should be disabled when input is empty
|
|
expect(await connectButton.isEnabled()).toBe(false);
|
|
});
|
|
|
|
it("should enable connect button when URL is entered", async () => {
|
|
await LoginPage.enterServerUrl(testConfig.serverUrl);
|
|
|
|
const connectButton = await LoginPage.connectButton;
|
|
expect(await connectButton.isEnabled()).toBe(true);
|
|
});
|
|
|
|
it("should show error for invalid server URL", async () => {
|
|
await LoginPage.enterServerUrl("not-a-valid-url");
|
|
await LoginPage.clickConnect();
|
|
|
|
// Wait for error to appear
|
|
await browser.pause(2000);
|
|
|
|
expect(await LoginPage.hasError()).toBe(true);
|
|
});
|
|
|
|
it("should transition to login form on successful connection", async () => {
|
|
// Using configured test server
|
|
await LoginPage.connectToServer(testConfig.serverUrl);
|
|
|
|
// Should now be on login step
|
|
expect(await LoginPage.isOnLoginStep()).toBe(true);
|
|
expect(await LoginPage.isOnServerStep()).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("User Login", () => {
|
|
beforeEach(async () => {
|
|
// Connect to configured test server before each login test
|
|
await LoginPage.connectToServer(testConfig.serverUrl);
|
|
});
|
|
|
|
it("should display login form after server connection", async () => {
|
|
expect(await LoginPage.usernameInput.isDisplayed()).toBe(true);
|
|
expect(await LoginPage.passwordInput.isDisplayed()).toBe(true);
|
|
expect(await LoginPage.signInButton.isDisplayed()).toBe(true);
|
|
});
|
|
|
|
it("should show server information", async () => {
|
|
// Server name and URL should be displayed
|
|
const serverName = await LoginPage.serverNameDisplay;
|
|
expect(await serverName.isDisplayed()).toBe(true);
|
|
});
|
|
|
|
it("should have back button to return to server selection", async () => {
|
|
expect(await LoginPage.backButton.isDisplayed()).toBe(true);
|
|
|
|
await LoginPage.backButton.click();
|
|
await browser.pause(500);
|
|
|
|
// Should be back on server step
|
|
expect(await LoginPage.isOnServerStep()).toBe(true);
|
|
});
|
|
|
|
it("should disable sign in button when username is empty", async () => {
|
|
const signInButton = await LoginPage.signInButton;
|
|
expect(await signInButton.isEnabled()).toBe(false);
|
|
});
|
|
|
|
it("should enable sign in button when username is entered", async () => {
|
|
await LoginPage.enterUsername("demo");
|
|
|
|
const signInButton = await LoginPage.signInButton;
|
|
expect(await signInButton.isEnabled()).toBe(true);
|
|
});
|
|
|
|
it("should show error for invalid credentials", async () => {
|
|
await LoginPage.login("invalid-user", "wrong-password");
|
|
|
|
// Wait for error
|
|
await browser.pause(2000);
|
|
|
|
expect(await LoginPage.hasError()).toBe(true);
|
|
});
|
|
|
|
// Enable this test by configuring e2e/.env with valid credentials
|
|
it.skip("should successfully login with valid credentials", async () => {
|
|
await LoginPage.login(testConfig.username, testConfig.password);
|
|
|
|
// Wait for redirect to home page
|
|
await browser.pause(3000);
|
|
|
|
// Should redirect away from login page
|
|
const currentUrl = await browser.getUrl();
|
|
expect(currentUrl).not.toContain("/login");
|
|
});
|
|
});
|
|
|
|
describe("Full Authentication Flow", () => {
|
|
it("should complete full auth flow with test server", async () => {
|
|
// Test the complete flow
|
|
await LoginPage.waitForLoginPage();
|
|
|
|
// Step 1: Enter server URL
|
|
expect(await LoginPage.isOnServerStep()).toBe(true);
|
|
await LoginPage.enterServerUrl(testConfig.serverUrl);
|
|
await LoginPage.clickConnect();
|
|
|
|
// Wait for transition
|
|
await browser.pause(2000);
|
|
|
|
// Step 2: Should be on login form
|
|
expect(await LoginPage.isOnLoginStep()).toBe(true);
|
|
|
|
// Step 3: Enter credentials
|
|
await LoginPage.enterUsername(testConfig.username);
|
|
await LoginPage.enterPassword(testConfig.password);
|
|
|
|
// Verify form is filled
|
|
const username = await LoginPage.usernameInput.getValue();
|
|
expect(username).toBe(testConfig.username);
|
|
});
|
|
});
|
|
});
|