fix(perfexcrm module): align version to 3.0.1, unify entrypoint, and harden routes/views

- Bump DESK_MOLONI version to 3.0.1 across module
- Normalize hooks to after_client_* and instantiate PerfexHooks safely
- Fix OAuthController view path and API client class name
- Add missing admin views for webhook config/logs; adjust view loading
- Harden client portal routes and admin routes mapping
- Make Dashboard/Logs/Queue tolerant to optional model methods
- Align log details query with existing schema; avoid broken joins

This makes the module operational in Perfex (admin + client), reduces 404s,
and avoids fatal errors due to inconsistent tables/methods.
This commit is contained in:
Emanuel Almeida
2025-09-11 17:38:45 +01:00
parent 5e5102db73
commit c19f6fd9ee
193 changed files with 59298 additions and 638 deletions

127
phpunit.xml Normal file
View File

@@ -0,0 +1,127 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.6/phpunit.xsd"
bootstrap="tests/bootstrap.php"
cacheResultFile="tests/.phpunit.result.cache"
executionOrder="depends,defects"
forceCoversAnnotation="true"
beStrictAboutCoversAnnotation="true"
beStrictAboutOutputDuringTests="true"
beStrictAboutTodoAnnotatedTests="true"
convertDeprecationsToExceptions="true"
failOnRisky="true"
failOnWarning="true"
verbose="true"
colors="true">
<!-- Test Suites -->
<testsuites>
<testsuite name="Unit">
<directory suffix="Test.php">tests/unit</directory>
</testsuite>
<testsuite name="Integration">
<directory suffix="Test.php">tests/integration</directory>
</testsuite>
<testsuite name="Feature">
<directory suffix="Test.php">tests/feature</directory>
</testsuite>
</testsuites>
<!-- Coverage Configuration -->
<coverage cacheDirectory="tests/.phpunit.cache"
processUncoveredFiles="true">
<include>
<directory suffix=".php">src</directory>
<directory suffix=".php">libraries</directory>
<directory suffix=".php">models</directory>
<directory suffix=".php">controllers</directory>
<directory suffix=".php">helpers</directory>
</include>
<exclude>
<directory>vendor</directory>
<directory>tests</directory>
<file>config/autoload.php</file>
</exclude>
<report>
<html outputDirectory="coverage-html"/>
<text outputFile="coverage.txt"/>
<xml outputDirectory="coverage-xml"/>
</report>
</coverage>
<!-- Logging -->
<logging>
<junit outputFile="tests/logs/junit.xml"/>
<teamcity outputFile="tests/logs/teamcity.txt"/>
<testdoxHtml outputFile="tests/logs/testdox.html"/>
<testdoxText outputFile="tests/logs/testdox.txt"/>
</logging>
<!-- PHP Configuration -->
<php>
<!-- Environment Variables -->
<env name="APP_ENV" value="testing"/>
<env name="APP_DEBUG" value="true"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
<!-- Desk-Moloni Test Configuration -->
<env name="DESK_MOLONI_API_BASE_URL" value="https://api.moloni.pt/v1/"/>
<env name="DESK_MOLONI_OAUTH_BASE_URL" value="https://www.moloni.pt/v1/"/>
<env name="DESK_MOLONI_TEST_MODE" value="true"/>
<env name="DESK_MOLONI_DEBUG" value="true"/>
<!-- Database Configuration -->
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
<!-- Redis Configuration for Testing -->
<env name="REDIS_HOST" value="127.0.0.1"/>
<env name="REDIS_PORT" value="6379"/>
<env name="REDIS_PASSWORD" value=""/>
<env name="REDIS_DATABASE" value="15"/>
<!-- Test API Credentials (Mock) -->
<env name="MOLONI_CLIENT_ID" value="test_client_id"/>
<env name="MOLONI_CLIENT_SECRET" value="test_client_secret"/>
<env name="MOLONI_USERNAME" value="test@example.com"/>
<env name="MOLONI_PASSWORD" value="test_password"/>
<env name="MOLONI_COMPANY_ID" value="123456"/>
<!-- Performance Testing -->
<env name="PERFORMANCE_TEST_ITERATIONS" value="100"/>
<env name="PERFORMANCE_TEST_TIMEOUT" value="30"/>
<!-- Constants -->
<const name="PHPUNIT_TESTSUITE" value="true"/>
</php>
<!-- Extensions -->
<extensions>
<!-- Mock Server Extension for API Testing -->
<extension class="PHPUnit\Extensions\MockWebServer\MockWebServerExtension"/>
</extensions>
<!-- Listeners -->
<listeners>
<!-- Performance Listener -->
<listener class="DeskMoloni\Tests\Listeners\PerformanceListener"/>
<!-- Memory Usage Listener -->
<listener class="DeskMoloni\Tests\Listeners\MemoryUsageListener"/>
</listeners>
<!-- Groups -->
<groups>
<include>
<group>unit</group>
<group>integration</group>
<group>feature</group>
</include>
<exclude>
<group>slow</group>
<group>network</group>
<group>external</group>
</exclude>
</groups>
</phpunit>