Skip to content

Commit 5ea8c58

Browse files
Merge pull request #4796 from linuxfoundation/unicron-4762-cypress-apis-test-coverage-10
Update test coverage for docs, events, foundation v4 APIs groups, add CI job to run cypress E2E tests, udpate AWS util scripts, add debugging for company/signature ACLs in go v4 APIs
2 parents 2c822bc + b9c7062 commit 5ea8c58

32 files changed

+1141
-367
lines changed
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
# Copyright The Linux Foundation and each contributor to CommunityBridge.
2+
# SPDX-License-Identifier: MIT
3+
4+
name: Cypress Functional Tests (PR) - runs on *currently* deployed dev API, not the new one from this PR.
5+
6+
on:
7+
pull_request:
8+
branches:
9+
- dev
10+
11+
permissions:
12+
contents: read
13+
14+
jobs:
15+
cypress-functional:
16+
if: ${{ github.event.pull_request.head.repo.fork == false }}
17+
runs-on: ubuntu-latest
18+
continue-on-error: true
19+
defaults:
20+
run:
21+
working-directory: tests/functional
22+
23+
steps:
24+
- name: Checkout
25+
uses: actions/checkout@v4
26+
27+
- name: Setup Node
28+
uses: actions/setup-node@v4
29+
with:
30+
node-version: '20'
31+
cache: 'npm'
32+
33+
- name: Install system dependencies
34+
shell: bash
35+
run: |
36+
set -euo pipefail
37+
sudo apt-get update
38+
# Core deps for Cypress/Electron under Xvfb
39+
sudo apt-get install -y \
40+
xvfb \
41+
libgtk-3-0 \
42+
libgbm1 \
43+
libnss3 \
44+
libxss1 \
45+
xauth \
46+
fonts-liberation \
47+
xdg-utils \
48+
ca-certificates \
49+
libatk-bridge2.0-0 \
50+
libatspi2.0-0 \
51+
libdrm2
52+
# Optional/legacy GTK2 (ok if missing)
53+
sudo apt-get install -y libgtk2.0-0 || true
54+
# Audio lib: Noble uses libasound2t64 (fallback to libasound2 on older images)
55+
sudo apt-get install -y libasound2t64 || sudo apt-get install -y libasound2 || true
56+
# Notify lib: prefer runtime package; fall back to -dev if needed
57+
sudo apt-get install -y libnotify4 || sudo apt-get install -y libnotify-dev || true
58+
59+
- name: Install dependencies
60+
run: npm ci
61+
62+
- name: Create .env from secrets and constants
63+
run: |
64+
cat > .env <<'EOF'
65+
APP_URL=https://api-gw.dev.platform.linuxfoundation.org/
66+
AUTH0_TOKEN_API=https://linuxfoundation-dev.auth0.com/oauth/token
67+
CYPRESS_ENV=dev
68+
69+
AUTH0_USER_NAME=${{ secrets.AUTH0_USER_NAME }}
70+
AUTH0_PASSWORD=${{ secrets.AUTH0_PASSWORD }}
71+
LFX_API_TOKEN=${{ secrets.LFX_API_TOKEN }}
72+
AUTH0_CLIENT_SECRET=${{ secrets.AUTH0_CLIENT_SECRET }}
73+
AUTH0_CLIENT_ID=${{ secrets.AUTH0_CLIENT_ID }}
74+
EOF
75+
echo "Wrote $(pwd)/.env"
76+
77+
- name: Show Cypress version
78+
run: npx cypress --version
79+
80+
- name: Verify Cypress binary
81+
run: npx cypress verify
82+
83+
- name: Run Cypress (xvfb)
84+
run: xvfb-run -a npx cypress run
85+
86+
- name: Upload Cypress Artifacts (on failure)
87+
if: failure()
88+
uses: actions/upload-artifact@v4
89+
with:
90+
name: cypress-artifacts
91+
path: |
92+
tests/functional/cypress/screenshots
93+
tests/functional/cypress/videos
94+
if-no-files-found: ignore
95+

.github/workflows/deploy-dev.yml

Lines changed: 85 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,4 +220,88 @@ jobs:
220220
echo "Failed to get a successful response from endpoint: ${v4_url}"
221221
exit ${exit_code}
222222
fi
223-
223+
224+
225+
cypress-functional-after-deploy:
226+
name: Cypress Functional Tests (post-deploy) - executes on a freshly deployed dev API.
227+
if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == false }}
228+
runs-on: ubuntu-latest
229+
continue-on-error: true
230+
timeout-minutes: 75
231+
needs: build-deploy-dev
232+
environment: dev
233+
defaults:
234+
run:
235+
working-directory: tests/functional
236+
steps:
237+
- name: Checkout
238+
uses: actions/checkout@v4
239+
240+
- name: Setup Node
241+
uses: actions/setup-node@v4
242+
with:
243+
node-version: '20'
244+
cache: 'npm'
245+
246+
- name: Install system dependencies
247+
shell: bash
248+
run: |
249+
set -euo pipefail
250+
sudo apt-get update
251+
# Core deps for Cypress/Electron under Xvfb
252+
sudo apt-get install -y \
253+
xvfb \
254+
libgtk-3-0 \
255+
libgbm1 \
256+
libnss3 \
257+
libxss1 \
258+
xauth \
259+
fonts-liberation \
260+
xdg-utils \
261+
ca-certificates \
262+
libatk-bridge2.0-0 \
263+
libatspi2.0-0 \
264+
libdrm2
265+
# Optional/legacy GTK2 (ok if missing)
266+
sudo apt-get install -y libgtk2.0-0 || true
267+
# Audio lib: Noble uses libasound2t64 (fallback to libasound2 on older images)
268+
sudo apt-get install -y libasound2t64 || sudo apt-get install -y libasound2 || true
269+
# Notify lib: prefer runtime package; fall back to -dev if needed
270+
sudo apt-get install -y libnotify4 || sudo apt-get install -y libnotify-dev || true
271+
272+
- name: Install dependencies
273+
run: npm ci
274+
275+
- name: Create .env from secrets and constants
276+
run: |
277+
cat > .env <<'EOF'
278+
APP_URL=https://api-gw.dev.platform.linuxfoundation.org/
279+
AUTH0_TOKEN_API=https://linuxfoundation-dev.auth0.com/oauth/token
280+
CYPRESS_ENV=dev
281+
282+
AUTH0_USER_NAME=${{ secrets.AUTH0_USER_NAME }}
283+
AUTH0_PASSWORD=${{ secrets.AUTH0_PASSWORD }}
284+
LFX_API_TOKEN=${{ secrets.LFX_API_TOKEN }}
285+
AUTH0_CLIENT_SECRET=${{ secrets.AUTH0_CLIENT_SECRET }}
286+
AUTH0_CLIENT_ID=${{ secrets.AUTH0_CLIENT_ID }}
287+
EOF
288+
echo "Wrote $(pwd)/.env"
289+
290+
- name: Show Cypress version
291+
run: npx cypress --version
292+
293+
- name: Verify Cypress binary
294+
run: npx cypress verify
295+
296+
- name: Run Cypress (xvfb)
297+
run: xvfb-run -a npx cypress run
298+
299+
- name: Upload Cypress Artifacts (on failure)
300+
if: failure()
301+
uses: actions/upload-artifact@v4
302+
with:
303+
name: cypress-artifacts-post-deploy
304+
path: |
305+
tests/functional/cypress/screenshots
306+
tests/functional/cypress/videos
307+
if-no-files-found: ignore

cla-backend-go/signatures/service.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,8 @@ func (s service) UpdateApprovalList(ctx context.Context, authUser *auth.User, cl
493493

494494
// Ensure current user is in the Signature ACL
495495
claManagers := corporateSigModel.SignatureACL
496+
// LG: for debugging signatures ACLs
497+
// log.WithFields(f).Debugf("corporateSigModel = %+v", corporateSigModel)
496498
if !utils.CurrentUserInACL(authUser, claManagers) {
497499
msg := fmt.Sprintf("EasyCLA - 403 Forbidden - CLA Manager %s / %s is not authorized to approve request for company ID: %s / %s / %s, project ID: %s / %s / %s",
498500
authUser.UserName, authUser.Email,

cla-backend-go/utils/signature_utils.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,25 @@ package utils
66
import (
77
"github.com/LF-Engineering/lfx-kit/auth"
88
v1Models "github.com/linuxfoundation/easycla/cla-backend-go/gen/v1/models"
9+
log "github.com/linuxfoundation/easycla/cla-backend-go/logging"
10+
"github.com/sirupsen/logrus"
911
)
1012

1113
// CurrentUserInACL is a helper function to determine if the current logged in user is in the specified CLA Manager list
1214
func CurrentUserInACL(authUser *auth.User, managers []v1Models.User) bool {
15+
uname := "(null)"
16+
if authUser != nil {
17+
uname = authUser.UserName
18+
}
19+
f := logrus.Fields{
20+
"functionName": "utils.signature_utils.CurrentUserInACL",
21+
"authUser": uname,
22+
}
23+
1324
var inACL = false
1425
for _, manager := range managers {
15-
if manager.LfUsername == authUser.UserName {
26+
log.WithFields(f).Debugf("ACL check: %+v", manager)
27+
if authUser != nil && manager.LfUsername == authUser.UserName {
1628
inACL = true
1729
break
1830
}

tests/functional/cypress/e2e/docs.cy.ts

Lines changed: 0 additions & 53 deletions
This file was deleted.

0 commit comments

Comments
 (0)