iter 2
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
import { test, expect } from "#tests/e2e/fixtures/real-auth"
|
||||
|
||||
test.describe("Login (Integration)", () => {
|
||||
test("should login with registered credentials and stay authenticated after reload", async ({
|
||||
realLoginPage,
|
||||
}) => {
|
||||
const { page, user } = realLoginPage
|
||||
|
||||
await realLoginPage.login()
|
||||
|
||||
await expect(page).toHaveURL("/")
|
||||
await expect(
|
||||
page.getByRole("heading", {
|
||||
name: new RegExp(`Добро пожаловать, ${user.firstName}`),
|
||||
}),
|
||||
).toBeVisible()
|
||||
await expect
|
||||
.poll(() => realLoginPage.getCookie("access_token"))
|
||||
.toBeTruthy()
|
||||
await expect
|
||||
.poll(() => realLoginPage.getCookie("refresh_token"))
|
||||
.toBeTruthy()
|
||||
|
||||
await page.reload()
|
||||
|
||||
await expect(page).toHaveURL("/")
|
||||
await expect(
|
||||
page.getByRole("heading", {
|
||||
name: new RegExp(`Добро пожаловать, ${user.firstName}`),
|
||||
}),
|
||||
).toBeVisible()
|
||||
})
|
||||
|
||||
test("should keep user on login page and avoid auth cookies for invalid password", async ({
|
||||
realLoginPage,
|
||||
}) => {
|
||||
const { page, user } = realLoginPage
|
||||
const wrongPassword = `${user.password}_wrong`
|
||||
|
||||
await realLoginPage.login(wrongPassword)
|
||||
|
||||
await expect(page).toHaveURL(/\/login$/)
|
||||
await expect(page.getByRole("button", { name: "Войти" })).toBeEnabled()
|
||||
await expect(page.getByRole("textbox", { name: "Логин" })).toHaveValue(
|
||||
user.username,
|
||||
)
|
||||
await expect(page.getByLabel("Пароль")).toHaveValue(wrongPassword)
|
||||
await expect
|
||||
.poll(() => realLoginPage.getCookie("access_token"))
|
||||
.toBeFalsy()
|
||||
await expect
|
||||
.poll(() => realLoginPage.getCookie("refresh_token"))
|
||||
.toBeFalsy()
|
||||
})
|
||||
|
||||
test("should submit the login form with Enter from password field", async ({
|
||||
realLoginPage,
|
||||
}) => {
|
||||
const { page, user } = realLoginPage
|
||||
|
||||
await realLoginPage.submitWithEnter()
|
||||
|
||||
await expect(page).toHaveURL("/")
|
||||
await expect(
|
||||
page.getByRole("heading", {
|
||||
name: new RegExp(`Добро пожаловать, ${user.firstName}`),
|
||||
}),
|
||||
).toBeVisible()
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,110 @@
|
||||
import { test, expect } from "#tests/e2e/fixtures/auth"
|
||||
|
||||
test.describe("Login Page", () => {
|
||||
test("should display login form with all fields", async ({ loginPage }) => {
|
||||
const { page } = loginPage
|
||||
|
||||
await expect(page.getByRole("heading", { name: "Вход" })).toBeVisible()
|
||||
await expect(
|
||||
page.getByRole("textbox", { name: "Логин" }),
|
||||
).toBeVisible()
|
||||
await expect(
|
||||
page.getByRole("textbox", { name: "Пароль" }),
|
||||
).toBeVisible()
|
||||
await expect(
|
||||
page.getByRole("button", { name: "Войти" }),
|
||||
).toBeVisible()
|
||||
await expect(
|
||||
page.getByRole("link", { name: /Зарегистрироваться/ }),
|
||||
).toBeVisible()
|
||||
})
|
||||
|
||||
test("should have link to registration page", async ({ loginPage }) => {
|
||||
const { page } = loginPage
|
||||
|
||||
await page.getByRole("link", { name: /Зарегистрироваться/ }).click()
|
||||
await expect(page).toHaveURL(/\/register/)
|
||||
})
|
||||
|
||||
test("should login successfully and set auth cookies", async ({
|
||||
loginPage,
|
||||
}) => {
|
||||
const { page } = loginPage
|
||||
|
||||
await loginPage.mockLoginSuccess()
|
||||
await loginPage.login("testuser", "password123")
|
||||
|
||||
// Verify the mutation succeeded by checking auth cookies are set
|
||||
await expect(async () => {
|
||||
const cookies = await page.evaluate(() => document.cookie)
|
||||
expect(cookies).toContain("access_token=fake-access-jwt")
|
||||
expect(cookies).toContain("refresh_token=fake-refresh-jwt")
|
||||
}).toPass({ timeout: 5_000 })
|
||||
})
|
||||
|
||||
test("should show error on invalid credentials", async ({ loginPage }) => {
|
||||
const { page } = loginPage
|
||||
const consoleErrors: string[] = []
|
||||
|
||||
page.on("console", (msg) => {
|
||||
if (msg.type() === "error") {
|
||||
consoleErrors.push(msg.text())
|
||||
}
|
||||
})
|
||||
|
||||
await loginPage.mockLoginError(401)
|
||||
await loginPage.login("wronguser", "wrongpassword")
|
||||
|
||||
await page.waitForTimeout(1000)
|
||||
await expect(page).toHaveURL(/\/login/)
|
||||
expect(consoleErrors.some((e) => e.includes("Login failed"))).toBe(true)
|
||||
})
|
||||
|
||||
test("should handle network error gracefully", async ({ loginPage }) => {
|
||||
const { page } = loginPage
|
||||
|
||||
await loginPage.mockLoginNetworkError()
|
||||
await loginPage.login("testuser", "password123")
|
||||
|
||||
await page.waitForTimeout(1000)
|
||||
await expect(page).toHaveURL(/\/login/)
|
||||
})
|
||||
|
||||
test("should handle server error (500)", async ({ loginPage }) => {
|
||||
const { page } = loginPage
|
||||
|
||||
await loginPage.mockLoginError(500, {
|
||||
detail: "Internal server error",
|
||||
})
|
||||
await loginPage.login("testuser", "password123")
|
||||
|
||||
await page.waitForTimeout(1000)
|
||||
await expect(page).toHaveURL(/\/login/)
|
||||
})
|
||||
|
||||
test("should submit with empty fields", async ({ loginPage }) => {
|
||||
const { page } = loginPage
|
||||
|
||||
await loginPage.mockLoginError(422, { detail: "Validation error" })
|
||||
await page.getByRole("button", { name: "Войти" }).click()
|
||||
|
||||
await page.waitForTimeout(500)
|
||||
await expect(page).toHaveURL(/\/login/)
|
||||
})
|
||||
|
||||
test("should disable submit button while request is pending", async ({
|
||||
loginPage,
|
||||
}) => {
|
||||
const { page } = loginPage
|
||||
|
||||
await loginPage.mockLoginDelayed(2000)
|
||||
|
||||
await page.getByRole("textbox", { name: "Логин" }).fill("testuser")
|
||||
await page.getByRole("textbox", { name: "Пароль" }).fill("password123")
|
||||
|
||||
const submitButton = page.getByRole("button", { name: "Войти" })
|
||||
await submitButton.click()
|
||||
|
||||
await expect(submitButton).toBeDisabled()
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user