mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
* added store * make generated * add missing license headers * fix receiver name * i18n * i18n sorting * update migrations from master * make migrations-extract * update retrylayer tests * replaced sql query with id pagination * fixed flaky tests * missing columns * missing columns on save/update * typo * improved tests * remove enum from mysql colum * add password credentials to store * license changes * OAuthOutgoingConnectionInterface * Oauth -> OAuth * make generated * copied over installed_oauth_apps component and renamed things to installed_outgoing_oauth_connections * merge migrations * renamed migrations * model change suggestions * refactor test functionsn * migration typo * refactor store table names * updated sanitize test * cleanup merge * refactor symbol * "installed outgoing oauth connections" page works * move things into a nested folder * add and edit page stubs work * list endpoint * oauthoutgoingconnection -> outgoingoauthconnection * signature change * i18n update * granttype typo * naming * api list * uppercase typo * i18n * missing license header * fixed path in comments * updated openapi definitions * changes to support selecting command request url * sanitize connections * make generated * test license and no feature flag * removed t.fatal * updated testhelper calls * yaml schema fixes * switched interface name * suggested translation * missing i18n translation * management permission * moved permission initalization to proper place * endpoints * put tests * error check typo * fixed specific enttity urls * tests * read permission check * updated openapi definitions * i18n * GetConnectionByAudience method * notes * replaced GetConnectionsByAudience with a filter * added custom oauth token object * updated interface and usage * properly set enterprise interface * move retrieval logic to impl * webhook tests * translations * i18n: updates * address comments * endpoint and tests * i18n * api docs * fixed endpoint path * sq.like * use filter object instead of parameters * set url values if not empty * typos * converted some components to function components, and move around files * correctly check token url * restore flag to previous value * added command oauth handler * update enterprise imports * migrate last component to function component * Added enterprise import * refactor permissions and add necessary webapp code * Check correct flag in permission tree * allow partial updates * sort i18n webapp * missing test modification * fixed webapp i18n sorting * allow validating stored connections * added missing translation * fix finished adding connection link and text on result page * added missing permission to smoke tests * missing role in smoke test * updated translations * updated translations * support editing client secret on existing connection * fix some i18n strings * updated translations * better error messages * progress on using react select for command request url while maintaining typed in value * remove writeheader, test * HasValidGrantType * end early to avoid nil pointer errors * move slash command request url input box into its own component * wrap components related to oauth connections in config check * fix tests * i18n-extract * change some i18n strings to say "Outgoing OAuth 2.0 Connections" * remove debug code * fixed i18n * updated i18n file * feature configuration backend * typo * add system console setting * Revert "typo" This reverts commit669da23e8e. * Revert "updated i18n file" This reverts commitd0882c0dd7. * Revert "fixed i18n" This reverts commit3108866bc1. * fixed i18n * updated i18n file * typo * updated i18n * updated i18n * updated i18n * updated version to 9.6 * replace feature flag with system console configuration * i18n * updated tests * pr feedback * fix styling of disabled text box * fix styling of action links in integration console * server changes for validation feature * webapp changes for validation feature * pencil icon styling * styling fixes for oauth audience correct configuration message * fix sanitize test * remove max lengths from outgoing oauth connection form * use config var in webapp instead of feature flag * change asterisks to bullets * update api docs for validate endpoint * feedback from ux review * fix lint, types, tests * fix stylelint * implement validation button under the token url input * support wildcard for matching audience urls * updates for styling * update snapshots * add doc links for the outgoing oauth connections feature * change doc links to use permalink * add docs link to system console * fix: use limitedreader in json decoding * fix: form error in validation * management permission can read now * updated api documentation * doc typo * require one permission to read only * fix api connection list audience filter * fix audience matching and add loading indicator * fix team permissions on outgoing oauth connection api calls * fix api doc and test, for adding team id to query params * handle read permissions by adding a team in the payload * missing teamid query parameter in test * change validate button logic to not require audience urls to be filled out * fix redux type --------- Co-authored-by: Felipe Martin <me@fmartingr.com>
E2E testing for the Mattermost web client
This directory contains the E2E testing code for the Mattermost web client.
How to run locally
For test case development
Please refer to the dedicated developer documentation for instructions.
For pipeline debugging
The E2E testing pipeline's scripts depend on the following tools being installed on your system: docker, docker-compose, make, git, jq, node and some common utilities (coreutils, findutils, bash, awk, sed, grep)
Instructions, tl;dr: create a local branch with your E2E test changes, then open a PR to the mattermost-server repo targeting the master branch (so that CI will produce the image that docker-compose needs), then run make in this directory.
Instructions, detailed:
- (optional, undefined variables are set to sane defaults) Create the
.ci/envfile, and populate it with the variables you need out of the following list:
SERVER: eitherself-hosted(default) orcloud.CWS_URL(mandatory whenSERVER=cloud, only used in such caase): when spinning up a cloud-like test server that communicates with a test instance of customer web server.TEST: eithercypress(default),playwright, ornone(to avoid creating the cypress/playwright sidecar containers, e.g. if you only want to launch a server instance)ENABLED_DOCKER_SERVICES: a space-separated list of services to start alongside the server. Default topostgres inbucket, for smoke tests purposes and for lightweight and faster start up time. Depending on the test requirement being worked on, you may want to override as needed, as such:- Cypress full tests require all services to be running:
postgres inbucket minio openldap elasticsearch keycloak. - Cypress smoke tests require only the following:
postgres inbucket. - Playwright full tests require only the folliwing:
postgres inbucket.
- Cypress full tests require all services to be running:
- The following variables, which will be passed over to the server container:
MM_LICENSE(no enterprise features will be available if this is unset; required whenSERVER=cloud), and the explodedMM_ENV(a comma-separated list of env var specifications) - The following variables, which will be passed over to the cypress container:
BRANCH,BUILD_ID,CI_BASE_URL,BROWSER,AUTOMATION_DASHBOARD_URLandAUTOMATION_DASHBOARD_TOKEN - The
SERVER_IMAGEvariable can also be set, if you want to select a custom mattermost-server image. If not specified, the value of theSERVER_IMAGE_DEFAULTvariable defined in file.ci/.e2ercis used. - The
TEST_FILTERvariable can also be set, to customize which tests you want cypress to run. If not specified, only the smoke tests will run. Please check thee2e-tests/cypress/run_tests.jsfile for details about its format.
- (optional)
make start-dashboard && make generate-test-cycle: start the automation-dashboard in the background, and initiate a test cycle on it, for the givenBUILD_ID
- NB: the
BUILD_IDvalue should stay the same across themake generate-test-cyclecommand, and the subsequentmake(see next step). If you need to initiate a new test cycle on the same dashboard, you'll need to change theBUILD_IDvalue and rerun bothmake generate-test-cycleandmake. - This also automatically sets the
AUTOMATION_DASHBOARD_URLandAUTOMATION_DASHBOARD_TOKENvariables for the cypress container - Note that if you run the dashboard locally, but also specify other
AUTOMATION_DASHBOARD_*variables in your.ci/envfile, the latter variables will take precedence. - The dashboard is used for orchestrating specs with parallel test run and is typically used in CI.
- Only Cypress is currently using the dashboard; Playwright is not.
make: start and prepare the server, then run the Cypress smoke tests
- You can track the progress of the run in the
http://localhost:4000/cyclesdashboard, if you launched it locally - When running with
SERVER=cloud, this will automatically create a cloud customer against the specifiedCWS_URLservice, and delete that user after the run is complete. - If you want to run the Playwright tests instead of the Cypress ones, you can run
TEST=playwright make - If you just want to run a local server instance, without any further testing, you can run
TEST=none make
make stop: tears down the server (and the dashboard, if running)
make cleanwill also remove any generated environment or docker-compose files, in addition to stopping the containers.
Notes:
- Setting a variable in
.ci/envis functionally equivalent to exporting variables in your current shell's environment, before invoking the makefile. - The
.ci/.env.*files are auto generated by the pipeline scripts, and aren't meant to be modified manually. The only file you should edit to control the containers' environment is.ci/env, as specified in the instructions above. - All of the variables in
.ci/envmust be set before themake generate-servercommand is run (or, if using the dashboard, before themake generate-test-cyclecommand). Modifying that file afterwards has no effect, because the containers' env files are generated in that step. - If you restart the dashboard at any point, you must also restart the server containers, so that it picks up the new IP of the dashboard from the newly generated
.env.dashboardfile - If new variables need to be passed to any of the containers, here are the general principles to follow when deciding where to populate it:
- If their value is fixed (e.g. a static server configuration), these may be simply added to the
docker_compose_generator.shfile, to the appropriate container. - If you need to introduce variables that you want to control from
.ci/env: you need to update the scripts under the.ci/dir, and configure them to write the new variables' values over to the appropriate.env.*file. In particular, avoid defining variables that depend on other variables within the docker-compose override files: this is to ensure uniformity in their availability, and simplifies the question of what container has access to which variable considerably. - Exceptions are of course accepted wherever it makes sense (e.g. if you need to group variables based on some common functionality)
- If their value is fixed (e.g. a static server configuration), these may be simply added to the
For code changes:
make fmt-cito format and check yaml files and shell scripts.