Some checks failed
Create issues from TODOs / todos (push) Failing after 3s
Close inactive issues / close-issues (push) Has been cancelled
Deploy GitHub Pages / deploy-preview (push) Has been cancelled
CI / ⚙️ Variables Setup (push) Has been cancelled
CI / ⚙️ Test Guard (push) Has been cancelled
CI / 🚀 Notify external services - draft (push) Has been cancelled
CI / 📦 Build Packages (push) Has been cancelled
CI / 📦 Meteor Build (coverage) (push) Has been cancelled
CI / 📦 Meteor Build (production) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [account-service presence-service omnichannel-transcript-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [account-service presence-service omnichannel-transcript-service], fips) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [authorization-service queue-worker-service ddp-streamer-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [authorization-service queue-worker-service ddp-streamer-service], fips) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], coverage) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], fips) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [account-service presence-service omnichannel-transcript-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [authorization-service queue-worker-service ddp-streamer-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [rocketchat], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [rocketchat], coverage) (push) Has been cancelled
CI / 🚢 Publish Docker Images (ghcr.io) (push) Has been cancelled
CI / 📦 Track Image Sizes (push) Has been cancelled
CI / 🔎 Code Check - Action Lint (push) Has been cancelled
CI / 🔎 Code Check (push) Has been cancelled
CI / 🔨 Test Storybook (push) Has been cancelled
CI / 🔨 Test Unit (push) Has been cancelled
CI / 🔨 Test API (CE) (push) Has been cancelled
CI / 🔨 Test API Livechat (CE) (push) Has been cancelled
CI / 🔨 Test UI (CE) (push) Has been cancelled
CI / 🔨 Test API (EE) (push) Has been cancelled
CI / 🔨 Test API Livechat (EE) (push) Has been cancelled
CI / 🔨 Test API Apps (deno-runtime - EE) (push) Has been cancelled
CI / 🔨 Test UI (EE) (push) Has been cancelled
CI / 🔨 Test API (FIPS) (push) Has been cancelled
CI / 🔨 Test API Livechat (FIPS) (push) Has been cancelled
CI / 🔨 Test UI (FIPS) (push) Has been cancelled
CI / 🔨 Test Federation Matrix (push) Has been cancelled
CI / 📊 Report Coverage (push) Has been cancelled
CI / ✅ Tests Done (push) Has been cancelled
CI / 🚀 Publish build assets (push) Has been cancelled
CI / 🚀 Publish Docker Images (DockerHub) (push) Has been cancelled
CI / 🚀 Notify external services (push) Has been cancelled
CI / Update Version Durability (push) Has been cancelled
Release / Release (push) Has been cancelled
Auto-close duplicate issues / auto-close-duplicates (push) Failing after 1s
Code scanning - action / CodeQL-Build (push) Failing after 1s
62 lines
1.9 KiB
TypeScript
62 lines
1.9 KiB
TypeScript
import type { Page } from '@playwright/test';
|
|
import type { IUser } from '@rocket.chat/core-typings';
|
|
import { MongoClient } from 'mongodb';
|
|
|
|
import * as constants from '../config/constants';
|
|
import type { IUserState } from '../fixtures/userStates';
|
|
import { expect } from '../utils/test';
|
|
|
|
export class LoginPage {
|
|
constructor(protected readonly page: Page) {}
|
|
|
|
get loginButton() {
|
|
return this.page.getByRole('button', { name: 'Login', exact: true });
|
|
}
|
|
|
|
/**
|
|
* Ideally the previous action should ensure the user is logged out and we should just assume to be at the login page
|
|
* */
|
|
async waitForIt() {
|
|
await this.loginButton.waitFor();
|
|
}
|
|
|
|
/** Navigates to `url` and waits for the login screen — for routes that bounce an anonymous visitor. */
|
|
async goto(url = '/home'): Promise<void> {
|
|
await this.page.goto(url);
|
|
await this.waitForIt();
|
|
}
|
|
|
|
protected async waitForLogin() {
|
|
await expect(this.loginButton).not.toBeVisible();
|
|
await expect(this.page.getByRole('main')).toBeVisible();
|
|
}
|
|
|
|
async loginByUserState(userState: IUserState, options: { except: string[] } = { except: [] }) {
|
|
// Creates a login token for the user
|
|
const connection = await MongoClient.connect(constants.URL_MONGODB);
|
|
|
|
await connection
|
|
.db()
|
|
.collection<IUser>('users')
|
|
.updateOne(
|
|
{ username: userState.data.username },
|
|
{ $addToSet: { 'services.resume.loginTokens': { when: userState.data.loginExpire, hashedToken: userState.data.hashedToken } } },
|
|
);
|
|
|
|
await connection.close();
|
|
|
|
const localStorageItems = userState.state.origins[0].localStorage.filter((item) => options.except.indexOf(item.name) === -1);
|
|
|
|
// Injects the login token to the local storage
|
|
await this.page.evaluate((items) => {
|
|
items.forEach(({ name, value }) => {
|
|
window.localStorage.setItem(name, value);
|
|
});
|
|
|
|
require('meteor/accounts-base').Accounts._pollStoredLoginToken();
|
|
}, localStorageItems);
|
|
|
|
await this.waitForLogin();
|
|
}
|
|
}
|