snapshot of https://github.com/RocketChat/Rocket.Chat.git (develop, 2026-09-16; blobs > 131072B omitted)
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

This commit is contained in:
upstream-mirror
2026-09-16 01:21:02 +05:00
commit 30810eecd7
10161 changed files with 987110 additions and 0 deletions

View File

@@ -0,0 +1,28 @@
import type { Page } from '@playwright/test';
export const doLogin = async ({
page,
server,
storageNamePrefix,
storeState,
}: {
page: Page;
server: {
username: string;
password: string;
url: string;
};
storageNamePrefix?: string;
storeState?: boolean;
}) => {
await page.goto(`${server.url}/login`);
await page.locator('role=textbox[name=/username/i]').type(server.username);
await page.locator('[name=password]').type(server.password);
await page.locator('role=button[name="Login"]').click();
await page.waitForTimeout(1000);
if (storeState) {
await page.context().storageState({ path: `${storageNamePrefix}-session.json` });
}
};

View File

@@ -0,0 +1,85 @@
import { faker } from '@faker-js/faker';
import type { Page } from '@playwright/test';
import { doLogin } from './auth';
import type { API } from './test';
import type { FederationChannel } from '../page-objects/channel';
const doLoginAndGoToHome = async (
page: Page,
server: {
url: string;
username: string;
password: string;
},
): Promise<void> => {
await doLogin({
page,
server,
});
await page.goto(`${server.url}/home`);
};
export const createChannelAndInviteRemoteUserToCreateLocalUser = async ({
page,
poFederationChannelServer,
fullUsernameFromServer,
server,
closePageAfterCreation = true,
}: {
page: Page;
poFederationChannelServer: FederationChannel;
fullUsernameFromServer: string;
server: {
url: string;
username: string;
password: string;
};
closePageAfterCreation?: boolean;
}): Promise<string> => {
const channelName = faker.string.uuid();
await doLoginAndGoToHome(page, server);
await poFederationChannelServer.createPublicChannelAndInviteUsersUsingCreationModal(channelName, [fullUsernameFromServer]);
if (closePageAfterCreation) {
await page.close();
}
return channelName;
};
export const createGroupAndInviteRemoteUserToCreateLocalUser = async ({
page,
poFederationChannelServer,
fullUsernameFromServer,
server,
}: {
page: Page;
poFederationChannelServer: FederationChannel;
fullUsernameFromServer: string;
server: {
url: string;
username: string;
password: string;
matrixServerName: string;
};
}): Promise<string> => {
const groupName = faker.string.uuid();
await doLoginAndGoToHome(page, server);
await poFederationChannelServer.createPrivateGroupAndInviteUsersUsingCreationModal(groupName, [fullUsernameFromServer]);
await page.close();
return groupName;
};
export const createGroupUsingAPI = async (api: API, name: string) => {
await api.post('/groups.create', { name });
};
export const createChannelUsingAPI = async (api: API, name: string) => {
await api.post('/channels.create', { name });
};

View File

@@ -0,0 +1,4 @@
export const formatUsernameAndDomainIntoMatrixFormat = (username: string, domain: string): string => `${username}:${domain}`;
export const formatIntoFullMatrixUsername = (username: string, domain: string): string =>
`@${formatUsernameAndDomainIntoMatrixFormat(username, domain)}`;

View File

@@ -0,0 +1,17 @@
import { faker } from '@faker-js/faker';
import type { API } from './test';
import * as constants from '../config/constants';
export async function registerUser(api: API): Promise<string> {
const username = faker.string.uuid();
await api.post('/users.register', {
username,
email: `${username}@test-rc.com`,
pass: constants.RC_SERVER_2.password,
name: username,
});
return username;
}

View File

@@ -0,0 +1,84 @@
/* eslint-disable react-hooks/rules-of-hooks */
import type { APIResponse } from '@playwright/test';
import { test as baseTest } from '@playwright/test';
import { API_PREFIX } from '../../config/constants';
import * as constants from '../config/constants';
export type AnyObj = { [key: string]: any };
export type API = {
get(uri: string, prefix?: string): Promise<APIResponse>;
post(uri: string, data: AnyObj, prefix?: string): Promise<APIResponse>;
put(uri: string, data: AnyObj, prefix?: string): Promise<APIResponse>;
delete(uri: string, prefix?: string): Promise<APIResponse>;
};
export type BaseTest = {
apiServer1: API;
apiServer2: API;
};
const api = async (request: any, use: any, user: string, password: string, baseUrl: string) => {
const resp = await request.post(`${baseUrl + API_PREFIX}/login`, { data: { user, password } });
const json = await resp.json();
const headers = {
'X-Auth-Token': json.data.authToken,
'X-User-Id': json.data.userId,
};
await use({
get(uri: string, prefix = API_PREFIX) {
return request.get(baseUrl + prefix + uri, { headers });
},
post(uri: string, data: AnyObj, prefix = API_PREFIX) {
return request.post(baseUrl + prefix + uri, { headers, data });
},
put(uri: string, data: AnyObj, prefix = API_PREFIX) {
return request.put(baseUrl + prefix + uri, { headers, data });
},
delete(uri: string, prefix = API_PREFIX) {
return request.delete(baseUrl + prefix + uri, { headers });
},
});
};
export const test = baseTest.extend<BaseTest>({
apiServer1: async ({ request }, use) =>
api(request, use, constants.RC_SERVER_1.username, constants.RC_SERVER_1.password, constants.RC_SERVER_1.url),
apiServer2: async ({ request }, use) =>
api(request, use, constants.RC_SERVER_2.username, constants.RC_SERVER_2.password, constants.RC_SERVER_2.url),
});
export const { expect } = test;
export const setupTesting = async (api: API) => {
await api.post('/settings/Message_AudioRecorderEnabled', { value: true });
await api.post('/settings/Accounts_ManuallyApproveNewUsers', { value: false });
await api.post('/settings/API_Enable_Rate_Limiter', { value: false });
await api.post('/settings/DDP_Rate_Limit_IP_Enabled', { value: false });
await api.post('/settings/DDP_Rate_Limit_User_Enabled', { value: false });
await api.post('/settings/DDP_Rate_Limit_Connection_Enabled', { value: false });
await api.post('/settings/DDP_Rate_Limit_Connection_Interval_Time', { value: false });
await api.post('/settings/DDP_Rate_Limit_User_By_Method_Enabled', { value: false });
await api.post('/settings/DDP_Rate_Limit_Connection_By_Method_Enabled', { value: false });
await api.post('/settings/Accounts_RegistrationForm', { value: 'Public' });
await api.post('/settings/UI_Use_Real_Name', { value: false });
await api.post('/settings/Rate_Limiter_Limit_RegisterUser', { value: 10 });
await api.post('/settings/Hide_System_Messages', { value: [] });
await api.post('/permissions.update', { permissions: [{ _id: 'force-delete-message', roles: ['admin', 'user'] }] });
};
export const tearDownTesting = async (api: API) => {
await api.post('/settings/Accounts_ManuallyApproveNewUsers', { value: true });
await api.post('/settings/API_Enable_Rate_Limiter', { value: true });
await api.post('/settings/DDP_Rate_Limit_IP_Enabled', { value: true });
await api.post('/settings/DDP_Rate_Limit_User_Enabled', { value: true });
await api.post('/settings/DDP_Rate_Limit_Connection_Enabled', { value: true });
await api.post('/settings/DDP_Rate_Limit_Connection_Interval_Time', { value: true });
await api.post('/settings/DDP_Rate_Limit_User_By_Method_Enabled', { value: true });
await api.post('/settings/DDP_Rate_Limit_Connection_By_Method_Enabled', { value: true });
await api.post('/settings/Rate_Limiter_Limit_RegisterUser', { value: 1 });
await api.post('/settings/Accounts_RegistrationForm', { value: 'Disabled' });
};