From 48be62065096458094b60642ec67350b0bb20a8c Mon Sep 17 00:00:00 2001 From: Belisoful Date: Fri, 8 May 2026 11:37:27 +0000 Subject: [PATCH 1/4] JS unit tests - Github CI job, Minimal npm, eslint JS linting, vitest JS unit tests --- .github/workflows/prado.yml | 21 + .gitignore | 5 + .nvmrc | 1 + eslint.config.js | 79 + package.json | 21 + .../js/activecontrols/activecontrols.test.js | 1032 +++++++++++ .../activecontrols/activefileupload.test.js | 577 ++++++ tests/js/activecontrols/ajax.test.js | 218 +++ tests/js/activecontrols/inlineeditor.test.js | 749 ++++++++ tests/js/adapters/accordion.js | 20 + tests/js/adapters/activecontrols.js | 57 + tests/js/adapters/activedatepicker.js | 23 + tests/js/adapters/activefileupload.js | 25 + tests/js/adapters/ajax.js | 24 + tests/js/adapters/colorpicker.js | 22 + tests/js/adapters/controls.js | 45 + tests/js/adapters/datepicker.js | 21 + tests/js/adapters/htmlarea.js | 37 + tests/js/adapters/htmlarea5.js | 37 + tests/js/adapters/inlineeditor.js | 25 + tests/js/adapters/keyboard.js | 20 + tests/js/adapters/logger.js | 27 + tests/js/adapters/prado-core.js | 30 + tests/js/adapters/ratings.js | 20 + tests/js/adapters/slider.js | 20 + tests/js/adapters/tabpanel.js | 20 + tests/js/adapters/validator.js | 25 + tests/js/controls/accordion.test.js | 481 +++++ tests/js/controls/colorpicker.test.js | 761 ++++++++ tests/js/controls/controls.test.js | 1469 +++++++++++++++ tests/js/controls/htmlarea.test.js | 252 +++ tests/js/controls/htmlarea5.test.js | 263 +++ tests/js/controls/keyboard.test.js | 431 +++++ tests/js/controls/slider.test.js | 952 ++++++++++ tests/js/controls/tabpanel.test.js | 455 +++++ tests/js/datepicker/activedatepicker.test.js | 698 ++++++++ tests/js/datepicker/datepicker.test.js | 1593 +++++++++++++++++ tests/js/debug-inline.test.js | 31 + tests/js/helpers/loadScript.js | 42 + tests/js/logger/logger.test.js | 979 ++++++++++ tests/js/prado/core.test.js | 32 + tests/js/prado/date.test.js | 174 ++ tests/js/prado/element.test.js | 326 ++++ tests/js/prado/string.test.js | 240 +++ tests/js/ratings/ratings.test.js | 723 ++++++++ tests/js/validator/validation.test.js | 349 ++++ vitest.config.js | 19 + 47 files changed, 13471 insertions(+) create mode 100644 .nvmrc create mode 100644 eslint.config.js create mode 100644 package.json create mode 100644 tests/js/activecontrols/activecontrols.test.js create mode 100644 tests/js/activecontrols/activefileupload.test.js create mode 100644 tests/js/activecontrols/ajax.test.js create mode 100644 tests/js/activecontrols/inlineeditor.test.js create mode 100644 tests/js/adapters/accordion.js create mode 100644 tests/js/adapters/activecontrols.js create mode 100644 tests/js/adapters/activedatepicker.js create mode 100644 tests/js/adapters/activefileupload.js create mode 100644 tests/js/adapters/ajax.js create mode 100644 tests/js/adapters/colorpicker.js create mode 100644 tests/js/adapters/controls.js create mode 100644 tests/js/adapters/datepicker.js create mode 100644 tests/js/adapters/htmlarea.js create mode 100644 tests/js/adapters/htmlarea5.js create mode 100644 tests/js/adapters/inlineeditor.js create mode 100644 tests/js/adapters/keyboard.js create mode 100644 tests/js/adapters/logger.js create mode 100644 tests/js/adapters/prado-core.js create mode 100644 tests/js/adapters/ratings.js create mode 100644 tests/js/adapters/slider.js create mode 100644 tests/js/adapters/tabpanel.js create mode 100644 tests/js/adapters/validator.js create mode 100644 tests/js/controls/accordion.test.js create mode 100644 tests/js/controls/colorpicker.test.js create mode 100644 tests/js/controls/controls.test.js create mode 100644 tests/js/controls/htmlarea.test.js create mode 100644 tests/js/controls/htmlarea5.test.js create mode 100644 tests/js/controls/keyboard.test.js create mode 100644 tests/js/controls/slider.test.js create mode 100644 tests/js/controls/tabpanel.test.js create mode 100644 tests/js/datepicker/activedatepicker.test.js create mode 100644 tests/js/datepicker/datepicker.test.js create mode 100644 tests/js/debug-inline.test.js create mode 100644 tests/js/helpers/loadScript.js create mode 100644 tests/js/logger/logger.test.js create mode 100644 tests/js/prado/core.test.js create mode 100644 tests/js/prado/date.test.js create mode 100644 tests/js/prado/element.test.js create mode 100644 tests/js/prado/string.test.js create mode 100644 tests/js/ratings/ratings.test.js create mode 100644 tests/js/validator/validation.test.js create mode 100644 vitest.config.js diff --git a/.github/workflows/prado.yml b/.github/workflows/prado.yml index 20050d700..545c332f0 100644 --- a/.github/workflows/prado.yml +++ b/.github/workflows/prado.yml @@ -93,6 +93,27 @@ jobs: run: | composer functionaltest + prado-js: + name: Prado JS (ESLint + Vitest) + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version-file: .nvmrc + + - name: Install npm dependencies + run: npm install + + - name: Lint JavaScript (ESLint) + run: npm run lint + + - name: Run JavaScript unit tests (Vitest) + run: npm test + prado-macos: name: Prado (macOS) runs-on: macos-latest diff --git a/.gitignore b/.gitignore index 5b09f6a32..79ce49fda 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,8 @@ atlassian-ide-plugin.xml .claude/ tests/FunctionalTests/results.dat tests/unit/Data/db/ +/node_modules +/package-lock.json # Composer stuff vendor/* @@ -24,3 +26,6 @@ vendor/* sauce_connect.log tests/unit/Data/SqlMap/sqlite/tests.db + +# Vitest cache artefacts +vitest.config.js.timestamp-* diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 000000000..209e3ef4b --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +20 diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 000000000..e4764f690 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,79 @@ +import js from '@eslint/js'; +import globals from 'globals'; + +export default [ + { + // Lint all PRADO client-side source scripts. + files: ['framework/Web/Javascripts/source/**/*.js'], + + languageOptions: { + // Current source targets ES5+ with some ES6 idioms. + ecmaVersion: 2015, + + // Scripts are concatenated / loaded as