Some checks failed
CI / Run tests and lints (push) Failing after 29s
CI / Build CLI docs (push) Has been skipped
CI / Run Playwright end-to-end tests (mysql) (push) Failing after 3s
CI / Run Playwright end-to-end tests (postgres) (push) Failing after 2s
CI / Run Playwright end-to-end tests (sqlite) (push) Failing after 3s
CodeQL / Analyze (go) (push) Failing after 4s
CodeQL / Analyze (javascript) (push) Failing after 3s
Docker Image Scanners / scanners (push) Failing after 4s
Synchronize Issue Labels / Synchronize Issue Labels (push) Has been skipped
CI / Run end-to-end tests (postgres) (push) Failing after 19s
CI / Run end-to-end tests (sqlite) (push) Failing after 2s
CI / Run Playwright end-to-end tests (cockroach) (push) Failing after 2s
CI / Draft newsletter (push) Has been skipped
CI / Generate release (push) Has been skipped
CI / Pending approval Slack notification (push) Has been skipped
CI / Send newsletter (push) Has been skipped
62 lines
1.7 KiB
TypeScript
62 lines
1.7 KiB
TypeScript
// Copyright © 2024 Ory Corp
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
import { APIRequestContext } from "@playwright/test"
|
|
import { findCsrfToken } from "../lib/helper"
|
|
import { LoginFlow, LogoutFlow, Session } from "@ory/kratos-client"
|
|
import { expectJSONResponse } from "../lib/request"
|
|
import { expect } from "../fixtures"
|
|
|
|
export async function loginWithPassword(
|
|
user: { password: string; traits: { email: string } },
|
|
r: APIRequestContext,
|
|
baseUrl: string,
|
|
): Promise<void> {
|
|
const { ui } = await expectJSONResponse<LoginFlow>(
|
|
await r.get(baseUrl + "/self-service/login/browser", {
|
|
headers: {
|
|
Accept: "application/json",
|
|
},
|
|
}),
|
|
{
|
|
message: "Initializing login flow failed",
|
|
},
|
|
)
|
|
|
|
const res = await r.post(ui.action, {
|
|
headers: {
|
|
Accept: "application/json",
|
|
},
|
|
data: {
|
|
identifier: user.traits.email,
|
|
password: user.password,
|
|
method: "password",
|
|
csrf_token: findCsrfToken(ui),
|
|
},
|
|
})
|
|
const { session } = await expectJSONResponse<{ session: Session }>(res)
|
|
expect(session?.identity?.traits.email).toEqual(user.traits.email)
|
|
expect(
|
|
res.headersArray().find(
|
|
({ name, value }) =>
|
|
name.toLowerCase() === "set-cookie" &&
|
|
(value.indexOf("ory_session_") > -1 || // Ory Network
|
|
value.indexOf("ory_kratos_session") > -1), // Locally hosted
|
|
),
|
|
).toBeDefined()
|
|
}
|
|
|
|
export async function logoutUrl(r: APIRequestContext, baseUrl: string) {
|
|
const { logout_url } = await expectJSONResponse<LogoutFlow>(
|
|
await r.get(baseUrl + "/self-service/logout/browser", {
|
|
headers: {
|
|
Accept: "application/json",
|
|
},
|
|
}),
|
|
{
|
|
message: "Logout failed",
|
|
},
|
|
)
|
|
return logout_url
|
|
}
|