snapshot of https://github.com/mattermost/mattermost.git (master, 2026-09-16; blobs > 131072B omitted)
Some checks failed
Server CI / Postgres (shard 0) (push) Has been skipped
Server CI / Postgres (shard 3) (push) Has been skipped
BuildEnv Docker Image / build-image (push) Failing after 4s
BuildEnv Docker Image / build-image-fips (push) Failing after 4s
Migration Review & Release Notes / Generate migration review & release notes (push) Failing after 3s
Server CI / Build Environment (push) Failing after 3s
Server CI / Postgres (shard 1) (push) Has been skipped
Tools CI / check-style (mattermost-govet) (push) Failing after 4s
Server CI / Postgres (shard 2) (push) Has been skipped
Tools CI / check-style (mmgotool) (push) Failing after 3s
Server CI / Elasticsearch v8 Compatibility (push) Has been skipped
Server CI / OpenSearch v2 Compatibility (push) Has been skipped
Server CI / Postgres FIPS (shard 0) (push) Has been skipped
Tools CI / Test (mattermost-govet) (push) Failing after 3s
Server CI / Postgres FIPS (shard 1) (push) Has been skipped
Server CI / Postgres FIPS (shard 2) (push) Has been skipped
Tools CI / Test (mmgotool) (push) Failing after 3s
Server CI / Postgres FIPS (shard 3) (push) Has been skipped
Server CI / Run mmctl tests (push) Has been skipped
Server CI / Run mmctl tests (FIPS) (push) Has been skipped
Server CI / Merge Postgres Test Results (push) Has been skipped
Server CI / Merge Postgres FIPS Test Results (push) Has been skipped
Server CI / Check backport migrations (push) Has been skipped
Server CI / Check generated files (push) Has been skipped
Server CI / check-style (push) Has been skipped
Server CI / Vet API (push) Has been skipped
Server CI / Build mattermost server app (push) Has been skipped
Server CI / Server CI Complete (push) Failing after 2s
Server CI / Server CI Artifacts (push) Has been skipped
Server CI / Sentry Upload (push) Has been skipped
Server CI / Server CI Report (push) Failing after 5m1s
Server CI Nightly Race / Race Detector (push) Has been skipped
CodeQL / Analyze (go) (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
Webapp CI Cache Warm / Warm Webapp node_modules Cache (push) Has been cancelled
E2E CI Cache Warm / Warm E2E npm Registry Cache (push) Has been cancelled
API / build (push) Has been cancelled
Web App CI / check-types (push) Has been cancelled
Web App CI / check-lint (push) Has been cancelled
Web App CI / check-i18n (push) Has been cancelled
Web App CI / check-external-links (push) Has been cancelled
Web App CI / test (platform) (push) Has been cancelled
Web App CI / test (mattermost-redux) (push) Has been cancelled
Web App CI / test (channels shard 1/4) (push) Has been cancelled
Web App CI / test (channels shard 2/4) (push) Has been cancelled
Web App CI / test (channels shard 3/4) (push) Has been cancelled
Web App CI / test (channels shard 4/4) (push) Has been cancelled
Web App CI / upload-coverage (push) Has been cancelled
Web App CI / build (push) Has been cancelled
YAML Lint / yamllint (push) Has been cancelled
Push mirrored docker images / cd/Push mirrored docker images (push) Has been cancelled
docs-cd / Build and deploy docs (push) Has been cancelled
Docs CI / build (push) Has been cancelled
E2E Cache Warm: Cypress deps / Warm Cypress deps cache (push) Has been cancelled
Scorecards supply-chain security / Scorecard analysis (push) Has been cancelled
Server CI Weekly / Postgres FIPS (push) Has been skipped
Server CI Weekly / Run mmctl tests (FIPS) (push) Has been skipped
Server CI Weekly / Postgres with binary parameters (push) Has been skipped
Server CI Weekly / Build Environment (push) Failing after 1s
Server CI Cache Warm / Warm Go Module and Build Cache (push) Failing after 2s
Server CI Nightly Race / Build Environment (push) Failing after 1s
Some checks failed
Server CI / Postgres (shard 0) (push) Has been skipped
Server CI / Postgres (shard 3) (push) Has been skipped
BuildEnv Docker Image / build-image (push) Failing after 4s
BuildEnv Docker Image / build-image-fips (push) Failing after 4s
Migration Review & Release Notes / Generate migration review & release notes (push) Failing after 3s
Server CI / Build Environment (push) Failing after 3s
Server CI / Postgres (shard 1) (push) Has been skipped
Tools CI / check-style (mattermost-govet) (push) Failing after 4s
Server CI / Postgres (shard 2) (push) Has been skipped
Tools CI / check-style (mmgotool) (push) Failing after 3s
Server CI / Elasticsearch v8 Compatibility (push) Has been skipped
Server CI / OpenSearch v2 Compatibility (push) Has been skipped
Server CI / Postgres FIPS (shard 0) (push) Has been skipped
Tools CI / Test (mattermost-govet) (push) Failing after 3s
Server CI / Postgres FIPS (shard 1) (push) Has been skipped
Server CI / Postgres FIPS (shard 2) (push) Has been skipped
Tools CI / Test (mmgotool) (push) Failing after 3s
Server CI / Postgres FIPS (shard 3) (push) Has been skipped
Server CI / Run mmctl tests (push) Has been skipped
Server CI / Run mmctl tests (FIPS) (push) Has been skipped
Server CI / Merge Postgres Test Results (push) Has been skipped
Server CI / Merge Postgres FIPS Test Results (push) Has been skipped
Server CI / Check backport migrations (push) Has been skipped
Server CI / Check generated files (push) Has been skipped
Server CI / check-style (push) Has been skipped
Server CI / Vet API (push) Has been skipped
Server CI / Build mattermost server app (push) Has been skipped
Server CI / Server CI Complete (push) Failing after 2s
Server CI / Server CI Artifacts (push) Has been skipped
Server CI / Sentry Upload (push) Has been skipped
Server CI / Server CI Report (push) Failing after 5m1s
Server CI Nightly Race / Race Detector (push) Has been skipped
CodeQL / Analyze (go) (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
Webapp CI Cache Warm / Warm Webapp node_modules Cache (push) Has been cancelled
E2E CI Cache Warm / Warm E2E npm Registry Cache (push) Has been cancelled
API / build (push) Has been cancelled
Web App CI / check-types (push) Has been cancelled
Web App CI / check-lint (push) Has been cancelled
Web App CI / check-i18n (push) Has been cancelled
Web App CI / check-external-links (push) Has been cancelled
Web App CI / test (platform) (push) Has been cancelled
Web App CI / test (mattermost-redux) (push) Has been cancelled
Web App CI / test (channels shard 1/4) (push) Has been cancelled
Web App CI / test (channels shard 2/4) (push) Has been cancelled
Web App CI / test (channels shard 3/4) (push) Has been cancelled
Web App CI / test (channels shard 4/4) (push) Has been cancelled
Web App CI / upload-coverage (push) Has been cancelled
Web App CI / build (push) Has been cancelled
YAML Lint / yamllint (push) Has been cancelled
Push mirrored docker images / cd/Push mirrored docker images (push) Has been cancelled
docs-cd / Build and deploy docs (push) Has been cancelled
Docs CI / build (push) Has been cancelled
E2E Cache Warm: Cypress deps / Warm Cypress deps cache (push) Has been cancelled
Scorecards supply-chain security / Scorecard analysis (push) Has been cancelled
Server CI Weekly / Postgres FIPS (push) Has been skipped
Server CI Weekly / Run mmctl tests (FIPS) (push) Has been skipped
Server CI Weekly / Postgres with binary parameters (push) Has been skipped
Server CI Weekly / Build Environment (push) Failing after 1s
Server CI Cache Warm / Warm Go Module and Build Cache (push) Failing after 2s
Server CI Nightly Race / Build Environment (push) Failing after 1s
This commit is contained in:
181
e2e-tests/cypress/tests/support/db_commands.ts
Normal file
181
e2e-tests/cypress/tests/support/db_commands.ts
Normal file
@@ -0,0 +1,181 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
import type {ChainableT} from '../types';
|
||||
|
||||
const dbClient = Cypress.expose('dbClient');
|
||||
const dbConnection = Cypress.expose('dbConnection');
|
||||
const dbConfig = {
|
||||
client: dbClient,
|
||||
connection: dbConnection,
|
||||
};
|
||||
|
||||
const message = `Compare "cypress.json" against "config.json" of mattermost-server. It should match database driver and connection string.
|
||||
|
||||
The value at "cypress.json" is based on default mattermost-server's local database:
|
||||
{"dbClient": "${dbClient}", "dbConnection": "${dbConnection}"}
|
||||
|
||||
If your server is using database other than the default, you may export those as env variables, like:
|
||||
"__CYPRESS_dbClient=[dbClient] CYPRESS_dbConnection=[dbConnection] npm run cypress:open__"
|
||||
`;
|
||||
|
||||
function apiRequireServerDBToMatch(): ChainableT {
|
||||
return cy.apiGetConfig().then(({config}) => {
|
||||
// On Cloud, SqlSettings is not being returned.
|
||||
// With that, checking of server DB will be ignored and will assume it does match with
|
||||
// the one being expected by Cypress.
|
||||
if (config.SqlSettings && config.SqlSettings.DriverName !== dbClient) {
|
||||
expect(config.SqlSettings.DriverName, message).to.equal(dbClient);
|
||||
}
|
||||
});
|
||||
}
|
||||
Cypress.Commands.add('apiRequireServerDBToMatch', apiRequireServerDBToMatch);
|
||||
|
||||
interface GetActiveUserSessionsParam {
|
||||
username: string;
|
||||
userId?: string;
|
||||
limit?: number;
|
||||
}
|
||||
interface GetActiveUserSessionsResult {
|
||||
user: Cypress.UserProfile;
|
||||
// DB session records have dynamic fields
|
||||
sessions: Array<Record<string, any>>;
|
||||
}
|
||||
function dbGetActiveUserSessions(params: GetActiveUserSessionsParam): ChainableT<GetActiveUserSessionsResult> {
|
||||
// cy.task() returns untyped data
|
||||
return cy.task('dbGetActiveUserSessions', {dbConfig, params}).then(({user, sessions, errorMessage}: any) => {
|
||||
expect(errorMessage).to.be.undefined;
|
||||
|
||||
return cy.wrap({user, sessions});
|
||||
});
|
||||
}
|
||||
Cypress.Commands.add('dbGetActiveUserSessions', dbGetActiveUserSessions);
|
||||
|
||||
interface GetUserParam {
|
||||
username: string;
|
||||
}
|
||||
interface GetUserResult {
|
||||
user: Cypress.UserProfile & {mfasecret: string};
|
||||
}
|
||||
function dbGetUser(params: GetUserParam): ChainableT<GetUserResult> {
|
||||
// cy.task() returns untyped data
|
||||
return cy.task('dbGetUser', {dbConfig, params}).then(({user, errorMessage, error}: any) => {
|
||||
verifyError(error, errorMessage);
|
||||
|
||||
return cy.wrap({user});
|
||||
});
|
||||
}
|
||||
Cypress.Commands.add('dbGetUser', dbGetUser);
|
||||
|
||||
interface GetUserSessionParam {
|
||||
sessionId: string;
|
||||
}
|
||||
interface GetUserSessionResult {
|
||||
// DB session records have dynamic fields
|
||||
session: Record<string, any>;
|
||||
}
|
||||
function dbGetUserSession(params: GetUserSessionParam): ChainableT<GetUserSessionResult> {
|
||||
// cy.task() returns untyped data
|
||||
return cy.task('dbGetUserSession', {dbConfig, params}).then(({session, errorMessage}: any) => {
|
||||
expect(errorMessage).to.be.undefined;
|
||||
|
||||
return cy.wrap({session});
|
||||
});
|
||||
}
|
||||
Cypress.Commands.add('dbGetUserSession', dbGetUserSession);
|
||||
|
||||
interface UpdateUserSessionParam {
|
||||
sessionId: string;
|
||||
userId: string;
|
||||
// DB session fields are dynamic
|
||||
fieldsToUpdate: Record<string, any>;
|
||||
}
|
||||
interface UpdateUserSessionResult {
|
||||
// DB session records have dynamic fields
|
||||
session: Record<string, any>;
|
||||
}
|
||||
function dbUpdateUserSession(params: UpdateUserSessionParam): ChainableT<UpdateUserSessionResult> {
|
||||
// cy.task() returns untyped data
|
||||
return cy.task('dbUpdateUserSession', {dbConfig, params}).then(({session, errorMessage}: any) => {
|
||||
expect(errorMessage).to.be.undefined;
|
||||
|
||||
return cy.wrap({session});
|
||||
});
|
||||
}
|
||||
Cypress.Commands.add('dbUpdateUserSession', dbUpdateUserSession);
|
||||
|
||||
function dbRefreshPostStats(): ChainableT<{success?: boolean; skipped?: boolean; message?: string}> {
|
||||
// cy.task() returns untyped data
|
||||
return cy.task('dbRefreshPostStats', {dbConfig}).then(({success, skipped, message, errorMessage, error}: any) => {
|
||||
verifyError(error, errorMessage);
|
||||
return cy.wrap({success, skipped, message} as {success?: boolean; skipped?: boolean; message?: string});
|
||||
}) as ChainableT<{success?: boolean; skipped?: boolean; message?: string}>;
|
||||
}
|
||||
Cypress.Commands.add('dbRefreshPostStats', dbRefreshPostStats);
|
||||
|
||||
function verifyError(error: unknown, errorMessage: string) {
|
||||
if (errorMessage) {
|
||||
expect(errorMessage, `${errorMessage}\n\n${message}\n\n${JSON.stringify(error)}`).to.be.undefined;
|
||||
}
|
||||
}
|
||||
|
||||
declare global {
|
||||
// eslint-disable-next-line @typescript-eslint/no-namespace
|
||||
namespace Cypress {
|
||||
interface Chainable {
|
||||
|
||||
/**
|
||||
* Gets server config, and assert if it matches with the database connection being used by Cypress
|
||||
*
|
||||
* @example
|
||||
* cy.apiRequireServerDBToMatch();
|
||||
*/
|
||||
apiRequireServerDBToMatch: typeof apiRequireServerDBToMatch;
|
||||
|
||||
/**
|
||||
* Gets active sessions of a user on a given username or user ID directly from the database
|
||||
* @param {String} username
|
||||
* @param {String} userId
|
||||
* @param {String} limit - maximum number of active sessions to return, e.g. 50 (default)
|
||||
* @returns {Object} user - user object
|
||||
* @returns {[Object]} sessions - an array of active sessions
|
||||
*/
|
||||
dbGetActiveUserSessions: typeof dbGetActiveUserSessions;
|
||||
|
||||
/**
|
||||
* Gets user on a given username directly from the database
|
||||
* @param {Object} options
|
||||
* @param {String} options.username
|
||||
* @returns {UserProfile} user - user object
|
||||
*/
|
||||
dbGetUser: typeof dbGetUser;
|
||||
|
||||
/**
|
||||
* Gets session of a user on a given session ID directly from the database
|
||||
* @param {Object} options
|
||||
* @param {String} options.sessionId
|
||||
* @returns {Session} session
|
||||
*/
|
||||
dbGetUserSession: typeof dbGetUserSession;
|
||||
|
||||
/**
|
||||
* Updates session of a user on a given user ID and session ID with fields to update directly from the database
|
||||
* @param {Object} options
|
||||
* @param {String} options.sessionId
|
||||
* @param {String} options.userId
|
||||
* @param {Object} options.fieldsToUpdate - will update all except session ID and user ID
|
||||
* @returns {Session} session
|
||||
*/
|
||||
dbUpdateUserSession: typeof dbUpdateUserSession;
|
||||
|
||||
/**
|
||||
* Refreshes PostgreSQL materialized views for post statistics
|
||||
* @returns {Object} result
|
||||
* @returns {boolean} result.success - true if refresh was successful
|
||||
* @returns {boolean} result.skipped - true if operation was skipped (non-PostgreSQL)
|
||||
* @returns {string} result.message - message when operation is skipped
|
||||
*/
|
||||
dbRefreshPostStats: typeof dbRefreshPostStats;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user