Skip to content
This repository was archived by the owner on Jan 8, 2024. It is now read-only.

Commit b3a6823

Browse files
committed
Fix up CI. PHP 7.4+
1 parent 12ff751 commit b3a6823

File tree

8 files changed

+183
-70
lines changed

8 files changed

+183
-70
lines changed

Diff for: .github/workflows/ci.yml

+103
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches:
6+
- master
7+
pull_request:
8+
workflow_dispatch:
9+
10+
jobs:
11+
testsuite:
12+
runs-on: ubuntu-22.04
13+
strategy:
14+
fail-fast: false
15+
matrix:
16+
php-version: ['7.4', '8.2']
17+
db-type: [sqlite, mysql, pgsql]
18+
prefer-lowest: ['']
19+
include:
20+
- php-version: '7.4'
21+
db-type: 'sqlite'
22+
prefer-lowest: 'prefer-lowest'
23+
24+
steps:
25+
- uses: actions/checkout@v3
26+
27+
- name: Setup PHP
28+
uses: shivammathur/setup-php@v2
29+
with:
30+
php-version: ${{ matrix.php-version }}
31+
extensions: mbstring
32+
coverage: pcov
33+
34+
- name: Get composer cache directory
35+
id: composercache
36+
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
37+
38+
- name: Cache dependencies
39+
uses: actions/cache@v3
40+
with:
41+
path: ${{ steps.composercache.outputs.dir }}
42+
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
43+
restore-keys: ${{ runner.os }}-composer-
44+
45+
- name: Composer install
46+
run: |
47+
composer --version
48+
if ${{ matrix.prefer-lowest == 'prefer-lowest' }}
49+
then
50+
composer update --prefer-lowest --prefer-stable
51+
else
52+
composer install --no-progress --prefer-dist --optimize-autoloader
53+
fi
54+
if ${{ matrix.prefer-lowest == 'prefer-lowest' }}; then composer lowest-setup; fi
55+
56+
- name: Run PHPUnit
57+
run: |
58+
if [[ ${{ matrix.php-version }} == '7.4' && ${{ matrix.db-type }} == 'sqlite' ]]; then
59+
vendor/bin/phpunit --coverage-clover=coverage.xml
60+
else
61+
vendor/bin/phpunit
62+
fi
63+
64+
- name: Validate prefer-lowest
65+
run: if ${{ matrix.prefer-lowest == 'prefer-lowest' }}; then vendor/bin/validate-prefer-lowest -m; fi
66+
67+
- name: Code Coverage Report
68+
if: success() && matrix.php-version == '7.4' && matrix.db-type == 'sqlite'
69+
uses: codecov/codecov-action@v3
70+
71+
validation:
72+
name: Coding Standard & Static Analysis
73+
runs-on: ubuntu-22.04
74+
75+
steps:
76+
- uses: actions/checkout@v3
77+
78+
- name: Setup PHP
79+
uses: shivammathur/setup-php@v2
80+
with:
81+
php-version: '7.4'
82+
extensions: mbstring
83+
coverage: none
84+
85+
- name: Get composer cache directory
86+
id: composercache
87+
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
88+
89+
- name: Cache dependencies
90+
uses: actions/cache@v3
91+
with:
92+
path: ${{ steps.composercache.outputs.dir }}
93+
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
94+
restore-keys: ${{ runner.os }}-composer-
95+
96+
- name: Composer Setup
97+
run: composer stan-setup
98+
99+
- name: Run phpstan
100+
run: vendor/bin/phpstan analyse --error-format=github
101+
102+
- name: Run phpcs
103+
run: composer cs-check

Diff for: .travis.yml

-46
This file was deleted.

Diff for: README.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@
55
[![Build Status](https://img.shields.io/travis/php-http/cakephp-adapter.svg?style=flat-square)](https://travis-ci.org/php-http/cakephp-adapter)
66
[![Code Coverage](https://img.shields.io/scrutinizer/coverage/g/php-http/cakephp-adapter.svg?style=flat-square)](https://scrutinizer-ci.com/g/php-http/cakephp-adapter)
77
[![Quality Score](https://img.shields.io/scrutinizer/g/php-http/cakephp-adapter.svg?style=flat-square)](https://scrutinizer-ci.com/g/php-http/cakephp-adapter)
8+
[![Minimum PHP Version](https://img.shields.io/badge/php-%3E%3D%207.4-8892BF.svg)](https://php.net/)
89
[![Total Downloads](https://img.shields.io/packagist/dt/php-http/cakephp-adapter.svg?style=flat-square)](https://packagist.org/packages/php-http/cakephp-adapter)
910

1011
[HTTPlug](http://httplug.io) adapter for the [CakePHP](https://cakephp.org/) HTTP library.
1112

12-
This branch is for use with CakePHP 4.0+.
13+
This branch is for use with CakePHP 4.2+.
1314

1415
## Install
1516

Diff for: composer.json

+20-3
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,15 @@
1111
}
1212
],
1313
"require": {
14-
"php": ">=7.2",
14+
"php": ">=7.4",
1515
"php-http/httplug": "^2.0",
1616
"php-http/discovery": "^1.0",
17-
"cakephp/cakephp": "^4.0"
17+
"cakephp/cakephp": "^4.2"
1818
},
1919
"require-dev": {
20-
"phpunit/phpunit": "^8.5"
20+
"phpunit/phpunit": "^9.5",
21+
"php-http/message-factory": "^1.0.2",
22+
"spryker/code-sniffer": "^0.17.15"
2123
},
2224
"autoload": {
2325
"psr-4": {
@@ -38,6 +40,21 @@
3840
"test-ci": "vendor/bin/phpunit --coverage-clover build/coverage.xml"
3941
},
4042
"prefer-stable": true,
43+
"scripts": {
44+
"test": "phpunit",
45+
"test-coverage": "phpunit --log-junit webroot/coverage/unitreport.xml --coverage-html webroot/coverage --coverage-clover webroot/coverage/coverage.xml",
46+
"stan": "phpstan analyse",
47+
"stan-setup": "cp composer.json composer.backup && composer require --dev phpstan/phpstan:^1.0.0 && mv composer.backup composer.json",
48+
"lowest": " validate-prefer-lowest",
49+
"lowest-setup": "composer update --prefer-lowest --prefer-stable --prefer-dist --no-interaction && cp composer.json composer.backup && composer require --dev dereuromark/composer-prefer-lowest && mv composer.backup composer.json",
50+
"cs-check": "phpcs --extensions=php",
51+
"cs-fix": "phpcbf --extensions=php"
52+
},
53+
"config": {
54+
"allow-plugins": {
55+
"dealerdirect/phpcodesniffer-composer-installer": true
56+
}
57+
},
4158
"extra": {
4259
"branch-alias": {
4360
"dev-master": "0.3-dev"

Diff for: phpcs.xml

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0"?>
2+
<ruleset name="cakephp-feedback">
3+
4+
<arg value="nps"/>
5+
6+
<file>src/</file>
7+
<file>tests/</file>
8+
9+
<exclude-pattern>/TestApp/templates/</exclude-pattern>
10+
11+
<rule ref="vendor/spryker/code-sniffer/Spryker/ruleset.xml"/>
12+
13+
</ruleset>

Diff for: phpstan.neon

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
parameters:
2+
level: 8
3+
paths:
4+
- src/
5+
checkMissingIterableValueType: false
6+
checkGenericClassInNonGenericObjectType: false
7+
ignoreErrors:
8+
- '#Parameter \#3 \$headers of class .+Request constructor expects array<non-empty-string, non-empty-string>, array<array<string>> given.#'

Diff for: src/Client.php

+8-15
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,11 @@
44

55
use Cake\Http\Client as CakeClient;
66
use Cake\Http\Client\Request;
7+
use Exception;
78
use Http\Client\Exception\NetworkException;
89
use Http\Client\HttpClient;
9-
use Http\Discovery\MessageFactoryDiscovery;
10-
use Http\Message\ResponseFactory;
1110
use Psr\Http\Message\RequestInterface;
1211
use Psr\Http\Message\ResponseInterface;
13-
use Throwable;
1412

1513
/**
1614
* Client compatible with PSR7 and Httplug interfaces, using a CakePHP client.
@@ -20,32 +18,27 @@ class Client implements HttpClient
2018
/**
2119
* @var \Cake\Http\Client
2220
*/
23-
private $client;
24-
25-
/**
26-
* @var \Http\Message\ResponseFactory
27-
*/
28-
private $responseFactory;
21+
protected $client;
2922

3023
/**
3124
* @param \Cake\Http\Client|null $client
32-
* @param \Http\Message\ResponseFactory|null $responseFactory
3325
*/
34-
public function __construct(CakeClient $client = null, ResponseFactory $responseFactory = null)
26+
public function __construct(?CakeClient $client = null)
3527
{
3628
$this->client = $client ?: new CakeClient();
37-
$this->responseFactory = $responseFactory ?: MessageFactoryDiscovery::find();
3829
}
3930

4031
/**
4132
* @inheritdoc
33+
*
34+
* @throws \Http\Client\Exception\NetworkException
4235
*/
4336
public function sendRequest(RequestInterface $request): ResponseInterface
4437
{
4538
$cakeRequest = new Request(
46-
(string) $request->getUri(),
39+
(string)$request->getUri(),
4740
$request->getMethod(),
48-
$request->getHeaders()
41+
$request->getHeaders(),
4942
);
5043

5144
$cakeRequest = $cakeRequest
@@ -58,7 +51,7 @@ public function sendRequest(RequestInterface $request): ResponseInterface
5851

5952
try {
6053
$response = $this->client->send($cakeRequest, $this->client->getConfig());
61-
} catch (Throwable $exception) {
54+
} catch (Exception $exception) {
6255
throw new NetworkException('Failed to send request', $request, $exception);
6356
}
6457

Diff for: tests/ClientTest.php

+29-5
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,40 @@
22

33
namespace Http\Adapter\Cake\Tests;
44

5+
use Cake\Http\Client\Response;
6+
use Cake\Http\ServerRequest;
57
use Http\Adapter\Cake\Client;
6-
use Http\Client\Tests\HttpClientTest;
8+
use PHPUnit\Framework\TestCase;
79

8-
class ClientTest extends HttpClientTest
10+
class ClientTest extends TestCase
911
{
1012
/**
11-
* @return \Http\Adapter\Cake\Client
13+
* @return void
1214
*/
13-
protected function createHttpAdapter(): Client
15+
public function testInstance(): void
1416
{
15-
return new Client();
17+
$client = new Client();
18+
$this->assertInstanceOf(Client::class, $client);
19+
}
20+
21+
/**
22+
* @return void
23+
*/
24+
public function testSendRequest(): void
25+
{
26+
$serverRequest = new ServerRequest();
27+
28+
$client = new Client();
29+
$response = $client->sendRequest($serverRequest);
30+
31+
$this->assertInstanceOf(Response::class, $response);
32+
}
33+
34+
/**
35+
* @return \Http\Adapter\Cake\Client|\PHPUnit\Framework\MockObject\MockObject
36+
*/
37+
protected function createHttpAdapterMock(): Client
38+
{
39+
return $this->getMockBuilder(Client::class)->getMock();
1640
}
1741
}

0 commit comments

Comments
 (0)