Skip to content

Commit cd25151

Browse files
authored
Merge pull request #32 from owncloud/test/e2e-tests
test: add e2e test suite
2 parents 5ee771a + afaed88 commit cd25151

File tree

19 files changed

+1367
-23
lines changed

19 files changed

+1367
-23
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,7 @@ dist
1313
.env
1414
.idea
1515
.vscode
16+
17+
# dev setup
18+
/docker/traefik/certificates
19+
docker-compose.override.yml

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,10 @@ Extensions are provided by apps. These are the apps, that are provided by this r
1515
- [web-app-draw-io](./packages/web-app-draw-io/)
1616
- [web-app-external-sites](./packages/web-app-external-sites/)
1717
- [web-app-progress-bars](./packages/web-app-progress-bars/)
18+
19+
## Adding a new app
20+
21+
New apps must be placed inside the `packages` folder and be prefixed with `web-app-`. Additionally, the following changes are needed:
22+
23+
- add the new app to the `APPS` variable in the `.drone.star` file
24+
- add the `dist` folder of the new app to the list of volume mounts of the docker `ocis` service

cucumber.cjs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
module.exports = {
2+
default: {
3+
require: ['tests/e2e/**/*.ts'],
4+
requireModule: ['ts-node/register'],
5+
retry: process.env.RETRY || 0,
6+
format: ['@cucumber/pretty-formatter']
7+
}
8+
}

docker-compose.yml

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
services:
2+
ocis:
3+
image: ${OCIS_IMAGE:-owncloud/ocis-rolling:master}
4+
entrypoint: /bin/sh
5+
command: ['-c', 'ocis init || true && ocis server']
6+
environment:
7+
OCIS_URL: https://host.docker.internal:9200
8+
OCIS_INSECURE: true
9+
OCIS_LOG_LEVEL: error
10+
IDM_ADMIN_PASSWORD: admin
11+
PROXY_ENABLE_BASIC_AUTH: true
12+
PROXY_TLS: 'false'
13+
WEB_ASSET_APPS_PATH: /web/apps
14+
WEB_UI_CONFIG_FILE: /web/config.json
15+
labels:
16+
traefik.enable: true
17+
traefik.http.routers.ocis.tls: true
18+
traefik.http.routers.ocis.rule: Host(`host.docker.internal`) && PathPrefix(`/`)
19+
traefik.http.routers.ocis.entrypoints: ocis
20+
traefik.http.services.ocis.loadbalancer.server.port: 9200
21+
traefik.http.routers.ocis.middlewares: cors
22+
volumes:
23+
- ocis-config:/etc/ocis
24+
- ./docker/ocis.web.config.json:/web/config.json
25+
# apps
26+
- ./packages/web-app-cast/dist:/web/apps/cast
27+
- ./packages/web-app-draw-io/dist:/web/apps/draw-io
28+
- ./packages/web-app-external-sites/dist:/web/apps/external-sites
29+
- ./packages/web-app-progress-bars/dist:/web/apps/progress-bars
30+
depends_on:
31+
- traefik
32+
33+
traefik:
34+
image: traefik:2.10.7
35+
restart: unless-stopped
36+
entrypoint:
37+
[
38+
'/bin/sh',
39+
'-c',
40+
"[ -f /certificates/server.key ] && ./entrypoint.sh $$@ || (apk add openssl && openssl req -subj '/CN=ocis.test' -x509 -sha256 -nodes -days 3650 -newkey rsa:2048 -keyout /certificates/server.key -out /certificates/server.crt && chmod -R 777 /certificates && ./entrypoint.sh $$@)"
41+
]
42+
command:
43+
- '--pilot.dashboard=false'
44+
- '--log.level=DEBUG'
45+
- '--api.dashboard=true'
46+
- '--api.insecure=true'
47+
- '--providers.file.directory=/configs'
48+
- '--providers.docker=true'
49+
- '--providers.docker.exposedbydefault=false'
50+
- '--entrypoints.web.address=:80'
51+
- '--entrypoints.ocis.address=:9200'
52+
- '--entrypoints.ocis-federated.address=:10200'
53+
- '--entrypoints.websecure.address=:443'
54+
- '--entrypoints.websecure.http.middlewares=https_config@docker'
55+
- '--entrypoints.websecure.http.tls.options=default'
56+
labels:
57+
traefik.enable: true
58+
traefik.http.routers.http_catchall.rule: HostRegexp(`{any:.+}`)
59+
traefik.http.routers.http_catchall.entrypoints: web
60+
traefik.http.routers.http_catchall.middlewares: https_config
61+
traefik.http.middlewares.https_config.headers.sslRedirect: true
62+
traefik.http.middlewares.https_config.headers.stsSeconds: 63072000
63+
traefik.http.middlewares.https_config.headers.stsIncludeSubdomains: true
64+
traefik.http.middlewares.cors.headers.accesscontrolallowmethods: '*'
65+
traefik.http.middlewares.cors.headers.accesscontrolallowheaders: '*'
66+
traefik.http.middlewares.cors.headers.accesscontrolalloworiginlist: '*'
67+
traefik.http.middlewares.cors.headers.accesscontrolexposeheaders: '*'
68+
traefik.http.middlewares.cors.headers.accesscontrolmaxage: 100
69+
traefik.http.middlewares.cors.headers.addvaryheader: true
70+
ports:
71+
- '9200:9200'
72+
volumes:
73+
- './docker/traefik/certificates:/certificates'
74+
- './docker/traefik/configs:/configs'
75+
- '/var/run/docker.sock:/var/run/docker.sock:ro'
76+
77+
volumes:
78+
ocis-config:
79+
80+
networks:
81+
traefik:

docker/ocis.web.config.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"server": "https://host.docker.internal:9200",
3+
"theme": "https://host.docker.internal:9200/themes/owncloud/theme.json",
4+
"openIdConnect": {
5+
"metadata_url": "https://host.docker.internal:9200/.well-known/openid-configuration",
6+
"authority": "https://host.docker.internal:9200",
7+
"client_id": "web",
8+
"response_type": "code",
9+
"scope": "openid profile email"
10+
},
11+
"apps": ["files", "text-editor", "pdf-viewer", "search", "external", "admin-settings"]
12+
}

docker/traefik/configs/tls.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
tls:
2+
stores:
3+
default:
4+
defaultCertificate:
5+
certFile: /certificates/server.crt
6+
keyFile: /certificates/server.key

package.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,25 @@
88
"homepage": "https://github.com/owncloud/web-extensions",
99
"type": "module",
1010
"scripts": {
11+
"build": "pnpm -r build",
12+
"build:w": "pnpm -r build:w",
1113
"check:types": "pnpm -r check:types",
1214
"lint": "eslint 'packages/**/*.{js,ts,vue}' --color",
13-
"test:unit": "pnpm -r test:unit"
15+
"test:unit": "pnpm -r test:unit",
16+
"test:e2e": "NODE_TLS_REJECT_UNAUTHORIZED=0 TS_NODE_PROJECT=./tests/e2e/tsconfig.json cucumber-js packages/"
1417
},
1518
"devDependencies": {
19+
"@cucumber/cucumber": "^10.3.1",
20+
"@cucumber/pretty-formatter": "^1.0.0",
1621
"@ownclouders/eslint-config": "0.0.1",
1722
"@ownclouders/extension-sdk": "0.0.7",
1823
"@ownclouders/prettier-config": "0.0.1",
1924
"@ownclouders/tsconfig": "0.0.6",
25+
"@playwright/test": "^1.41.2",
2026
"@types/node": "20.14.12",
2127
"eslint": "8.57.0",
2228
"prettier": "3.3.3",
29+
"ts-node": "^10.9.2",
2330
"typescript": "5.5.4",
2431
"vite": "5.3.5",
2532
"vitest": "2.0.4"
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Feature: progress-bars
2+
3+
Scenario: select nyan cat progress bar
4+
Given the user has logged in with username "admin" and password "admin"
5+
And the user has navigated to the account menu
6+
Then the user selects the progress bar extension "Nyan Cat progress bar"

0 commit comments

Comments
 (0)