From 032dd8166fde579d74a1640fb342fc9ad3b681f5 Mon Sep 17 00:00:00 2001
From: Rhys Lees <43909932+RhysLees@users.noreply.github.com>
Date: Fri, 28 Feb 2025 17:58:27 +0000
Subject: [PATCH 01/12] WIP
---
composer.json | 28 ++++---
phpunit.xml | 18 +++++
.../{ => Feature}/PrerenderMiddlewareTest.php | 3 +-
tests/Pest.php | 6 ++
tests/TestCase.php | 81 +++----------------
5 files changed, 57 insertions(+), 79 deletions(-)
create mode 100644 phpunit.xml
rename tests/{ => Feature}/PrerenderMiddlewareTest.php (97%)
create mode 100644 tests/Pest.php
diff --git a/composer.json b/composer.json
index 0ccd10f..da0acb2 100644
--- a/composer.json
+++ b/composer.json
@@ -10,10 +10,14 @@
"license": "MIT",
"authors": [
{
- "name": "Sebastian Fix",
- "email": "sebastian.fix@codebar.ch",
+ "name": "Sebastian BΓΌrgin-Fix",
+ "email": "sebastian.buergin@buergin.ch",
"homepage": "https://www.codebar.ch",
- "role": "Developer"
+ "role": "Sofware-Engineer"
+ },
+ {
+ "name": "Rhys Lees",
+ "role": "Software-Engineer"
},
{
"name": "Casper Lai",
@@ -28,15 +32,20 @@
}
],
"require": {
- "php": "^8.2|^8.3",
+ "php": "8.2.*|8.3.*|8.4.*",
"guzzlehttp/guzzle": "^7.8",
- "illuminate/support": "^11.0|^12.0",
+ "illuminate/contracts": "^12.0",
"symfony/psr-http-message-bridge": "^7.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "^3.50",
- "orchestra/testbench": "^9.0|^10.0",
- "phpunit/phpunit": "^10.5|^11.5.3"
+ "laravel/pint": "^1.21",
+ "larastan/larastan": "^v3.1",
+ "orchestra/testbench": "^10.0",
+ "pestphp/pest": "^3.7",
+ "phpstan/extension-installer": "^1.4",
+ "phpstan/phpstan-deprecation-rules": "^2.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "spatie/laravel-ray": "^1.39"
},
"autoload": {
"psr-4": {
@@ -56,7 +65,8 @@
"config": {
"sort-packages": true,
"allow-plugins": {
- "pestphp/pest-plugin": true
+ "pestphp/pest-plugin": true,
+ "phpstan/extension-installer": true
}
},
"extra": {
diff --git a/phpunit.xml b/phpunit.xml
new file mode 100644
index 0000000..7d0904f
--- /dev/null
+++ b/phpunit.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ ./tests
+
+
+
+
+ ./app
+ ./src
+
+
+
diff --git a/tests/PrerenderMiddlewareTest.php b/tests/Feature/PrerenderMiddlewareTest.php
similarity index 97%
rename from tests/PrerenderMiddlewareTest.php
rename to tests/Feature/PrerenderMiddlewareTest.php
index 9ae6196..50bfc4e 100644
--- a/tests/PrerenderMiddlewareTest.php
+++ b/tests/Feature/PrerenderMiddlewareTest.php
@@ -1,7 +1,8 @@
in(__DIR__);
diff --git a/tests/TestCase.php b/tests/TestCase.php
index ff281b0..933954a 100644
--- a/tests/TestCase.php
+++ b/tests/TestCase.php
@@ -3,30 +3,20 @@
namespace CodebarAg\LaravelPrerender\Tests;
use CodebarAg\LaravelPrerender\LaravelPrerenderServiceProvider;
-use CodebarAg\LaravelPrerender\PrerenderMiddleware;
-use GuzzleHttp\Client;
-use GuzzleHttp\Exception\ConnectException;
-use GuzzleHttp\Handler\MockHandler;
-use GuzzleHttp\HandlerStack;
-use GuzzleHttp\Psr7\Request;
-use GuzzleHttp\Psr7\Response;
-use Illuminate\Foundation\Application;
-use Illuminate\Foundation\Http\Kernel;
-use Illuminate\Support\Facades\Route;
-use Psr\Http\Message\RequestInterface;
+use Illuminate\Database\Eloquent\Factories\Factory;
+use Orchestra\Testbench\TestCase as Orchestra;
-class TestCase extends \Orchestra\Testbench\TestCase
+class TestCase extends Orchestra
{
protected function setUp(): void
{
parent::setUp();
- $this->setupRoutes();
+ Factory::guessFactoryNamesUsing(
+ fn (string $modelName) => 'CodebarAg\\LaravelPrerender\\Database\\Factories\\'.class_basename($modelName).'Factory',
+ );
}
- /**
- * @param Application $app
- */
protected function getPackageProviders($app): array
{
return [
@@ -34,60 +24,13 @@ protected function getPackageProviders($app): array
];
}
- /**
- * @param Application $app
- */
- protected function getEnvironmentSetUp($app): void
+ public function getEnvironmentSetUp($app): void
{
- $app->make(Kernel::class)->prependMiddleware(PrerenderMiddleware::class);
-
- // mock guzzle client
- $app->bind(Client::class, function () {
- $mock = new MockHandler([
- new Response(200, ['prerender.io-mock' => true]),
- ]);
- $stack = HandlerStack::create($mock);
-
- return new Client(['handler' => $stack]);
- });
- }
-
- protected function createMockTimeoutClient(): Client
- {
- $mock = new MockHandler([
- new ConnectException('Could not connect', new Request('GET', 'test')),
+ $app['config']->set('database.default', 'sqlite');
+ $app['config']->set('database.connections.sqlite', [
+ 'driver' => 'sqlite',
+ 'database' => ':memory:',
+ 'prefix' => '',
]);
-
- $stack = HandlerStack::create($mock);
-
- return new Client(['handler' => $stack]);
- }
-
- protected function createMockUrlTrackingClient(): Client
- {
- $mock = new MockHandler([
- function (RequestInterface $request) {
- return new Response(
- 200,
- ['prerender.io-mock' => true],
- (string) $request->getUri()
- );
- },
- ]);
-
- $stack = HandlerStack::create($mock);
-
- return new Client(['handler' => $stack]);
- }
-
- protected function setupRoutes(): void
- {
- Route::get('test-middleware', function () {
- return 'GET - Success';
- });
-
- Route::post('test-middleware', function () {
- return 'Success';
- });
}
}
From 7229eca1a1d789e3391fcca77a59a37be97a7c62 Mon Sep 17 00:00:00 2001
From: Rhys Lees <43909932+RhysLees@users.noreply.github.com>
Date: Fri, 28 Feb 2025 18:02:16 +0000
Subject: [PATCH 02/12] WIP
---
tests/TestCase.php | 47 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 47 insertions(+)
diff --git a/tests/TestCase.php b/tests/TestCase.php
index 933954a..ccae5da 100644
--- a/tests/TestCase.php
+++ b/tests/TestCase.php
@@ -3,8 +3,16 @@
namespace CodebarAg\LaravelPrerender\Tests;
use CodebarAg\LaravelPrerender\LaravelPrerenderServiceProvider;
+use GuzzleHttp\Client;
+use GuzzleHttp\Exception\ConnectException;
+use GuzzleHttp\Handler\MockHandler;
+use GuzzleHttp\HandlerStack;
+use GuzzleHttp\Psr7\Request;
+use GuzzleHttp\Psr7\Response;
use Illuminate\Database\Eloquent\Factories\Factory;
+use Illuminate\Support\Facades\Route;
use Orchestra\Testbench\TestCase as Orchestra;
+use Psr\Http\Message\RequestInterface;
class TestCase extends Orchestra
{
@@ -33,4 +41,43 @@ public function getEnvironmentSetUp($app): void
'prefix' => '',
]);
}
+
+ protected function createMockTimeoutClient(): Client
+ {
+ $mock = new MockHandler([
+ new ConnectException('Could not connect', new Request('GET', 'test')),
+ ]);
+
+ $stack = HandlerStack::create($mock);
+
+ return new Client(['handler' => $stack]);
+ }
+
+ protected function createMockUrlTrackingClient(): Client
+ {
+ $mock = new MockHandler([
+ function (RequestInterface $request) {
+ return new Response(
+ 200,
+ ['prerender.io-mock' => true],
+ (string) $request->getUri()
+ );
+ },
+ ]);
+
+ $stack = HandlerStack::create($mock);
+
+ return new Client(['handler' => $stack]);
+ }
+
+ protected function setupRoutes(): void
+ {
+ Route::get('test-middleware', function () {
+ return 'GET - Success';
+ });
+
+ Route::post('test-middleware', function () {
+ return 'Success';
+ });
+ }
}
From f2adcbe9ff666a19b9a034cd24fa82f1d6a6d3ee Mon Sep 17 00:00:00 2001
From: Rhys Lees <43909932+RhysLees@users.noreply.github.com>
Date: Fri, 28 Feb 2025 18:30:22 +0000
Subject: [PATCH 03/12] WIP
---
tests/TestCase.php | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/tests/TestCase.php b/tests/TestCase.php
index ccae5da..7fb2f9c 100644
--- a/tests/TestCase.php
+++ b/tests/TestCase.php
@@ -3,6 +3,7 @@
namespace CodebarAg\LaravelPrerender\Tests;
use CodebarAg\LaravelPrerender\LaravelPrerenderServiceProvider;
+use CodebarAg\LaravelPrerender\PrerenderMiddleware;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\ConnectException;
use GuzzleHttp\Handler\MockHandler;
@@ -10,6 +11,7 @@
use GuzzleHttp\Psr7\Request;
use GuzzleHttp\Psr7\Response;
use Illuminate\Database\Eloquent\Factories\Factory;
+use Illuminate\Foundation\Http\Kernel;
use Illuminate\Support\Facades\Route;
use Orchestra\Testbench\TestCase as Orchestra;
use Psr\Http\Message\RequestInterface;
@@ -40,6 +42,18 @@ public function getEnvironmentSetUp($app): void
'database' => ':memory:',
'prefix' => '',
]);
+
+ $app->make(Kernel::class)->prependMiddleware(PrerenderMiddleware::class);
+
+ // mock guzzle client
+ $app->bind(Client::class, function () {
+ $mock = new MockHandler([
+ new Response(200, ['prerender.io-mock' => true]),
+ ]);
+ $stack = HandlerStack::create($mock);
+
+ return new Client(['handler' => $stack]);
+ });
}
protected function createMockTimeoutClient(): Client
From 838ea492b00be13fa9b18b727226eefbfd4cb08f Mon Sep 17 00:00:00 2001
From: Rhys Lees <43909932+RhysLees@users.noreply.github.com>
Date: Fri, 28 Feb 2025 18:36:45 +0000
Subject: [PATCH 04/12] WIP
---
.github/ISSUE_TEMPLATE/bug.yml | 52 -------------------
.github/ISSUE_TEMPLATE/bug_report.yml | 17 +++---
.github/dependabot.yml | 12 +++++
.github/workflows/dependabot-auto-merge.yml | 32 ++++++++++++
.github/workflows/dependency-review.yml | 20 +++++++
.../workflows/fix-php-code-style-issues.yml | 2 +-
.github/workflows/phpstan.yml | 21 ++++++++
.github/workflows/release.yml | 23 ++++++++
.github/workflows/run-tests.yml | 43 ++++++---------
9 files changed, 136 insertions(+), 86 deletions(-)
delete mode 100644 .github/ISSUE_TEMPLATE/bug.yml
create mode 100644 .github/dependabot.yml
create mode 100644 .github/workflows/dependabot-auto-merge.yml
create mode 100644 .github/workflows/dependency-review.yml
create mode 100644 .github/workflows/phpstan.yml
create mode 100644 .github/workflows/release.yml
diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml
deleted file mode 100644
index 52f37d5..0000000
--- a/.github/ISSUE_TEMPLATE/bug.yml
+++ /dev/null
@@ -1,52 +0,0 @@
-name: Bug Report
-description: Report an Issue or Bug with the Package
-title: "[Bug]: "
-labels: ["bug"]
-body:
- - type: markdown
- attributes:
- value: |
- We're sorry to hear you have a problem. Can you help us solve it by providing the following details.
- - type: textarea
- id: what-happened
- attributes:
- label: What happened?
- description: What did you expect to happen?
- placeholder: I cannot currently do X thing because when I do, it breaks X thing.
- validations:
- required: true
-
- - type: input
- id: package-version
- attributes:
- label: Package Version
- description: What version of our Package are you running? Please be as specific as possible
- placeholder: 2.0.0
- validations:
- required: true
- - type: input
- id: php-version
- attributes:
- label: PHP Version
- description: What version of PHP are you running? Please be as specific as possible
- placeholder: 8.2.0
- validations:
- required: true
- - type: input
- id: laravel-version
- attributes:
- label: Laravel Version
- description: What version of Laravel are you running? Please be as specific as possible
- placeholder: 9.0.0
- validations:
- required: true
- - type: dropdown
- id: operating-systems
- attributes:
- label: Which operating systems does with happen with?
- description: You may select more than one.
- multiple: true
- options:
- - macOS
- - Windows
- - Linux
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index 7546b77..bc5e177 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -1,18 +1,18 @@
name: Bug Report
description: Report an Issue or Bug with the Package
title: "[Bug]: "
-labels: ["bug"]
+labels: [ "bug" ]
body:
- type: markdown
attributes:
- value: |
- We're sorry to hear you have a problem. Can you help us solve it by providing the following details.
+ value: "|
+We're sorry to hear you have a problem. Can you help us solve it by providing the following details."
- type: textarea
id: what-happened
attributes:
label: What happened?
description: What did you expect to happen?
- placeholder: I cannot currently do X thing because when I do, it breaks X thing.
+ placeholder: "I cannot currently do X thing because when I do, it breaks X thing."
validations:
required: true
- type: input
@@ -20,7 +20,8 @@ body:
attributes:
label: Package Version
description: What version of our Package are you running? Please be as specific as possible
- placeholder: 1.0.0
+ placeholder: "12.0"
+ value: "12.0"
validations:
required: true
- type: input
@@ -28,7 +29,8 @@ body:
attributes:
label: PHP Version
description: What version of PHP are you running? Please be as specific as possible
- placeholder: 8.3.0
+ placeholder: "8.4.0"
+ value: "8.4.0"
validations:
required: true
- type: input
@@ -36,7 +38,8 @@ body:
attributes:
label: Laravel Version
description: What version of Laravel are you running? Please be as specific as possible
- placeholder: 11.0.0
+ placeholder: "12.0.0"
+ value: "12.0.0"
validations:
required: true
- type: dropdown
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000..0bc378d
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,12 @@
+# Please see the documentation for all configuration options:
+# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
+
+version: 2
+updates:
+
+ - package-ecosystem: "github-actions"
+ directory: "/"
+ schedule:
+ interval: "weekly"
+ labels:
+ - "dependencies"
diff --git a/.github/workflows/dependabot-auto-merge.yml b/.github/workflows/dependabot-auto-merge.yml
new file mode 100644
index 0000000..2df1631
--- /dev/null
+++ b/.github/workflows/dependabot-auto-merge.yml
@@ -0,0 +1,32 @@
+name: dependabot-auto-merge
+on: pull_request_target
+
+permissions:
+ pull-requests: write
+ contents: write
+
+jobs:
+ dependabot:
+ runs-on: ubuntu-latest
+ if: ${{ github.actor == 'dependabot[bot]' }}
+ steps:
+
+ - name: Dependabot metadata
+ id: metadata
+ uses: dependabot/fetch-metadata@v2.3.0
+ with:
+ github-token: "${{ secrets.GITHUB_TOKEN }}"
+
+ - name: Auto-merge Dependabot PRs for semver-minor updates
+ if: ${{steps.metadata.outputs.update-type == 'version-update:semver-minor'}}
+ run: gh pr merge --auto --merge "$PR_URL"
+ env:
+ PR_URL: ${{github.event.pull_request.html_url}}
+ GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
+
+ - name: Auto-merge Dependabot PRs for semver-patch updates
+ if: ${{steps.metadata.outputs.update-type == 'version-update:semver-patch'}}
+ run: gh pr merge --auto --merge "$PR_URL"
+ env:
+ PR_URL: ${{github.event.pull_request.html_url}}
+ GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml
new file mode 100644
index 0000000..0d4a013
--- /dev/null
+++ b/.github/workflows/dependency-review.yml
@@ -0,0 +1,20 @@
+# Dependency Review Action
+#
+# This Action will scan dependency manifest files that change as part of a Pull Request, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging.
+#
+# Source repository: https://github.com/actions/dependency-review-action
+# Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement
+name: 'Dependency Review'
+on: [pull_request]
+
+permissions:
+ contents: read
+
+jobs:
+ dependency-review:
+ runs-on: ubuntu-latest
+ steps:
+ - name: 'Checkout Repository'
+ uses: actions/checkout@v4
+ - name: 'Dependency Review'
+ uses: actions/dependency-review-action@v4
diff --git a/.github/workflows/fix-php-code-style-issues.yml b/.github/workflows/fix-php-code-style-issues.yml
index 7f61fce..ef2fadf 100644
--- a/.github/workflows/fix-php-code-style-issues.yml
+++ b/.github/workflows/fix-php-code-style-issues.yml
@@ -13,7 +13,7 @@ jobs:
ref: ${{ github.head_ref }}
- name: Fix PHP code style issues
- uses: aglipanci/laravel-pint-action@2.3.1
+ uses: aglipanci/laravel-pint-action@2.5
- name: Commit changes
uses: stefanzweifel/git-auto-commit-action@v5
diff --git a/.github/workflows/phpstan.yml b/.github/workflows/phpstan.yml
new file mode 100644
index 0000000..ef2fadf
--- /dev/null
+++ b/.github/workflows/phpstan.yml
@@ -0,0 +1,21 @@
+name: Fix PHP code style issues
+
+on: [push]
+
+jobs:
+ php-code-styling:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ github.head_ref }}
+
+ - name: Fix PHP code style issues
+ uses: aglipanci/laravel-pint-action@2.5
+
+ - name: Commit changes
+ uses: stefanzweifel/git-auto-commit-action@v5
+ with:
+ commit_message: Fix styling
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..afa28ff
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,23 @@
+name: release
+
+on:
+ pull_request:
+ types:
+ - closed
+ branches:
+ - main
+jobs:
+ release:
+ name: Release
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: '0'
+ - name: Bump version and push tag
+ uses: anothrNick/github-tag-action@master
+ env:
+ GITHUB_TOKEN: ${{ secrets.MY_GITHUB_TOKEN }}
+ WITH_V: true
+ RELEASE_BRANCHES: main
+ DEFAULT_BUMP: minor
diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml
index be5239a..c4d9e45 100644
--- a/.github/workflows/run-tests.yml
+++ b/.github/workflows/run-tests.yml
@@ -2,42 +2,34 @@ name: run-tests
on:
push:
- branches:
- - main
+ branches: [ main ]
pull_request:
- branches:
- - main
+ branches: [ main ]
jobs:
test:
runs-on: ${{ matrix.os }}
-
strategy:
fail-fast: true
max-parallel: 1
matrix:
- os: [ubuntu-latest, windows-latest]
- php: [8.2, 8.3]
- laravel: ['11.*', '12.*']
- stability: [prefer-lowest, prefer-stable]
- include:
- - laravel: 11.*
- testbench: 9.*
- - laravel: 12.*
- testbench: 10.*
+ os: [ ubuntu-latest ]
+ php: [ 8.2, 8.3, 8.4 ]
+ laravel: [ 12.* ]
+ stability: [ prefer-lowest, prefer-stable ]
name: P${{ matrix.php }} - L${{ matrix.laravel }} - ${{ matrix.stability }} - ${{ matrix.os }}
steps:
- name: Checkout code
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, bcmath, soap, intl, gd, exif, iconv, imagick, fileinfo
- coverage: xdebug
+ coverage: none
- name: Setup problem matchers
run: |
@@ -46,19 +38,18 @@ jobs:
- name: Install dependencies
run: |
- composer require "laravel/framework:${{ matrix.laravel }}" "orchestra/testbench:${{ matrix.testbench }}" --dev --no-interaction --no-update
- composer update --${{ matrix.stability }} --prefer-dist --no-interaction --no-suggest
+ composer require "laravel/framework:${{ matrix.laravel }}" --no-interaction --no-update
+ composer update --${{ matrix.stability }} --prefer-dist --no-interaction
- - name: Set phpunit.xml
+ - name: Execute tests
run: cp phpunit.xml.dist phpunit.xml
- name: Execute tests
- run: vendor/bin/phpunit
+ run: vendor/bin/pest
- - name: Store test reports
- uses: actions/upload-artifact@v2
+ - name: Store Log Artifacts
+ if: failure()
+ uses: actions/upload-artifact@v4
with:
- name: Store report
- retention-days: 1
- path: |
- ./reports
+ name: Store report artifacts
+ path: ./vendor/orchestra/testbench-core/laravel/storage/logs
From c4db95a518f083ef492ee5f81d262c5f42a0cb52 Mon Sep 17 00:00:00 2001
From: Rhys Lees <43909932+RhysLees@users.noreply.github.com>
Date: Fri, 28 Feb 2025 18:40:42 +0000
Subject: [PATCH 05/12] WIP
---
README.md | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index 8949e2c..7cca505 100644
--- a/README.md
+++ b/README.md
@@ -1,16 +1,16 @@
[](https://packagist.org/packages/codebar-ag/laravel-prerender)
+[](https://github.com/codebar-ag/laravel-prerender/actions/workflows/run-tests.yml)
+[](https://github.com/codebar-ag/laravel-prerender/actions/workflows/fix-php-code-style-issues.yml)
[](https://packagist.org/packages/codebar-ag/laravel-prerender)
-[](https://github.com/codebar-ag/laravel-prerender/actions/workflows/run-tests.yml)
-[](https://github.com/codebar-ag/laravel-prerender/actions/workflows/php-cs-fixer.yml)
This package was developed to give you a quick start to integrate with the
Prerender.io service in your Laravel application.
## π Credits
-This package is a clone from [jeroennoten/Laravel-Prerender](https://github.com/jeroennoten/Laravel-Prerender)
+This package is a clone from [jeroennoten/laravel-prerender](https://github.com/jeroennoten/Laravel-Prerender)
with [jeroennoten](https://github.com/jeroennoten) as the original author.
[CasperLaiTW](https://github.com/CasperLaiTW) provided Laravel 6,7 & 8
compatibility by an unmerged (14th September 2020) Pull-Request.
@@ -32,7 +32,8 @@ using Prerender.io since the response always goes through your server.
| Package | PHP | Laravel | Prerender.io access |
|:-------:|:-----------:|:-------:|:-------------------:|
-| main | ^8.2 - ^8.3 | 11.x | β
|
+| v12.0.0 | ^8.2 - ^8.4 | 12.x | β
|
+| v11.0.0 | ^8.2 - ^8.3 | 11.x | β
|
| v3.3.0 | ^8.1 - ^8.3 | 10.x | β
|
| v3.2.0 | ^8.0 - ^8.2 | 9.x | β
|
| v3.1.1 | ^7.3 - ^8.1 | 8.x | β
|
From 523e1ee8f9a4ae3fa7b0682fe069cc7a5b612a9f Mon Sep 17 00:00:00 2001
From: Sebastian Fix
Date: Mon, 3 Mar 2025 17:06:33 +0700
Subject: [PATCH 06/12] Fixed Pest Tests
---
tests/Feature/PrerenderMiddlewareTest.php | 227 +++++++++-------------
tests/Pest.php | 57 +++++-
tests/TestCase.php | 118 ++++-------
3 files changed, 180 insertions(+), 222 deletions(-)
diff --git a/tests/Feature/PrerenderMiddlewareTest.php b/tests/Feature/PrerenderMiddlewareTest.php
index 50bfc4e..4e5c886 100644
--- a/tests/Feature/PrerenderMiddlewareTest.php
+++ b/tests/Feature/PrerenderMiddlewareTest.php
@@ -1,139 +1,92 @@
allowSymfonyUserAgent();
-
- $this->get('/test-middleware')
- ->assertHeader('prerender.io-mock', true)
- ->assertSuccessful();
- }
-
- /** @test */
- public function it_should_not_prerender_page_when_user_agent_does_not_in_list()
- {
- $this->get('/test-middleware')
- ->assertSuccessful()
- ->assertHeaderMissing('prerender.io-mock')
- ->assertSee('GET - Success');
- }
-
- /** @test */
- public function it_should_prerender_page_with_escaped_fragment_in_query_string()
- {
- $this->get('/test-middleware?_escaped_fragment_')
- ->assertHeader('prerender.io-mock', true)
- ->assertSuccessful();
- }
-
- /** @test */
- public function it_should_prerender_when_user_agent_is_part_of_crawler_user_agents()
- {
- $this->get('/test-middleware', ['User-Agent' => 'Googlebot/2.1 (+http://www.google.com/bot.html)'])
- ->assertHeader('prerender.io-mock', true)
- ->assertSuccessful();
- }
-
- /** @test */
- public function it_should_prerender_page_with_url_in_whitelist()
- {
- config()->set('prerender.whitelist', ['/test-middleware*']);
-
- $this->get('/test-middleware?_escaped_fragment_')
- ->assertHeader('prerender.io-mock', true)
- ->assertSuccessful();
- }
-
- /** @test */
- public function is_should_not_prerender_page_in_blacklist()
- {
- config()->set('prerender.blacklist', ['/test-middleware*']);
-
- $this->get('/test-middleware?_escaped_fragment_')
- ->assertSuccessful()
- ->assertHeaderMissing('prerender.io-mock')
- ->assertSee('GET - Success');
- }
-
- /** @test */
- public function it_should_not_prerender_page_on_non_get_request()
- {
- $this->allowSymfonyUserAgent();
-
- $this->post('/test-middleware')
- ->assertSuccessful()
- ->assertSee('Success');
- }
-
- /** @test */
- public function it_should_not_prerender_page_when_missing_user_agent()
- {
- $this->get('/test-middleware', ['User-Agent' => null])
- ->assertHeaderMissing('prerender.io-mock')
- ->assertSee('GET - Success');
- }
-
- /** @test */
- public function it_should_not_prerender_page_if_request_times_out()
- {
- $this->app->bind(Client::class, function () {
- return $this->createMockTimeoutClient();
- });
-
- $this->allowSymfonyUserAgent();
-
- $this->get('/test-middleware')
- ->assertHeaderMissing('prerender.io-mock')
- ->assertSee('GET - Success');
- }
-
- /** @test */
- public function it_does_not_send_query_strings_to_prerender_by_default()
- {
- $this->app->bind(Client::class, function () {
- return $this->createMockUrlTrackingClient();
- });
-
- $this->allowSymfonyUserAgent();
-
- $this->get('/test-middleware?withQueryParam=true')
- ->assertHeader('prerender.io-mock', true)
- ->assertSuccessful()
- ->assertSee(urlencode('/test-middleware'))
- ->assertDontSee('withQueryParam');
- }
-
- /** @test */
- public function it_sends_full_query_string_to_prerender()
- {
- $this->app->bind(Client::class, function () {
- return $this->createMockUrlTrackingClient();
- });
-
- $this->allowSymfonyUserAgent();
- $this->allowQueryParams();
-
- $this->get('/test-middleware?withQueryParam=true')
- ->assertHeader('prerender.io-mock', true)
- ->assertSuccessful()
- ->assertSee(urlencode('/test-middleware?withQueryParam=true'));
- }
-
- private function allowSymfonyUserAgent()
- {
- config()->set('prerender.crawler_user_agents', ['symfony']);
- }
-
- private function allowQueryParams()
- {
- config()->set('prerender.full_url', true);
- }
-}
+test('it should prerender page on get request', function () {
+ allowSymfonyUserAgent();
+
+ $this->get('/test-middleware')
+ ->assertHeader('prerender.io-mock', true)
+ ->assertSuccessful();
+});
+
+test('it should not prerender page when user agent does not in list', function () {
+ $this->get('/test-middleware')
+ ->assertHeaderMissing('prerender.io-mock')
+ ->assertSee('GET - Success');
+});
+
+test('it should prerender page with escaped fragment in query string', function () {
+ $this->get('/test-middleware?_escaped_fragment_')
+ ->assertHeader('prerender.io-mock', true)
+ ->assertSuccessful();
+});
+
+test('it should prerender when user agent is part of crawler user agents', function () {
+ $this->get('/test-middleware', ['User-Agent' => 'Googlebot/2.1 (+http://www.google.com/bot.html)'])
+ ->assertHeader('prerender.io-mock', true)
+ ->assertSuccessful();
+});
+
+test('it should prerender page with url in whitelist', function () {
+ config()->set('prerender.whitelist', ['/test-middleware*']);
+
+ $this->get('/test-middleware?_escaped_fragment_')
+ ->assertHeader('prerender.io-mock', true)
+ ->assertSuccessful();
+});
+
+test('it should not prerender page in blacklist', function () {
+ config()->set('prerender.blacklist', ['/test-middleware*']);
+
+ $this->get('/test-middleware?_escaped_fragment_')
+ ->assertSuccessful()
+ ->assertHeaderMissing('prerender.io-mock')
+ ->assertSee('GET - Success');
+});
+
+test('it should not prerender page on non-get request', function () {
+ allowSymfonyUserAgent();
+
+ $this->post('/test-middleware')
+ ->assertSuccessful()
+ ->assertSee('Success');
+});
+
+test('it should not prerender page when missing user agent', function () {
+ $this->get('/test-middleware', ['User-Agent' => null])
+ ->assertHeaderMissing('prerender.io-mock')
+ ->assertSee('GET - Success');
+});
+
+test('it should not prerender page if request times out', function () {
+ $this->app->bind(\GuzzleHttp\Client::class, fn () => createMockTimeoutClient());
+
+ allowSymfonyUserAgent();
+
+ $this->get('/test-middleware')
+ ->assertHeaderMissing('prerender.io-mock')
+ ->assertSee('GET - Success');
+});
+
+test('it does not send query strings to prerender by default', function () {
+ $this->app->bind(\GuzzleHttp\Client::class, fn () => createMockUrlTrackingClient());
+
+ allowSymfonyUserAgent();
+
+ $this->get('/test-middleware?withQueryParam=true')
+ ->assertHeader('prerender.io-mock', true)
+ ->assertSuccessful()
+ ->assertSee(urlencode('/test-middleware'))
+ ->assertDontSee('withQueryParam');
+});
+
+test('it sends full query string to prerender', function () {
+ $this->app->bind(\GuzzleHttp\Client::class, fn () => createMockUrlTrackingClient());
+
+ allowSymfonyUserAgent();
+ allowQueryParams();
+
+ $this->get('/test-middleware?withQueryParam=true')
+ ->assertHeader('prerender.io-mock', true)
+ ->assertSuccessful()
+ ->assertSee(urlencode('/test-middleware?withQueryParam=true'));
+});
diff --git a/tests/Pest.php b/tests/Pest.php
index bb70d64..2c2ec01 100644
--- a/tests/Pest.php
+++ b/tests/Pest.php
@@ -1,6 +1,59 @@
in(__DIR__);
+uses(TestCase::class)->in(__DIR__);
+
+function createMockPrerenderClient(): Client
+{
+ $mock = new MockHandler([
+ new Response(200, ['prerender.io-mock' => 'true'], 'Mocked Prerender Response'),
+ ]);
+
+ $stack = HandlerStack::create($mock);
+
+ return new Client(['handler' => $stack]);
+}
+
+function createMockTimeoutClient(): Client
+{
+ $mock = new MockHandler([
+ new ConnectException('Could not connect', new Request('GET', 'test')),
+ ]);
+
+ $stack = HandlerStack::create($mock);
+
+ return new Client(['handler' => $stack]);
+}
+
+function createMockUrlTrackingClient(): Client
+{
+ $mock = new MockHandler([
+ fn (RequestInterface $request) => new Response(
+ 200,
+ ['prerender.io-mock' => 'true'],
+ (string) $request->getUri()
+ ),
+ ]);
+
+ $stack = HandlerStack::create($mock);
+
+ return new Client(['handler' => $stack]);
+}
+
+function allowSymfonyUserAgent()
+{
+ config()->set('prerender.crawler_user_agents', ['symfony']);
+}
+
+function allowQueryParams()
+{
+ config()->set('prerender.full_url', true);
+}
diff --git a/tests/TestCase.php b/tests/TestCase.php
index 7fb2f9c..d3a1d72 100644
--- a/tests/TestCase.php
+++ b/tests/TestCase.php
@@ -5,93 +5,45 @@
use CodebarAg\LaravelPrerender\LaravelPrerenderServiceProvider;
use CodebarAg\LaravelPrerender\PrerenderMiddleware;
use GuzzleHttp\Client;
-use GuzzleHttp\Exception\ConnectException;
-use GuzzleHttp\Handler\MockHandler;
-use GuzzleHttp\HandlerStack;
-use GuzzleHttp\Psr7\Request;
-use GuzzleHttp\Psr7\Response;
-use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Foundation\Http\Kernel;
use Illuminate\Support\Facades\Route;
use Orchestra\Testbench\TestCase as Orchestra;
-use Psr\Http\Message\RequestInterface;
class TestCase extends Orchestra
{
- protected function setUp(): void
- {
- parent::setUp();
-
- Factory::guessFactoryNamesUsing(
- fn (string $modelName) => 'CodebarAg\\LaravelPrerender\\Database\\Factories\\'.class_basename($modelName).'Factory',
- );
- }
-
- protected function getPackageProviders($app): array
- {
- return [
- LaravelPrerenderServiceProvider::class,
- ];
- }
-
- public function getEnvironmentSetUp($app): void
- {
- $app['config']->set('database.default', 'sqlite');
- $app['config']->set('database.connections.sqlite', [
- 'driver' => 'sqlite',
- 'database' => ':memory:',
- 'prefix' => '',
- ]);
-
- $app->make(Kernel::class)->prependMiddleware(PrerenderMiddleware::class);
-
- // mock guzzle client
- $app->bind(Client::class, function () {
- $mock = new MockHandler([
- new Response(200, ['prerender.io-mock' => true]),
- ]);
- $stack = HandlerStack::create($mock);
-
- return new Client(['handler' => $stack]);
- });
- }
-
- protected function createMockTimeoutClient(): Client
- {
- $mock = new MockHandler([
- new ConnectException('Could not connect', new Request('GET', 'test')),
- ]);
-
- $stack = HandlerStack::create($mock);
-
- return new Client(['handler' => $stack]);
- }
-
- protected function createMockUrlTrackingClient(): Client
- {
- $mock = new MockHandler([
- function (RequestInterface $request) {
- return new Response(
- 200,
- ['prerender.io-mock' => true],
- (string) $request->getUri()
- );
- },
- ]);
-
- $stack = HandlerStack::create($mock);
-
- return new Client(['handler' => $stack]);
- }
-
- protected function setupRoutes(): void
- {
- Route::get('test-middleware', function () {
- return 'GET - Success';
- });
-
- Route::post('test-middleware', function () {
- return 'Success';
- });
- }
+ protected function getPackageProviders($app): array
+ {
+ return [
+ LaravelPrerenderServiceProvider::class,
+ ];
+ }
+
+ public function getEnvironmentSetUp($app): void
+ {
+ $app['config']->set('database.default', 'sqlite');
+ $app['config']->set('database.connections.sqlite', [
+ 'driver' => 'sqlite',
+ 'database' => ':memory:',
+ 'prefix' => '',
+ ]);
+
+ $app->make(Kernel::class)->prependMiddleware(PrerenderMiddleware::class);
+
+ $this->setupRoutes();
+
+ $app->bind(Client::class, function () {
+ return createMockPrerenderClient();
+ });
+ }
+
+ protected function setupRoutes(): void
+ {
+ Route::get('test-middleware', function () {
+ return response('GET - Success')->header('Content-Type', 'text/plain');
+ });
+
+ Route::post('test-middleware', function () {
+ return response('Success')->header('Content-Type', 'text/plain');
+ });
+ }
}
From aeabf442ed9aab70e0ab9c0b6e7927ab150b884f Mon Sep 17 00:00:00 2001
From: StanBarrows <10268813+StanBarrows@users.noreply.github.com>
Date: Mon, 3 Mar 2025 10:07:05 +0000
Subject: [PATCH 07/12] Fix styling
---
tests/TestCase.php | 70 +++++++++++++++++++++++-----------------------
1 file changed, 35 insertions(+), 35 deletions(-)
diff --git a/tests/TestCase.php b/tests/TestCase.php
index d3a1d72..1cf6277 100644
--- a/tests/TestCase.php
+++ b/tests/TestCase.php
@@ -11,39 +11,39 @@
class TestCase extends Orchestra
{
- protected function getPackageProviders($app): array
- {
- return [
- LaravelPrerenderServiceProvider::class,
- ];
- }
-
- public function getEnvironmentSetUp($app): void
- {
- $app['config']->set('database.default', 'sqlite');
- $app['config']->set('database.connections.sqlite', [
- 'driver' => 'sqlite',
- 'database' => ':memory:',
- 'prefix' => '',
- ]);
-
- $app->make(Kernel::class)->prependMiddleware(PrerenderMiddleware::class);
-
- $this->setupRoutes();
-
- $app->bind(Client::class, function () {
- return createMockPrerenderClient();
- });
- }
-
- protected function setupRoutes(): void
- {
- Route::get('test-middleware', function () {
- return response('GET - Success')->header('Content-Type', 'text/plain');
- });
-
- Route::post('test-middleware', function () {
- return response('Success')->header('Content-Type', 'text/plain');
- });
- }
+ protected function getPackageProviders($app): array
+ {
+ return [
+ LaravelPrerenderServiceProvider::class,
+ ];
+ }
+
+ public function getEnvironmentSetUp($app): void
+ {
+ $app['config']->set('database.default', 'sqlite');
+ $app['config']->set('database.connections.sqlite', [
+ 'driver' => 'sqlite',
+ 'database' => ':memory:',
+ 'prefix' => '',
+ ]);
+
+ $app->make(Kernel::class)->prependMiddleware(PrerenderMiddleware::class);
+
+ $this->setupRoutes();
+
+ $app->bind(Client::class, function () {
+ return createMockPrerenderClient();
+ });
+ }
+
+ protected function setupRoutes(): void
+ {
+ Route::get('test-middleware', function () {
+ return response('GET - Success')->header('Content-Type', 'text/plain');
+ });
+
+ Route::post('test-middleware', function () {
+ return response('Success')->header('Content-Type', 'text/plain');
+ });
+ }
}
From 7babcdfc4ec1b2123ec2138edd9813e0075254bd Mon Sep 17 00:00:00 2001
From: Rhys Lees <43909932+RhysLees@users.noreply.github.com>
Date: Mon, 3 Mar 2025 22:53:54 +0000
Subject: [PATCH 08/12] WIP
---
.gitattributes | 12 +++++++++--
.gitignore | 12 +++++------
.php-cs-fixer.cache | 1 +
phpstan-baseline.neon | 0
phpstan.neon.dist | 13 ++++++++++++
phpunit.xml | 26 ++++++++++++++++-------
phpunit.xml.dist | 49 ++++++++++++++++++++++++-------------------
7 files changed, 77 insertions(+), 36 deletions(-)
create mode 100644 .php-cs-fixer.cache
create mode 100644 phpstan-baseline.neon
create mode 100644 phpstan.neon.dist
diff --git a/.gitattributes b/.gitattributes
index 61e9c5f..9e9519b 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -2,10 +2,18 @@
# https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html
# Ignore all test and documentation with "export-ignore".
+/.github export-ignore
/.gitattributes export-ignore
/.gitignore export-ignore
/phpunit.xml.dist export-ignore
+/art export-ignore
+/docs export-ignore
/tests export-ignore
/.editorconfig export-ignore
-/.php_cs.dist export-ignore
-/.github export-ignore
+/.php_cs.dist.php export-ignore
+/psalm.xml export-ignore
+/psalm.xml.dist export-ignore
+/testbench.yaml export-ignore
+/UPGRADING.md export-ignore
+/phpstan.neon.dist export-ignore
+/phpstan-baseline.neon export-ignore
diff --git a/.gitignore b/.gitignore
index 7514ae6..91b23b2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,12 +1,12 @@
-.DS_Store
.idea
.phpunit.result.cache
.phpunit.cache
-build
composer.lock
coverage
-docs
+phpunit.xml
+phpstan.neon
+testbench.yaml
vendor
-.php_cs.cache
-.php-cs-fixer.cache
-coverage.xml
+node_modules
+.phpactor.json
+build
diff --git a/.php-cs-fixer.cache b/.php-cs-fixer.cache
new file mode 100644
index 0000000..65d2b2b
--- /dev/null
+++ b/.php-cs-fixer.cache
@@ -0,0 +1 @@
+{"php":"8.3.12","version":"3.70.0:v3.70.0#2ecd5aae0edc937f0d5aa4a22d1d705c6b2e084e","indent":" ","lineEnding":"\n","rules":{"blank_line_after_namespace":true,"braces_position":true,"class_definition":true,"constant_case":true,"control_structure_braces":true,"control_structure_continuation_position":true,"elseif":true,"function_declaration":true,"indentation_type":true,"line_ending":true,"lowercase_keywords":true,"method_argument_space":{"on_multiline":"ensure_fully_multiline","keep_multiple_spaces_after_comma":true},"no_break_comment":true,"no_closing_tag":true,"no_multiple_statements_per_line":true,"no_space_around_double_colon":true,"no_spaces_after_function_name":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"single_blank_line_at_eof":true,"single_class_element_per_statement":{"elements":["property"]},"single_import_per_statement":true,"single_line_after_imports":true,"single_space_around_construct":{"constructs_followed_by_a_single_space":["abstract","as","case","catch","class","do","else","elseif","final","for","foreach","function","if","interface","namespace","private","protected","public","static","switch","trait","try","use_lambda","while"],"constructs_preceded_by_a_single_space":["as","else","elseif","use_lambda"]},"spaces_inside_parentheses":true,"statement_indentation":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"visibility_required":{"elements":["method","property"]},"encoding":true,"full_opening_tag":true,"array_syntax":{"syntax":"short"},"ordered_imports":{"sort_algorithm":"alpha"},"no_unused_imports":true,"trailing_comma_in_multiline":true,"phpdoc_scalar":true,"unary_operator_spaces":true,"binary_operator_spaces":true,"blank_line_before_statement":{"statements":["break","continue","declare","return","throw","try"]},"phpdoc_single_line_var_spacing":true,"phpdoc_var_without_name":true,"single_trait_insert_per_statement":true,"single_quote":true},"hashes":{"\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder2962\/tests\/PrerenderMiddlewareTest.php":"8a57a9fd0dfbbd8568f512e46a19da02","\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder4256\/tests\/TestCase.php":"130fb887a0f4e617c71bfbf1d4134e07","\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder2007\/tests\/TestCase.php":"130fb887a0f4e617c71bfbf1d4134e07","\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder1941\/tests\/Feature\/PrerenderMiddlewareTest.php":"1612783abbae5207c7c3a3ad7e9f6c6e","\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder950\/tests\/Feature\/PrerenderMiddlewareTest.php":"1612783abbae5207c7c3a3ad7e9f6c6e","\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder293\/tests\/TestCase.php":"79538e1112e25458e40348dc07f2548d","\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder4960\/tests\/TestCase.php":"8e3feb5532fb250daa80057c08790904","\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder347\/tests\/PrerenderMiddlewareTest.php":"8a57a9fd0dfbbd8568f512e46a19da02","\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder3233\/tests\/TestCase.php":"130fb887a0f4e617c71bfbf1d4134e07","\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder2210\/tests\/Feature\/PrerenderMiddlewareTest.php":"1612783abbae5207c7c3a3ad7e9f6c6e","\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder1934\/tests\/Feature\/PrerenderMiddlewareTest.php":"1612783abbae5207c7c3a3ad7e9f6c6e","\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder2796\/tests\/TestCase.php":"8e3feb5532fb250daa80057c08790904","\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder4866\/tests\/TestCase.php":"044189bdf2aab76cf9b5cbf6dd03dee7"}}
\ No newline at end of file
diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon
new file mode 100644
index 0000000..e69de29
diff --git a/phpstan.neon.dist b/phpstan.neon.dist
new file mode 100644
index 0000000..facf7fa
--- /dev/null
+++ b/phpstan.neon.dist
@@ -0,0 +1,13 @@
+
+includes:
+ - phpstan-baseline.neon
+
+parameters:
+ level: 5
+ paths:
+ - src
+ - config
+ tmpDir: build/phpstan
+ checkOctaneCompatibility: true
+ checkModelProperties: true
+ noEnvCallsOutsideOfConfig: false
diff --git a/phpunit.xml b/phpunit.xml
index 7d0904f..d41aea3 100644
--- a/phpunit.xml
+++ b/phpunit.xml
@@ -1,17 +1,29 @@
+ xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.3/phpunit.xsd" backupGlobals="false"
+ bootstrap="vendor/autoload.php" colors="true" processIsolation="false" stopOnFailure="false"
+ executionOrder="random" failOnWarning="true" failOnRisky="true" failOnEmptyTestSuite="true"
+ beStrictAboutOutputDuringTests="true" cacheDirectory=".phpunit.cache" backupStaticProperties="false">
-
- ./tests
+
+ tests
+
+
+
+
+
+
+
+
+
+
+
+
+
- ./app
./src
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index eedb770..d41aea3 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -1,23 +1,30 @@
-
-
-
- tests
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ./src
-
-
+
+
+
+ tests
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ./src
+
+
From f64e787f186297c8fb73323193ea0a7c0d4b3e38 Mon Sep 17 00:00:00 2001
From: Rhys Lees <43909932+RhysLees@users.noreply.github.com>
Date: Mon, 3 Mar 2025 22:54:45 +0000
Subject: [PATCH 09/12] WIP
---
.php-cs-fixer.cache | 1 -
.php-cs-fixer.dist.php | 36 ------------------------------------
2 files changed, 37 deletions(-)
delete mode 100644 .php-cs-fixer.cache
delete mode 100644 .php-cs-fixer.dist.php
diff --git a/.php-cs-fixer.cache b/.php-cs-fixer.cache
deleted file mode 100644
index 65d2b2b..0000000
--- a/.php-cs-fixer.cache
+++ /dev/null
@@ -1 +0,0 @@
-{"php":"8.3.12","version":"3.70.0:v3.70.0#2ecd5aae0edc937f0d5aa4a22d1d705c6b2e084e","indent":" ","lineEnding":"\n","rules":{"blank_line_after_namespace":true,"braces_position":true,"class_definition":true,"constant_case":true,"control_structure_braces":true,"control_structure_continuation_position":true,"elseif":true,"function_declaration":true,"indentation_type":true,"line_ending":true,"lowercase_keywords":true,"method_argument_space":{"on_multiline":"ensure_fully_multiline","keep_multiple_spaces_after_comma":true},"no_break_comment":true,"no_closing_tag":true,"no_multiple_statements_per_line":true,"no_space_around_double_colon":true,"no_spaces_after_function_name":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"single_blank_line_at_eof":true,"single_class_element_per_statement":{"elements":["property"]},"single_import_per_statement":true,"single_line_after_imports":true,"single_space_around_construct":{"constructs_followed_by_a_single_space":["abstract","as","case","catch","class","do","else","elseif","final","for","foreach","function","if","interface","namespace","private","protected","public","static","switch","trait","try","use_lambda","while"],"constructs_preceded_by_a_single_space":["as","else","elseif","use_lambda"]},"spaces_inside_parentheses":true,"statement_indentation":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"visibility_required":{"elements":["method","property"]},"encoding":true,"full_opening_tag":true,"array_syntax":{"syntax":"short"},"ordered_imports":{"sort_algorithm":"alpha"},"no_unused_imports":true,"trailing_comma_in_multiline":true,"phpdoc_scalar":true,"unary_operator_spaces":true,"binary_operator_spaces":true,"blank_line_before_statement":{"statements":["break","continue","declare","return","throw","try"]},"phpdoc_single_line_var_spacing":true,"phpdoc_var_without_name":true,"single_trait_insert_per_statement":true,"single_quote":true},"hashes":{"\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder2962\/tests\/PrerenderMiddlewareTest.php":"8a57a9fd0dfbbd8568f512e46a19da02","\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder4256\/tests\/TestCase.php":"130fb887a0f4e617c71bfbf1d4134e07","\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder2007\/tests\/TestCase.php":"130fb887a0f4e617c71bfbf1d4134e07","\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder1941\/tests\/Feature\/PrerenderMiddlewareTest.php":"1612783abbae5207c7c3a3ad7e9f6c6e","\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder950\/tests\/Feature\/PrerenderMiddlewareTest.php":"1612783abbae5207c7c3a3ad7e9f6c6e","\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder293\/tests\/TestCase.php":"79538e1112e25458e40348dc07f2548d","\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder4960\/tests\/TestCase.php":"8e3feb5532fb250daa80057c08790904","\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder347\/tests\/PrerenderMiddlewareTest.php":"8a57a9fd0dfbbd8568f512e46a19da02","\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder3233\/tests\/TestCase.php":"130fb887a0f4e617c71bfbf1d4134e07","\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder2210\/tests\/Feature\/PrerenderMiddlewareTest.php":"1612783abbae5207c7c3a3ad7e9f6c6e","\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder1934\/tests\/Feature\/PrerenderMiddlewareTest.php":"1612783abbae5207c7c3a3ad7e9f6c6e","\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder2796\/tests\/TestCase.php":"8e3feb5532fb250daa80057c08790904","\/private\/var\/folders\/5p\/yjskyj_10tx0k7221hbl8cfh0000gn\/T\/PHP CS Fixertemp_folder4866\/tests\/TestCase.php":"044189bdf2aab76cf9b5cbf6dd03dee7"}}
\ No newline at end of file
diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php
deleted file mode 100644
index c55db8a..0000000
--- a/.php-cs-fixer.dist.php
+++ /dev/null
@@ -1,36 +0,0 @@
-in([
- __DIR__ . '/src',
- __DIR__ . '/tests',
- ])
- ->name('*.php')
- ->notName('*.blade.php')
- ->ignoreDotFiles(true)
- ->ignoreVCS(true);
-
-return (new PhpCsFixer\Config())
- ->setRules([
- '@PSR2' => true,
- 'array_syntax' => ['syntax' => 'short'],
- 'ordered_imports' => ['sort_algorithm' => 'alpha'],
- 'no_unused_imports' => true,
- 'not_operator_with_successor_space' => false,
- 'trailing_comma_in_multiline' => true,
- 'phpdoc_scalar' => true,
- 'unary_operator_spaces' => true,
- 'binary_operator_spaces' => true,
- 'blank_line_before_statement' => [
- 'statements' => ['break', 'continue', 'declare', 'return', 'throw', 'try'],
- ],
- 'phpdoc_single_line_var_spacing' => true,
- 'phpdoc_var_without_name' => true,
- 'method_argument_space' => [
- 'on_multiline' => 'ensure_fully_multiline',
- 'keep_multiple_spaces_after_comma' => true,
- ],
- 'single_trait_insert_per_statement' => true,
- 'single_quote' => true,
- ])
- ->setFinder($finder);
From 6879b1b0f23074397371801ad18a74df0de26d4e Mon Sep 17 00:00:00 2001
From: Rhys Lees <43909932+RhysLees@users.noreply.github.com>
Date: Mon, 3 Mar 2025 23:02:44 +0000
Subject: [PATCH 10/12] WIP
---
.github/workflows/phpstan.yml | 31 ++++++++++++++++++-------------
1 file changed, 18 insertions(+), 13 deletions(-)
diff --git a/.github/workflows/phpstan.yml b/.github/workflows/phpstan.yml
index ef2fadf..b0cde6a 100644
--- a/.github/workflows/phpstan.yml
+++ b/.github/workflows/phpstan.yml
@@ -1,21 +1,26 @@
-name: Fix PHP code style issues
+name: PHPStan
-on: [push]
+on:
+ push:
+ paths:
+ - '**.php'
+ - 'phpstan.neon.dist'
jobs:
- php-code-styling:
+ phpstan:
+ name: phpstan
runs-on: ubuntu-latest
-
steps:
- - name: Checkout code
- uses: actions/checkout@v4
+ - uses: actions/checkout@v4
+
+ - name: Setup PHP
+ uses: shivammathur/setup-php@v2
with:
- ref: ${{ github.head_ref }}
+ php-version: '8.4'
+ coverage: none
- - name: Fix PHP code style issues
- uses: aglipanci/laravel-pint-action@2.5
+ - name: Install composer dependencies
+ uses: ramsey/composer-install@v3
- - name: Commit changes
- uses: stefanzweifel/git-auto-commit-action@v5
- with:
- commit_message: Fix styling
+ - name: Run PHPStan
+ run: ./vendor/bin/phpstan --error-format=github
From 8a087f73dcd21a275f80b07d9e233efa2026ae97 Mon Sep 17 00:00:00 2001
From: Rhys Lees <43909932+RhysLees@users.noreply.github.com>
Date: Mon, 3 Mar 2025 23:16:16 +0000
Subject: [PATCH 11/12] WIP
---
src/PrerenderMiddleware.php | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/PrerenderMiddleware.php b/src/PrerenderMiddleware.php
index 69dcf66..df40c6d 100644
--- a/src/PrerenderMiddleware.php
+++ b/src/PrerenderMiddleware.php
@@ -79,6 +79,7 @@ public function __construct(Guzzle $client)
{
$this->returnSoftHttpCodes = config('prerender.prerender_soft_http_codes');
+ // @phpstan-ignore-next-line
$guzzleConfig = $client->getConfig();
$guzzleConfig['timeout'] = config('prerender.timeout');
From 233faa004c28405f39ce15fe6af68f8b2a3b0c61 Mon Sep 17 00:00:00 2001
From: Rhys Lees <43909932+RhysLees@users.noreply.github.com>
Date: Tue, 4 Mar 2025 17:55:50 +0000
Subject: [PATCH 12/12] WIP
---
.github/workflows/phpstan.yml | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/.github/workflows/phpstan.yml b/.github/workflows/phpstan.yml
index b0cde6a..f381a0b 100644
--- a/.github/workflows/phpstan.yml
+++ b/.github/workflows/phpstan.yml
@@ -1,10 +1,6 @@
name: PHPStan
-on:
- push:
- paths:
- - '**.php'
- - 'phpstan.neon.dist'
+on: [push]
jobs:
phpstan: