Files
calchat/apps/client/e2e/tests/02-login.test.ts
Linus Waldowsky 27602aee4c Add E2E testing infrastructure with WebdriverIO + Appium
Set up E2E test framework for Android using WebdriverIO, Appium, and
UiAutomator2. Add testID props to key components (AuthButton, BaseButton,
ChatBubble, CustomTextInput, ProposedEventCard) and apply testIDs to
login screen, chat screen, tab bar, and settings. Include initial tests
for app launch detection and login flow validation. Update CLAUDE.md
with E2E docs.
2026-02-26 21:37:40 +01:00

74 lines
2.1 KiB
TypeScript

import { initDriver, getDriver, quitDriver } from "../helpers/driver";
import { TestIDs } from "../helpers/selectors";
import {
waitForTestId,
ensureOnLoginScreen,
performLogin,
} from "../helpers/utils";
describe("Login", () => {
beforeAll(async () => {
await initDriver();
const driver = getDriver();
// Dismiss Expo Go banner by tapping near the top of the screen
await driver.pause(3000);
const { width } = await driver.getWindowSize();
await driver.touchAction({ action: "tap", x: Math.round(width / 2), y: 100 });
await driver.pause(500);
});
beforeEach(async () => {
const driver = getDriver();
await ensureOnLoginScreen(driver);
});
it("should show error when fields are empty", async () => {
const driver = getDriver();
// Tap login without entering credentials
const loginButton = await waitForTestId(driver, TestIDs.LOGIN_BUTTON);
await loginButton.click();
// Error message should appear
const errorText = await waitForTestId(driver, TestIDs.LOGIN_ERROR_TEXT);
const text = await errorText.getText();
expect(text).toContain("Bitte alle Felder");
});
it("should show error for invalid credentials", async () => {
const driver = getDriver();
await performLogin(driver, "invalid_user", "wrong_password");
// Wait for error message
const errorText = await waitForTestId(
driver,
TestIDs.LOGIN_ERROR_TEXT,
30_000,
);
const text = await errorText.getText();
expect(text).toContain("Anmeldung fehlgeschlagen");
});
it("should login successfully with valid credentials", async () => {
const driver = getDriver();
const testUser = process.env.TEST_USER || "test";
const testPassword = process.env.TEST_PASSWORD || "test";
await performLogin(driver, testUser, testPassword);
// Chat screen should appear after successful login
const chatInput = await waitForTestId(
driver,
TestIDs.CHAT_MESSAGE_INPUT,
30_000,
);
expect(await chatInput.isDisplayed()).toBe(true);
});
afterAll(async () => {
await quitDriver();
});
});