Skip to content

Conversation

@adunsulag
Copy link

Testing ci

Copilot AI and others added 29 commits December 22, 2025 18:16
openemr#9960)

* Initial plan

* Update all xl() callsites to remove deprecated mode, prepend, append parameters

Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>

* Remove deprecated mode, prepend, append parameters from xl() and wrapper functions

Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>

* Use sprintf instead of string concatenation with escaped quotes

Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>

* Fix sprintf formatting in dispense_drug.php for better clarity

Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>

* Combine sprintf calls in dispense_drug.php for better performance

Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>

* Add PHPDoc and type declarations to xl() and wrapper functions

Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>

* Refactor xl_* wrapper functions to use ternaries and add PHPDoc blocks

Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>

* Move PHPDoc block inside if block for proper parsing

Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>

* Refactor to use ternary operators for cleaner code

Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>
…rrays, add type declarations (openemr#9966)

* Initial plan

* refactor(library/date_functions.php): replace switch with match, add type declarations and standard docblock

Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>

* refactor: address code review feedback - remove unnecessary cast and simplify dow formatting

Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>

* refactor: use arrays instead of match for days and months lookups

Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>

* refactor: simplify array approach - call xl() on lookup result instead of each element

Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>

* perf: use static arrays to avoid repeated array creation on each function call

Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>

* refactor: combine match arms for languages with same format and extract date variables

Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>

* style: improve readability by placing each language on separate line in match

Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>
trying to test for property oblect on an array is a no no for PHP 8.0+
…ate.php (openemr#9968)

* Initial plan

* fix(template): correct undefined $filename variable to $form_filename in download_template.php

Changed line 361 from using undefined $filename to $form_filename.
This fixes the bug where $ext was always empty, preventing ODT-specific
line break processing and potentially incorrect MIME type detection.

Fixes issue where LBF textarea line breaks were lost in ODT generation.

Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>
* chore: update changelog for 7.0.4

* context manager, search and add providers with npi

---------

Co-authored-by: stephen waite <stephen.waite@cmsvt.com>
* Refactor Portal CCDA actions
Remove API request for CCDA view to use CCM services.

* refactor for new portal CCD actions supplanting API request for same actions.
had goober help me ensure exceptions, translations and formatting.

* woops

* rector starting to get on my nerves. local want string cast but not get. local comes from current master

* I refactored Laminas Zip to use Ziparchive similar to CdaDocument class. I could do some consolation and may do yet.
I had claude run through and satirize to make our security gods happy.

* satisfy new composer checker test. Trying to figure out where this is going.
Shouldn't this be included in composer for the entire namespace?
)

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>
* chore(rector): CallUserFuncArrayToVariadicRector

* refactor(php): avoid call_user_func_array

* chore(phpstan): rule to block call_user_func*

* refactor(php): no call_user_func*

* refactor(php): rector updates
…penemr#9996)

Add the lang_cons composite index to the language translation
infrastructure so it persists across language imports:
- currentLanguage_utf8.sql: Add index to table definition
- buildLanguageDatabase.pl: Add index to generated SQL output

Fixes openemr#9985

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* perf: add in-memory translation cache

Add TranslationCache class to cache translation lookups within a request.
Key changes:

- Add TranslationCache class in src/Common/Translation/
- Add xlWarmCache() function to preload all translations
- Add 'translation_preload_cache' global setting to enable eager loading
- Modify xl() to check cache before querying database
- When cache warming is disabled, translations are cached lazily
- Update phpstan baseline for new $GLOBALS access

This eliminates repeated database queries for the same translation
within a request, and optionally eliminates all translation queries
when cache warming is enabled.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* perf: optimize translation SQL queries

- Select only needed columns instead of SELECT *
- Use USING(cons_id) for cleaner join syntax

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
- Restructure on load.
- add DOM observer
- Add Medical Devices widget to context management
* Inventory Issues
* fix invalid deleting invalid because out of scope on form load
* syntax error in dispensed medication twig template

* * add responsiveness change to edit container

* * fix search on enter key

* * add button role to rows to finder code

* fix add edit issue Show More button to correctly track state for button title state. Also include icon in button click event
add enter key capture for search in select_code. Man how many code select scripts do we need.
…oup (openemr#10001)

Bumps the development group with 1 update: [phpunit/php-code-coverage](https://github.com/sebastianbergmann/php-code-coverage).


Updates `phpunit/php-code-coverage` from 11.0.11 to 11.0.12
- [Release notes](https://github.com/sebastianbergmann/php-code-coverage/releases)
- [Changelog](https://github.com/sebastianbergmann/php-code-coverage/blob/11.0.12/ChangeLog-11.0.md)
- [Commits](sebastianbergmann/php-code-coverage@11.0.11...11.0.12)

---
updated-dependencies:
- dependency-name: phpunit/php-code-coverage
  dependency-version: 11.0.12
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [vlucas/phpdotenv](https://github.com/vlucas/phpdotenv) from 5.6.2 to 5.6.3.
- [Release notes](https://github.com/vlucas/phpdotenv/releases)
- [Commits](vlucas/phpdotenv@v5.6.2...v5.6.3)

---
updated-dependencies:
- dependency-name: vlucas/phpdotenv
  dependency-version: 5.6.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…r#10004)

Bumps the build-tools group with 1 update: [stylelint-scss](https://github.com/stylelint-scss/stylelint-scss).


Updates `stylelint-scss` from 6.13.0 to 6.14.0
- [Release notes](https://github.com/stylelint-scss/stylelint-scss/releases)
- [Changelog](https://github.com/stylelint-scss/stylelint-scss/blob/master/CHANGELOG.md)
- [Commits](stylelint-scss/stylelint-scss@v6.13.0...v6.14.0)

---
updated-dependencies:
- dependency-name: stylelint-scss
  dependency-version: 6.14.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: build-tools
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [league/csv](https://github.com/thephpleague/csv) from 9.27.1 to 9.28.0.
- [Release notes](https://github.com/thephpleague/csv/releases)
- [Changelog](https://github.com/thephpleague/csv/blob/master/CHANGELOG.md)
- [Commits](thephpleague/csv@9.27.1...9.28.0)

---
updated-dependencies:
- dependency-name: league/csv
  dependency-version: 9.28.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* chore(deps-dev): bump rector/rector from 2.2.14 to 2.3.0

Bumps [rector/rector](https://github.com/rectorphp/rector) from 2.2.14 to 2.3.0.
- [Release notes](https://github.com/rectorphp/rector/releases)
- [Commits](rectorphp/rector@2.2.14...2.3.0)

---
updated-dependencies:
- dependency-name: rector/rector
  dependency-version: 2.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* refactor(php): apply rector fixes

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Michael A. Smith <michael@smith-li.com>
…penemr#10008)

The xls() function used addslashes() for JavaScript escaping, which is
inadequate. All calls migrated to xlj() which uses proper js_escape().

Also removes unused translation wrapper methods from Zend modules and
adds catalog of non-standard translation function definitions.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…) (openemr#10012)

The docker-compose-lint workflow was failing with "Not enough non-option
arguments: got 0, need at least 1" because dclint expects positional file
arguments before options. The --exclude flag was consuming file paths as
its values.

Also removed the paths filter so the workflow runs on all PRs/pushes to
master and rel-* branches, ensuring compose files are always validated.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
)

The SELECT query for migrating care_teams_v1 to care_teams included
uuid without aggregating it, which is invalid SQL in strict mode.

Fixes openemr#9984

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: hungdq <hungdqde160536@fpt.edu.vn>
…mr#10016)

* Initial plan

* Fix EventDispatcherInterface type inconsistency in OEHttpKernel and Kernel

Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>
…r#10018)

Regenerate the specialized PHPStan baselines (globals, database, curl)
and remove duplicate entries from the main baseline that were causing
count mismatches.

Fixes openemr#10014

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…enemr#9741)

* Refactor manual URL parameter building to use URLSearchParams

Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>

* Refactor additional files to use URLSearchParams

Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>

* Refactor more interface files to use URLSearchParams

Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>

* Fix code review issues: remove redundant line and use params.append for CSRF tokens

Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>

* Remove AI-generated code comments from URLSearchParams refactor

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Refactor additional files to use URLSearchParams for URL parameter building

- portal/patient/scripts/app/onsiteactivityviews.js
- portal/patient/scripts/app/onsitedocuments.js
- portal/sign/assets/signer_api.js
- interface/modules/zend_modules/public/js/application/sendTo.js
- library/js/ajax_functions_writer.js
- library/js/oeUI/insurance/EditPolicyScreenController.js
- interface/modules/custom_modules/oe-module-comlink-telehealth (4 files)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Fix code review issues: use const consistently in URLSearchParams refactor

- Change var to const for URLSearchParams and related variables
- Extract inline URLSearchParams to const before use
- Rename conflicting variable names (params → urlParams/dialogParams)
- Remove unnecessary .toString() calls

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Move CSRF tokens into URLSearchParams constructor instead of using .append()

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Alphabetize URLSearchParams object properties for consistency

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: kojiromike <1566303+kojiromike@users.noreply.github.com>
Co-authored-by: Michael A. Smith <michael@smith-li.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
@codecov
Copy link

codecov bot commented Dec 30, 2025

❌ 1 Tests Failed:

Tests completed Failed Passed Skipped
1648 1 1647 56
View the top 1 failed test(s) by shortest run time
OpenEMR.Tests.Services.Modules.CareCoordination.Model.CcdaServiceDocumentRequestorTest::testSocket_get
Stack Traces | 5s run time
OpenEMR\Tests\Services\Modules\CareCoordination\Model\CcdaServiceDocumentRequestorTest::testSocket_get
Carecoordination\Model\CcdaServiceConnectionException: Connection Failed: Connection refused

.../Carecoordination/Model/CcdaServiceDocumentRequestor.php:86
.../Carecoordination/Model/CcdaServiceDocumentRequestorTest.php:30
View the full list of 1 ❄️ flaky test(s)
OpenEMR.Tests.E2e.BbCreateStaffTest::testUserAdd

Flake rate in main: 8.00% (Passed 138 times, Failed 12 times)

Stack Traces | 41.9s run time
OpenEMR\Tests\E2e\BbCreateStaffTest::testUserAdd
Facebook\WebDriver\Exception\TimeoutException: Element "//table//a[text()='foobar']" not found within 30 seconds.

.../webdriver/lib/WebDriverWait.php:71
.../panther/src/Client.php:355
.../E2e/User/UserAddTrait.php:105
.../E2e/User/UserAddTrait.php:44

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

igormukhingmailcom and others added 28 commits January 3, 2026 18:38
* fix: added missed EventAuditLogger FQCN at ReceiveHl7Results

* feat(traits): added SingletonTrait

... (a bit better version than one from waryway/php-traits-library)

* refactor: reused SingletonTrait at EventAuditLogger

* fix(test): EventAuditLoggerTest::testRecordLogItemWithEncryption

* fix(deps): removed no longer used waryway/php-traits-library
* fix: development environment fixes and a ci fix

* try again

* more
…r#10089)

Bumps the laminas group with 1 update: [laminas/laminas-loader](https://github.com/laminas/laminas-loader).


Updates `laminas/laminas-loader` from 2.11.1 to 2.12.0
- [Release notes](https://github.com/laminas/laminas-loader/releases)
- [Commits](laminas/laminas-loader@2.11.1...2.12.0)

---
updated-dependencies:
- dependency-name: laminas/laminas-loader
  dependency-version: 2.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: laminas
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…0090)

Bumps [league/oauth2-server](https://github.com/thephpleague/oauth2-server) from 8.4.3 to 8.5.5.
- [Release notes](https://github.com/thephpleague/oauth2-server/releases)
- [Changelog](https://github.com/thephpleague/oauth2-server/blob/8.5.5/CHANGELOG.md)
- [Commits](thephpleague/oauth2-server@8.4.3...8.5.5)

---
updated-dependencies:
- dependency-name: league/oauth2-server
  dependency-version: 8.5.5
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* fix(composer): validate to be strict like we have at .pre-commit-config.yaml

* fix(ci): composer validate to be strict at ci
…ect-server to 3.0.1 (openemr#8589)

* chore: upgrade lcobucci jwt

* php8 fixes

* downgrade jwt to 430

* fix returns for psr http message

* teardown clients

* typo

* reapply updates
…nemr#10106)

The pre-commit hooks now exclude vendored third-party code that is
copied from external packages, not generated by this repo's build.

Excluded directories/files (alphabetized):
- Documentation/EHI_Export/ (SchemaSpy + bower components)
- gacl/ (phpGACL library)
- interface/forms/eye_mag/js/shortcut.js-2-01-B/ (keyboard shortcut lib)
- interface/forms/questionnaire_assessments/lforms/ (LHC-Forms library)
- interface/modules/custom_modules/oe-module-comlink-telehealth/public/assets/js/dist/ (webpack build)
- interface/modules/zend_modules/public/js/lib/ (jQuery + plugins)
- interface/modules/zend_modules/public/xsd/ (HL7 CDA schemas)
- interface/modules/zend_modules/public/xsl/ (XSL transformations)
- interface/super/rules/www/js/cdr-multiselect/ (jQuery multiselect)
- library/classes/fpdf/ (FPDF library)
- library/fonts/ (Adobe font metrics files)
- library/js/{Category,Document}TreeMenu.js, SearchHighlight.js
- library/smarty_legacy/ (Smarty template engine)
- public/assets/modified/ (modified third-party libs)
- swagger/ (Swagger UI distribution)

Also added pattern for *-min.js files (alternate minification naming).

This prevents unnecessary diffs from upstream packages and avoids
potentially breaking vendored code with whitespace/formatting changes.

Fixes openemr#10105

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Bumps [monolog/monolog](https://github.com/Seldaek/monolog) from 3.9.0 to 3.10.0.
- [Release notes](https://github.com/Seldaek/monolog/releases)
- [Changelog](https://github.com/Seldaek/monolog/blob/main/CHANGELOG.md)
- [Commits](Seldaek/monolog@3.9.0...3.10.0)

---
updated-dependencies:
- dependency-name: monolog/monolog
  dependency-version: 3.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…#10099)

* refactor(phpstorm): remaining errors baseline errors extracted to separate phpstan-remaining-baseline.neon

* feat(phpstan): added phpstan-baseline composer script

... for automated updating .phpstan/phpstan-*-baseline.neon files with openemr-related rules errors

* fix(phpstan): baseline

... after running composer run phpstan-baseline

* ci(phpstan): adjusted to upload separate baseline files rather than one
* style(whitespace): consistent whitespace

- [x] remove trailing whitespace at end of line
- [x] ensure exactly one newline at end of file
- [x] ensure files use consistent linebreaks

* ci(whitespace): add GitHub Action to check whitespace

Runs pre-commit hooks (trailing-whitespace, end-of-file-fixer,
mixed-line-ending) to catch whitespace issues in PRs.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* ci(whitespace): check only changed files on PRs

On pull requests, only check files changed in the PR.
On push to branches, check all files.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* ci(whitespace): use tj-actions/changed-files for PR file detection

Replace manual git diff with tj-actions/changed-files@v47 action.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…penemr#10071)

* fix(phpstan): resolve class name collision between Procedure classes

Add namespace OpenEMR\Forms\FeeSheet\Review to fee_sheet classes to avoid
collision with the ClinicalTypes Procedure class. Also rename classes to
follow PSR naming conventions (CodeInfo, Procedure, EncounterInfo).

Fixes openemr#10046

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* refactor(fee_sheet_ajax): use array_map and ensure arrays are valid

Replace foreach loops with array_map for cleaner functional style.
Add defensive checks to ensure json_decode results are always arrays.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* refactor(FeeSheet): move classes to src/ with PSR-4 autoloading and add unit tests

- Move CodeInfo, Procedure, EncounterInfo classes to src/Forms/FeeSheet/Review/
- Split into separate files following PSR-4 conventions
- Add 13 unit tests for the FeeSheet Review classes
- Remove obsolete require_once statements
- Update PHPStan baseline to remove stale entries
- Add check_code_set_filters mock to isolated test bootstrap

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…penemr#10059)

Add @method annotations to oeHttp class to document static methods
forwarded via __callStatic to oeHttpRequest. This allows PHPStan to
understand the dynamic method forwarding.

Also add require_once statements to codes.php for ClinicalTypes
class dependencies.

Changes:
- Add @method annotations to oeHttp for get, post, put, patch, delete, etc.
- Add require_once for Allergy, Communication, Diagnosis, etc. in codes.php
- Remove 5 staticMethod.notFound entries from baseline

Fixes openemr#10058

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…penemr#10116)

* fix(health): skip auth for readyz endpoint to prevent login redirect

Set $ignoreAuth = true before loading globals.php so the /meta/health/readyz
endpoint returns JSON health status instead of redirecting to login page.
This makes the endpoint suitable for Docker/Kubernetes readiness probes.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* test(health): add API tests for health endpoints

Adds tests to verify /meta/health/readyz and /meta/health/livez
endpoints return JSON responses without requiring authentication.

The readyz test specifically checks for the regression in openemr#10115
where the endpoint was redirecting to login instead of returning
health status.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…0062)

Remove unused constructor parameters from 15 classes:
- Form classes: remove unused $_prefix parameter
- Library classes: remove unused $prefix parameter
- SimpleRouter: remove unused class
- Module classes: remove unused $type, $moduleDirectoryName, $dbAdapter, $name

Fixes openemr#10061

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* chore(globals): replace $GLOBALS with OEGlobalsBag

* chore(globals): replace $srcdir with $globalsBag->get('srcdir').

* chore(globals): replace $GLOBALS with GlobalsBag

* chore(globals): replace $GLOBALS with GlobalsBag

* chore(globals): small cleanup

* chore(globals): small cleanup

* chore(globals): getBoolean improvements

* feat(globals): add getKernel and setKernel to OEGGlobalsBag, and replace usage in Portal

* chore(globals): add using compatibilityMode for all OEGlobalsBag usage in the Portal

* fix(globals): fix issue using OEGlobalsBag before autoload.

* chore(rector): fix rector complains

* chore(kernel): remove get and set Kernel from OEGlobalsBag.php and the Portal files

* chore(phpstan): rebuild of phpstan-globals-baseline.neon

* chore(phpstan): new phpstan-remaining-baseline.neon after cleanup
- Remove unused SimpleRouter.php (dead code)
- Make MenuRole abstract with new MenuRoleInterface
- Fix ICache::Set() docblock: @return variant → @return mixed
- Fix Phreezer::GetPrimaryKeyMap() docblock: @return KeyMap|null
- Remove deprecated Serializable interface from Phreezable and Reporter
- Add SerializableTrait with __serialize()/__unserialize() magic methods
- Fix Phreezer::SetCache() to use serialize() function instead of method

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* test(js): add jsPDF integration tests for Fax/SMS module

Add Jest tests to verify jsPDF API compatibility used by the
convertImagesToPdf function in messageUI.php. These tests will
help catch breaking changes during jsPDF version upgrades.

- pdf-utils.test.js: Unit tests with mocked jsPDF
- jspdf-integration.test.js: Integration tests with real jsPDF library

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* test: add intentionally failing test for CI sanity check

* test: remove intentional failure after CI sanity check passed

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
The php-fpm dockers were failing on the node ccda tests.
Fixes openemr#10022
Implemented a phpunit test for verifying certification data didn't
change.  I went with Alice who is the most comprehensive test patient
for certification.  I could do Happy Child and Jeremy but I think this
is sufficient without us going and implementing the entire ETT test
suite for onc certification. If someone doesn't have the private files
test suite and attempts to run the certification suite it just skips the
test.

I also implemented a much faster test that verifies the node serveccda.js
without requiring that we work on the certification test data set.  It
uses the OpenEMR xml generated CCDA file that is sent to the serveccda
which formats it to the ccda specification format.  This verifies that
the node server gets started and that it properly generates the correct
xml file.

Fixes openemr#9877
The serveccda.js was seg faulting due to invalid node version 20 when
version 22 is now required for package dependencies.  I updated the
version.  I left it at 8.3 which is what inferno has been running on.
We could bump it up to 8.4 if we wanted to in the future.
On the CI engine the OPENEMR_SETTINGS_ flag does not get set as
openemr.sh is skipped as part of the ci setup with the setGlobalSettings
function call.

Had to add it into the ci/ciLibrary.sources in order to get the setting
to be enabled for the CI engine.
@adunsulag adunsulag force-pushed the feat-openemr-9877-ccda-tests branch from 15fec31 to 19f40d8 Compare January 6, 2026 20:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants