diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 1a4ffcf..41ce426 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -16,45 +16,36 @@ jobs:
with:
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
- - name: Setup PHP with PECL extension
- uses: shivammathur/setup-php@v2
- with:
- php-version: '8.0'
- extensions: curl, json, :opcache, xdebug, mbstring, xdebug
- coverage: xdebug
- ini-values: memory_limit=-1,error_reporting=-1,log_errors_max_len=0,zend.assertions=1,assert.exception=1,xdebug.show_exception_trace=0,suhosin.executor.include.whitelist=phar,xdebug.mode="develop,coverage"
-
- name: Validate composer.json and composer.lock
run: composer validate --strict
- - name: Get Composer Cache Directory
- id: composer-cache
- run: |
- echo "::set-output name=dir::$(composer config cache-files-dir)"
-
- - uses: actions/cache@v3
- with:
- path: ${{ steps.composer-cache.outputs.dir }}
- key: ${{ runner.os }}-dev-composer-${{ hashFiles('**/composer.lock') }}
- restore-keys: |
- ${{ runner.os }}-dev-composer-
-
- name: Install dependencies
uses: php-actions/composer@v6
with:
command: install
dev: yes
- php_version: 8.0
+ php_version: 7.4
version: 2
- args: --ignore-platform-reqs --prefer-dist -no --no-progress
+ args: --ignore-platform-reqs --prefer-dist -no --no-progress --no-plugins
+
+ - name: Create .env for docker
+ run: |
+ rm -f tests/utils/.env
+ echo "USER_ID=$(id -u)" >> tests/utils/.env
+ echo "GROUP_ID=$(id -g)" >> tests/utils/.env
+
+ - name: Build test container
+ run: docker-compose build tests
- name: Run tests
- run: composer test
+ run: |
+ docker-compose run --rm tests --all
+ docker-compose down
- name: Compress HTML code coverage
run: |
cd build/
- tar -czf /tmp/code-coverage-html.tar.gz code-coverage-html/
+ tar -czf /tmp/code-coverage-html.tar.gz html/
- name: Upload HTML code coverage report
uses: actions/upload-artifact@v2
@@ -67,20 +58,42 @@ jobs:
uses: actions/upload-artifact@v2
with:
name: code-coverage-clover
- path: build/code-coverage-clover.xml
+ path: build/clover.xml
retention-days: 1
- - name: Upload PHPUnit junit report
+ - name: Upload PHP-formatted code coverage report
uses: actions/upload-artifact@v2
with:
- name: phpunit-junit
- path: build/junit.xml
+ name: code-coverage-php
+ path: build/coverage.cov
retention-days: 1
- - name: Fix code coverage paths
+# Currently unavailable
+# - name: Upload PHPUnit junit report
+# uses: actions/upload-artifact@v2
+# with:
+# name: phpunit-junit
+# path: build/junit.xml
+# retention-days: 1
+
+ - name: Upload OXID metrics report
+ uses: actions/upload-artifact@v2
+ with:
+ name: metrics
+ path: build/metrics.txt
+ retention-days: 1
+
+ - name: Upload OXID pdepend report
+ uses: actions/upload-artifact@v2
+ with:
+ name: pdepend
+ path: build/pdepend.xml
+ retention-days: 1
+
+ - name: Fix code coverage paths
+ # Currently unavailable: sed -i 's@'$GITHUB_WORKSPACE'@/github/workspace/@g' build/junit.xml
run: |
- sed -i 's@'$GITHUB_WORKSPACE'@/github/workspace/@g' build/code-coverage-clover.xml
- sed -i 's@'$GITHUB_WORKSPACE'@/github/workspace/@g' build/junit.xml
+ sed -i 's@/app/@/github/workspace/@g' build/clover.xml
- name: SonarCloud Scan
uses: SonarSource/sonarcloud-github-action@master
@@ -88,6 +101,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} # Needed to get PR information, if any
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
with:
+ # Currently unavailable: -Dsonar.php.tests.reportPath=build/junit.xml
args: >
-Dsonar.projectKey=MakairaIO_oxid-connect-essential
-Dsonar.organization=makairaio
@@ -95,8 +109,7 @@ jobs:
-Dsonar.sources=src/
-Dsonar.tests=tests/
-Dsonar.sourceEncoding=UTF-8
- -Dsonar.php.tests.reportPath=build/junit.xml
- -Dsonar.php.coverage.reportPaths=build/code-coverage-clover.xml
+ -Dsonar.php.coverage.reportPaths=build/clover.xml
release:
name: Create a new release
@@ -110,24 +123,12 @@ jobs:
fetch-depth: 0
persist-credentials: false
- - name: Get Composer Cache Directory
- id: composer-cache
- run: |
- echo "::set-output name=dir::$(composer config cache-files-dir)"
-
- - uses: actions/cache@v3
- with:
- path: ${{ steps.composer-cache.outputs.dir }}
- key: ${{ runner.os }}-nodev-composer-${{ hashFiles('**/composer.lock') }}
- restore-keys: |
- ${{ runner.os }}-nodev-composer-
-
- name: Install dependencies
uses: php-actions/composer@v6
with:
command: install
- dev: no
- php_version: 8.0
+ dev: yes
+ php_version: 7.4
version: 2
args: --ignore-platform-reqs --prefer-dist -no --no-progress
diff --git a/.gitignore b/.gitignore
index 6c299b6..3a013ac 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,5 @@
!/build/.gitkeep
/.idea
/composer.lock
+/tests/reports/
+tests/utils/.env
diff --git a/phpunit.xml b/phpunit.xml
index fdbfe58..ee1eb33 100644
--- a/phpunit.xml
+++ b/phpunit.xml
@@ -10,18 +10,4 @@
tests/
-
-
-
- src/
-
-
-
-
-
-
-
-
-
-
diff --git a/tests/utils/Dockerfile b/tests/utils/Dockerfile
index 29c5ce1..17882f8 100644
--- a/tests/utils/Dockerfile
+++ b/tests/utils/Dockerfile
@@ -2,9 +2,10 @@ FROM marmaladegmbh/php:7.4
COPY tests/utils/composer.test.json /app/composer.json
COPY tests/utils/config.test.php /app/
+COPY tests/utils/php.test.ini /usr/local/etc/php/conf.d/zz-custom.ini
COPY . /app/modules/oxid-connect-essential/
COPY tests/utils/install-mysql-client /usr/bin/
-COPY tests/utils/default-command.sh /
+COPY tests/utils/run-tests /usr/local/bin/run-tests
COPY tests/utils/generated-services-updater /app/bin/
WORKDIR /app
@@ -12,14 +13,18 @@ WORKDIR /app
ENV PARTIAL_MODULE_PATHS=makaira/oxid-connect-essential
RUN install-mysql-client dev && \
- apt install -y libmagickwand-6.q16-6 && \
+ apt-get install -y libmagickwand-6.q16-6 && \
ln -snf /bin/composer2 /bin/composer && \
- /bin/composer install -nq && \
+ /bin/composer install --no-progress -nq && \
echo "include __DIR__ . '/../config.test.php';" >> source/config.inc.php && \
- rm -rf app/modules/ && \
- apt autoremove -yqq --purge && \
- apt clean && \
- rm -rf /var/lib/apt/lists/*
+ apt-get autoremove -yqq --purge && \
+ apt-get clean && \
+ rm -rf /var/lib/apt/lists/* && \
+ . /app/modules/oxid-connect-essential/tests/utils/.env && \
+ chown -R $USER_ID:$GROUP_ID . && \
+ rm -f vendor/makaira/oxid-connect-essential && \
+ rm -rf source/modules/makaira/oxid-connect-essential && \
+ bin/generated-services-updater
-
-CMD /default-command.sh
+ENTRYPOINT ["run-tests"]
+CMD ["--unit"]
diff --git a/tests/utils/composer.test.json b/tests/utils/composer.test.json
index d5084ef..7b93933 100644
--- a/tests/utils/composer.test.json
+++ b/tests/utils/composer.test.json
@@ -51,12 +51,16 @@
"oe:ide-helper:generate": [
"if [ -f ./vendor/bin/oe-eshop-ide_helper ]; then oe-eshop-ide_helper; fi"
],
- "test": [
- "@dev:update",
+ "run-tests": [
+ "runtests"
+ ],
+ "run-tests-coverage": [
"runtests-coverage"
],
+ "run-metrics": [
+ "runmetrics"
+ ],
"dev:update": [
- "@dev:remove-mod",
"@dev:update-mod",
"@dev:activate-mod",
"@dev:clear-tmp"
@@ -64,12 +68,6 @@
"dev:clear-tmp": [
"find source/tmp/ -type f -delete"
],
- "dev:remove-mod": [
- "oe-console oe:module:deactivate makaira_oxid-connect-essential",
- "rm -f vendor/makaira/oxid-connect-essential",
- "rm -rf source/modules/makaira/oxid-connect-essential",
- "@php bin/generated-services-updater"
- ],
"dev:activate-mod": [
"oe-console oe:module:activate makaira_oxid-connect-essential"
],
diff --git a/tests/utils/default-command.sh b/tests/utils/default-command.sh
deleted file mode 100755
index 516e7b6..0000000
--- a/tests/utils/default-command.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/bash
-
-composer2 test
-
-c2exit=$?
-
-test -f /app/source/log/oxideshop.log && cat /app/source/log/oxideshop.log
-
-exit $c2exit
diff --git a/tests/utils/docker-compose.yml b/tests/utils/docker-compose.yml
index 65573a1..f59b1ec 100644
--- a/tests/utils/docker-compose.yml
+++ b/tests/utils/docker-compose.yml
@@ -1,15 +1,16 @@
services:
- shop:
+ tests:
build:
context: ../../
dockerfile: ./tests/utils/Dockerfile
volumes:
- "../../:/app/modules/oxid-connect-essential"
- - "./config.test.php:/app/config.test.php:ro"
+ - "/etc/passwd:/etc/passwd:ro"
+ - "/etc/group:/etc/group:ro"
depends_on:
- db
+ user: ${USER_ID:?You must set the user ID in the .env file}:${GROUP_ID:?You must set the group ID in the .env file}
environment:
- COMPOSE_PROJECT_NAME: ${COMPOSE_PROJECT_NAME:-Foo}
APP_DATA: "/app_data"
PHPINI_MEMORY_LIMIT: 1G
PHPINI_SESSION__GC_MAXLIFETIME: "3600"
@@ -24,6 +25,9 @@ services:
PHPINI_XDEBUG__VAR_DISPLAY_MAX_DATA: 1024
PHPINI_XDEBUG__VAR_DISPLAY_MAX_DEPTH: 10
PHP_IDE_CONFIG: serverName=oxid64-tests.${DOMAIN:-makaira.vm}
+ extra_hosts:
+ - "host.docker.internal:host-gateway"
+ restart: "no"
db:
image: mysql:5.7
@@ -45,3 +49,4 @@ services:
MYSQL_DATABASE: oxid
MYSQL_USER: oxid
MYSQL_PASSWORD: oxid
+ restart: "no"
diff --git a/tests/utils/lint-php-files b/tests/utils/lint-php-files
new file mode 100755
index 0000000..6240118
--- /dev/null
+++ b/tests/utils/lint-php-files
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+files=$(find ./src/ -iname '*.php')
+for f in $files; do
+ php -l $f
+done
diff --git a/tests/utils/php.test.ini b/tests/utils/php.test.ini
new file mode 100644
index 0000000..7d6b953
--- /dev/null
+++ b/tests/utils/php.test.ini
@@ -0,0 +1,18 @@
+zend_extension=xdebug.so
+memory_limit=-1
+max_execution_time=0
+
+[session]
+session.gc_maxliftime=3600
+
+[xdebug]
+xdebug.start_with_request=trigger
+xdebug.output_dir=/app_data
+xdebug.client_host=host.docker.internal
+xdebug.client_port=9000
+xdebug.cli_color=1
+xdebug.max_nesting_level=512
+xdebug.var_display_max_children=256
+xdebug.var_display_max_data=1024
+xdebug.var_display_max_depth=10
+xdebug.mode=debug,coverage
diff --git a/tests/utils/run-tests b/tests/utils/run-tests
new file mode 100755
index 0000000..000c59f
--- /dev/null
+++ b/tests/utils/run-tests
@@ -0,0 +1,77 @@
+#!/bin/bash
+
+set -e
+
+cleanup() {
+ test -f source/log/oxideshop.log && cat source/log/oxideshop.log
+}
+
+trap cleanup EXIT
+
+run_tests=0
+run_tests_coverage=0
+run_metrics=0
+update=1
+
+# Call getopt to validate the provided input.
+options=$(getopt -o umc -l unit -l metrics -l code-coverage -l all -l no-update -- "$@")
+[ $? -eq 0 ] || {
+ echo "Incorrect options provided"
+ exit 1
+}
+eval set -- "$options"
+while true; do
+ case "$1" in
+ -u | --unit) run_tests=1; shift ;;
+ -m | --metrics) run_metrics=1; shift ;;
+ -c | --code-coverage) run_metrics=1; run_tests_coverage=1; shift ;;
+ --all) run_tests=1; run_tests_coverage=1; run_metrics=1; shift ;;
+ --no-update) update=0; shift ;;
+ --) shift; break ;;
+ *) break ;;
+ esac
+ shift
+done
+
+# Update the module in OXID
+if [ $update -eq 1 ]; then
+ composer dev:update
+fi
+
+mkdir -p odules/oxid-connect-essential/build/
+
+set +e
+
+# Run PHPUnit tests
+composer_exit=0
+if [ $run_tests -eq 1 ]; then
+ sub_command=""
+ if [ $run_tests_coverage -eq 1 ]; then
+ sub_command="-coverage"
+ fi
+ composer "run-tests$sub_command"
+ composer_exit=$?
+fi
+
+if [ -d source/modules/makaira/oxid-connect-essential/tests/reports ]; then
+ cp -rf source/modules/makaira/oxid-connect-essential/tests/reports/* modules/oxid-connect-essential/build/
+fi
+
+if [ $composer_exit -ne 0 ]; then
+ exit $composer_exit
+fi
+
+# Run metrics tests
+composer_exit=0
+if [ $run_metrics -eq 1 ]; then
+ composer "run-metrics"
+ composer_exit=$?
+fi
+
+if [ -d source/modules/makaira/oxid-connect-essential/tests/reports ]; then
+ cp -rf source/modules/makaira/oxid-connect-essential/tests/reports/* modules/oxid-connect-essential/build/
+fi
+
+if [ $composer_exit -ne 0 ]; then
+ exit $composer_exit
+fi