Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
b0f2d64
FIX normalized velocity and gaze
quangptt0910 Jan 4, 2026
ac1a7cd
Update Adaptive Threshold Velocity
quangptt0910 Jan 5, 2026
685b9bc
Fix some wrong values and parameters
quangptt0910 Jan 5, 2026
ab23b3d
Added feedback pop-up for a user if camera is disabled
BinaryWiz4rd Jan 9, 2026
f33eb5c
Added calibration demo test
BinaryWiz4rd Jan 9, 2026
c6c9a3e
Added a calibration eye photo to the calibration screen
BinaryWiz4rd Jan 9, 2026
888d6b5
Merge pull request #9 from quangptt0910/feature/calibration
BinaryWiz4rd Jan 9, 2026
4b36bc4
Add unit tests and CI/CD workflow
ziemniak04 Jan 10, 2026
26f60b3
Fix CI workflow: use npm install instead of npm ci, fix pass rate cal…
ziemniak04 Jan 10, 2026
b4447d8
Fix component tests: import directly to avoid Firebase initialization
ziemniak04 Jan 10, 2026
52c1449
Merge pull request #10 from quangptt0910/feature/add-tests
ziemniak04 Jan 11, 2026
100077b
Merge branch 'develop' of https://github.com/quangptt0910/SaccadeSync…
quangptt0910 Jan 15, 2026
49cb802
Added docstrings to Calibration screen, and deleted redundant imports
BinaryWiz4rd Jan 16, 2026
ede8cbe
Merge pull request #11 from quangptt0910/feature/calibration
BinaryWiz4rd Jan 16, 2026
bdbf9bb
Update new functions
quangptt0910 Jan 16, 2026
d7cff1d
Update to Ridge Least Square regression in Calibration
quangptt0910 Jan 17, 2026
0ff943d
Small fix for add the Gain in the save data
quangptt0910 Jan 17, 2026
623ce8c
Fix the conflict with updated calibration
quangptt0910 Jan 17, 2026
a25ed09
Changed the accuracy graph and made some extra notes at the others
nerikebosch Jan 17, 2026
e1a19f3
Add Doc and some tests
quangptt0910 Jan 17, 2026
1733def
Adjust some config for webcam
quangptt0910 Jan 17, 2026
8d78d5d
Adjust the webcam
quangptt0910 Jan 17, 2026
cea7833
Adjust the ideal to match mediaPipe
quangptt0910 Jan 17, 2026
0672934
Add config facelandmarker
quangptt0910 Jan 17, 2026
8c1b6e6
Adjust config
quangptt0910 Jan 17, 2026
98ce81f
Merge branch 'develop' of https://github.com/quangptt0910/SaccadeSync…
nerikebosch Jan 17, 2026
0c0298a
Started comparing the results with research papers
nerikebosch Jan 17, 2026
23d4c6e
Added links to research papers
nerikebosch Jan 17, 2026
2e103e9
Added docs for results, instructions and game page
nerikebosch Jan 17, 2026
3034651
Added unittests for gametest, instructions and results
nerikebosch Jan 17, 2026
2e502d3
Removed navbar from the gametest screen
nerikebosch Jan 17, 2026
516a7ad
Add doc and test for gameTest
quangptt0910 Jan 17, 2026
ca26b44
Merge pull request #12 from quangptt0910/feature/fix-accuracy
nerikebosch Jan 17, 2026
c098b93
Merge branch 'develop' of https://github.com/quangptt0910/SaccadeSync…
nerikebosch Jan 17, 2026
5c9aa66
Added some thresholds as const
nerikebosch Jan 17, 2026
6ce3e52
Merge pull request #13 from quangptt0910/feature/results-page
nerikebosch Jan 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .env.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Test Environment Variables
# Copy this file to .env.test.local and fill in values for local testing

REACT_APP_FIREBASE_API_KEY=test-api-key
REACT_APP_FIREBASE_AUTH_DOMAIN=test.firebaseapp.com
REACT_APP_FIREBASE_PROJECT_ID=test-project
REACT_APP_FIREBASE_STORAGE_BUCKET=test.appspot.com
REACT_APP_FIREBASE_MESSAGING_SENDER_ID=123456789
REACT_APP_FIREBASE_APP_ID=1:123:web:abc
REACT_APP_FIREBASE_MEASUREMENT_ID=G-TEST123
112 changes: 112 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
name: Test Suite

on:
pull_request:
branches:
- main
- master
- develop

jobs:
test:
name: Run Tests
runs-on: ubuntu-latest

strategy:
matrix:
node-version: [18.x, 20.x]

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'

- name: Install dependencies
run: npm install

- name: Run tests with coverage
id: run-tests
run: |
set +e
npm run test:ci 2>&1 | tee test-output.txt
TEST_EXIT_CODE=$?
set -e

# Extract test results - look for "Tests: X passed, Y total" pattern
if grep -q "Tests:" test-output.txt; then
PASSED_TESTS=$(grep "Tests:" test-output.txt | grep -oE '[0-9]+ passed' | grep -oE '[0-9]+' | tail -1 || echo "0")
TOTAL_TESTS=$(grep "Tests:" test-output.txt | grep -oE '[0-9]+ total' | grep -oE '[0-9]+' | tail -1 || echo "0")
else
PASSED_TESTS="0"
TOTAL_TESTS="0"
fi

echo "Total Tests: $TOTAL_TESTS"
echo "Passed: $PASSED_TESTS"
echo "test_exit_code=$TEST_EXIT_CODE" >> $GITHUB_OUTPUT
echo "passed=$PASSED_TESTS" >> $GITHUB_OUTPUT
echo "total=$TOTAL_TESTS" >> $GITHUB_OUTPUT

if [ "$TOTAL_TESTS" -gt "0" ] && [ "$PASSED_TESTS" -gt "0" ]; then
PASS_RATE=$(awk "BEGIN {printf \"%.2f\", ($PASSED_TESTS / $TOTAL_TESTS) * 100}")
echo "Pass Rate: $PASS_RATE%"
echo "pass_rate=$PASS_RATE" >> $GITHUB_OUTPUT

# Check if pass rate is >= 90%
PASS_CHECK=$(awk "BEGIN {print ($PASS_RATE >= 90) ? 1 : 0}")
if [ "$PASS_CHECK" -eq "1" ]; then
echo "✅ Quality gate passed! Pass rate: $PASS_RATE%"
else
echo "❌ Quality gate failed! Pass rate: $PASS_RATE% (required: 90%)"
exit 1
fi
else
# If we can't determine test count, use exit code
if [ $TEST_EXIT_CODE -eq 0 ]; then
echo "✅ All tests passed!"
else
echo "❌ Tests failed!"
exit 1
fi
fi
env:
CI: true
REACT_APP_FIREBASE_API_KEY: ${{ secrets.FIREBASE_API_KEY }}
REACT_APP_FIREBASE_AUTH_DOMAIN: ${{ secrets.FIREBASE_AUTH_DOMAIN }}
REACT_APP_FIREBASE_PROJECT_ID: ${{ secrets.FIREBASE_PROJECT_ID }}
REACT_APP_FIREBASE_STORAGE_BUCKET: ${{ secrets.FIREBASE_STORAGE_BUCKET }}
REACT_APP_FIREBASE_MESSAGING_SENDER_ID: ${{ secrets.FIREBASE_MESSAGING_SENDER_ID }}
REACT_APP_FIREBASE_APP_ID: ${{ secrets.FIREBASE_APP_ID }}
REACT_APP_FIREBASE_MEASUREMENT_ID: ${{ secrets.FIREBASE_MEASUREMENT_ID }}

- name: Upload coverage report
uses: actions/upload-artifact@v4
if: always()
with:
name: coverage-report-${{ matrix.node-version }}
path: coverage/
retention-days: 7

# This job aggregates test results and blocks merge if < 90% pass rate
quality-gate:
name: Quality Gate Check
runs-on: ubuntu-latest
needs: test
if: always()

steps:
- name: Check test results
run: |
if [ "${{ needs.test.result }}" == "failure" ]; then
echo "❌ Tests did not pass the 90% threshold. Merge is blocked."
exit 1
elif [ "${{ needs.test.result }}" == "cancelled" ]; then
echo "⚠️ Tests were cancelled."
exit 1
fi
echo "✅ All quality gates passed. Ready to merge!"
Loading