Skip to content

Commit

Permalink
feat(e2e): playwright base setup
Browse files Browse the repository at this point in the history
  • Loading branch information
saturninoabril committed Sep 19, 2024
1 parent 09c4f13 commit c6a2375
Show file tree
Hide file tree
Showing 17 changed files with 2,204 additions and 2 deletions.
3 changes: 1 addition & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ on:
schedule:
- cron: "0 0 * * *"
push:
branches:
- master
branches: [master, main]
tags:
- "v*"
pull_request:
Expand Down
149 changes: 149 additions & 0 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
name: e2e
on:
workflow_run:
workflows:
- ci
types:
- completed

env:
TERM: xterm
GO_VERSION: 1.21

jobs:
playwright-run:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
services:
postgres:
image: mattermostdevelopment/mirrored-postgres:12
env:
POSTGRES_USER: mmuser
POSTGRES_PASSWORD: mostest
POSTGRES_DB: mattermost_test
POSTGRES_HOST_AUTH_METHOD: trust
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
inbucket:
image: mattermost/inbucket:release-1.2.0
ports:
- 10080:10080
- 10110:10110
- 10025:10025
mattermost-server:
image: mattermostdevelopment/mattermost-enterprise-edition:master
env:
DB_HOST: postgres
DB_PORT_NUMBER: 5432
MM_DBNAME: mattermost_test
MM_USERNAME: mmuser
MM_PASSWORD: mostest
CI_INBUCKET_HOST: inbucket
CI_INBUCKET_PORT: 10080
IS_CI: true
MM_SERVICEENVIRONMENT: test
MM_CLUSTERSETTINGS_READONLYCONFIG: false
MM_EMAILSETTINGS_SMTPSERVER: inbucket
MM_EMAILSETTINGS_SMTPPORT: 10025
MM_PLUGINSETTINGS_ENABLEUPLOADS: true
MM_PLUGINSETTINGS_AUTOMATICPREPACKAGEDPLUGINS: false
MM_SERVICESETTINGS_SITEURL: http://localhost:8065
MM_SQLSETTINGS_DATASOURCE: "postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10"
MM_SQLSETTINGS_DRIVERNAME: postgres

ports:
- 8065:8065
env:
MM_SERVICESETTINGS_SITEURL: http://localhost:8065
MM_ADMIN_EMAIL: [email protected]
MM_ADMIN_USERNAME: sysadmin
MM_ADMIN_PASSWORD: Sys@dmin-sample1
steps:
- name: ci/checkout-repo
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

- name: ci/setup-go
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0
with:
go-version: "${{ env.GO_VERSION }}"
cache: true

- name: ci/setup-node
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
with:
node-version-file: ".nvmrc"

- name: ci/create-admin-user
run: |
STATUSCODE=$(curl -X POST -H "Content-Type: application/json" -d '{"email": "'${MM_ADMIN_EMAIL}'", "username": "'${MM_ADMIN_USERNAME}'", "password": "'${MM_ADMIN_PASSWORD}'"}' ${MM_SERVICESETTINGS_SITEURL}/api/v4/users -w "%{http_code}" -o /dev/stderr)
if test $STATUSCODE -ne 201; then exit 1; fi
- name: ci/install-go-dependencies
run: go mod tidy

- name: ci/install-plugin-webapp-deps
run: cd webapp && npm ci

- name: ci/build-and-install-plugin
run: make deploy

- name: ci/checkout-mattermost
run: |
git clone https://github.com/mattermost/mattermost.git ../mattermost
- name: ci/setup-node-for-mattermost
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
with:
node-version-file: "../mattermost/.nvmrc"

- name: ci/install-mattermost-webapp-deps
run: |
cd ../mattermost/webapp
npm ci
- name: ci/install-mattermost-playwright-deps
run: |
cd ../mattermost/e2e-tests/playwright
npm ci
- name: ci/setup-node-for-plugin-e2e
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
with:
node-version-file: "e2e/.nvmrc"

- name: ci/install-plugin-e2e-deps
run: |
cd e2e
npm ci
- name: ci/check
run: |
cd e2e
npm run check
- name: ci/run-e2e-tests
run: |
cd e2e
npm run test-ci
env:
CI: true
NODE_OPTIONS: '--no-experimental-fetch'
PW_ENSURE_PLUGINS_INSTALLED: com.mattermost.plugin-starter-template

- name: ci/move-artifacts
if: success() || failure()
run: |
cd e2e
mkdir results
mv playwright-report results
- uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
if: success() || failure()
with:
name: test-results
path: e2e/results
3 changes: 3 additions & 0 deletions e2e/.eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
node_modules
playwright-report
test-results
5 changes: 5 additions & 0 deletions e2e/.eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint"],
"extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"]
}
7 changes: 7 additions & 0 deletions e2e/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
node_modules/
/playwright/.cache/
.env
screenshots
playwright-report
test-results
.eslintcache
1 change: 1 addition & 0 deletions e2e/.nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
20.11
5 changes: 5 additions & 0 deletions e2e/.prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
node_modules
package.json
package-lock.json
playwright-report
storage_state
6 changes: 6 additions & 0 deletions e2e/.prettierrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"bracketSpacing": false,
"printWidth": 120,
"singleQuote": true,
"tabWidth": 4
}
41 changes: 41 additions & 0 deletions e2e/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
### Setup your environment

In order to get your environment set up to run [Playwright](https://playwright.dev) tests, you can run `./setup-environment`, or run equivalent commands for your current setup.

What this script does:

- Navigate to the folder above `mattermost-plugin-starter-template`
- Clone `mattermost` (if it is already cloned there, please have a clean git index to avoid issues with conflicts)
- Install webapp dependencies - `cd mattermost/webapp && npm i`
- Install Playwright test dependencies - `cd ../e2e-tests/playwright && npm i`
- Install plugin e2e dependencies - `cd ../../../mattermost-plugin-starter-template/e2e && npm i`
- Build and deploy plugin - `make deploy`

---

### Run the tests

Start Mattermost server:

- `cd <path>/mattermost/server`
- `make test-data`
- `make run-server`

Run test:

- `cd <path>/mattermost-plugin-starter-template/e2e`
- `npm run test` to run in multiple projects such as `chrome`, `firefox` and `ipad`.
- `npm run test -- --project=chrome` to run in specific project such as `chrome`.

To see the test report:

- `cd <path>/mattermost-plugin-starter-template/e2e`
- `npm run show-report` and navigate to link provided

To see test screenshots:

- `cd <path>/mattermost-plugin-starter-template/e2e/screenshots`

### Have questions or wanted to connect?

If you have any questions or need assistance, feel free to join and start a discussion at the [QA: Contributors channel](https://community.mattermost.com/core/channels/qa-contributors). It's a good place to connect with Mattermost staff and the wider community.
Loading

0 comments on commit c6a2375

Please sign in to comment.