Skip to content

Commit 2ab2e36

Browse files
authored
Making a better build (#2)
* Making a better build * Fixed phpstan config according to newest code quality pack * Better tests * Added code quality pack * Added composer args to composer install command * Added composer args to name of command * Added psalm and fixed associated error * Fixed comment to work with old version of ecs * Upped the http message constraint since it made phpstan fail
1 parent 3f441e8 commit 2ab2e36

File tree

6 files changed

+65
-27
lines changed

6 files changed

+65
-27
lines changed

.github/workflows/build.yaml

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,29 @@ on:
33
push: ~
44
pull_request: ~
55
schedule:
6-
- cron: 5 8 * * 3
6+
- cron: 5 8 * * 5
77
jobs:
88
checks:
9-
name: PHP ${{ matrix.php-versions }}
9+
name: 'PHP ${{ matrix.php-versions }} with composer args: ${{ matrix.composer-args }}'
1010
runs-on: ${{ matrix.operating-system }}
1111
strategy:
1212
fail-fast: false
1313
matrix:
1414
operating-system: [ubuntu-latest]
1515
php-versions: ['7.2', '7.3', '7.4']
16+
composer-args: ['--prefer-lowest --prefer-stable', '']
1617
steps:
1718
- name: Checkout
1819
uses: actions/checkout@v1
1920
- name: Setup PHP, with composer and extensions
20-
uses: shivammathur/setup-php@master
21+
uses: shivammathur/setup-php@v2
2122
with:
2223
php-version: ${{ matrix.php-versions }}
2324
extensions: mbstring
25+
coverage: none
26+
tools: composer-require-checker, composer-unused
2427
- name: Install Composer dependencies
25-
run: composer update --no-progress --no-suggest --prefer-dist --no-interaction
28+
run: composer update --no-progress --no-suggest --prefer-dist --no-interaction ${{ matrix.composer-args }}
2629
- name: Validate composer
2730
run: composer validate --strict
2831
- name: Check composer normalized
@@ -35,3 +38,9 @@ jobs:
3538
run: composer phpspec
3639
- name: Run phpunit
3740
run: composer phpunit
41+
- name: Composer require checker
42+
if: matrix.php-versions == '7.4' && matrix.composer-args == ''
43+
run: composer-require-checker
44+
- name: Composer unused checker
45+
if: matrix.php-versions == '7.4' && matrix.composer-args == ''
46+
run: composer-unused

composer.json

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,15 @@
1313
"php": "^7.2",
1414
"psr/http-client": "^1.0",
1515
"psr/http-factory": "^1.0",
16-
"psr/http-message": "^1.0",
16+
"psr/http-message": "^1.0.1",
1717
"thecodingmachine/safe": "^1.0"
1818
},
1919
"require-dev": {
20-
"ergebnis/composer-normalize": "^2.0",
21-
"korbeil/phpstan-generic-rules": "^0.2",
2220
"kriswallsmith/buzz": "^1.0",
2321
"nyholm/psr7": "^1.1",
24-
"phpspec/phpspec": "^5.1 || ^6.0",
25-
"phpstan/phpstan": "^0.12",
26-
"phpstan/phpstan-strict-rules": "^0.12",
27-
"phpunit/phpunit": "^8.0",
28-
"sylius-labs/coding-standard": "^3.1",
29-
"thecodingmachine/phpstan-safe-rule": "^1.0beta"
22+
"phpspec/phpspec": "^6.2",
23+
"phpunit/phpunit": "^8.5",
24+
"setono/code-quality-pack": "^1.2.1"
3025
},
3126
"config": {
3227
"sort-packages": true
@@ -48,7 +43,10 @@
4843
},
4944
"prefer-stable": true,
5045
"scripts": {
51-
"analyse": "vendor/bin/phpstan analyse -c phpstan.neon -l max src",
46+
"analyse": [
47+
"vendor/bin/phpstan analyse -c phpstan.neon -l max src",
48+
"vendor/bin/psalm"
49+
],
5250
"check-style": "vendor/bin/ecs check --ansi src/ tests/ spec/",
5351
"fix-style": "vendor/bin/ecs check --fix --ansi src/ tests/ spec/",
5452
"phpspec": "vendor/bin/phpspec run",

phpstan.neon

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,3 @@
1-
includes:
2-
- vendor/korbeil/phpstan-generic-rules/extension.neon
3-
- vendor/phpstan/phpstan-strict-rules/rules.neon
4-
- vendor/thecodingmachine/phpstan-safe-rule/phpstan-safe-rule.neon
5-
61
parameters:
72
checkMissingIterableValueType: false
83

psalm.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?xml version="1.0"?>
2+
<psalm
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
errorLevel="1"
5+
resolveFromConfigFile="true"
6+
xmlns="https://getpsalm.org/schema/config"
7+
xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
8+
>
9+
<projectFiles>
10+
<directory name="src"/>
11+
<ignoreFiles>
12+
<directory name="vendor"/>
13+
</ignoreFiles>
14+
</projectFiles>
15+
</psalm>

src/Exception/RequestFailedException.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ public function getStatusCode(): int
5050

5151
private static function resolveUri(UriInterface $uri): string
5252
{
53-
// this will mask the API key in logs etc
54-
$query = preg_replace('/apikey=[^&]+/i', 'apikey=******', $uri->getQuery());
53+
/** @var string $query */
54+
$query = preg_replace('/apikey=[^&]+/i', 'apikey=******', $uri->getQuery()); // this will mask the API key in logs etc
5555

5656
return (string) $uri->withQuery($query);
5757
}

tests/Exception/RequestFailedExceptionTest.php

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Setono\PostNord\Exception;
66

7+
use Nyholm\Psr7\Uri;
78
use PHPUnit\Framework\TestCase;
89
use Psr\Http\Message\RequestInterface;
910
use Psr\Http\Message\ResponseInterface;
@@ -15,13 +16,33 @@ final class RequestFailedExceptionTest extends TestCase
1516
*/
1617
public function it_returns_correct_values(): void
1718
{
18-
$request = $this->createMock(RequestInterface::class);
19-
$response = $this->createMock(ResponseInterface::class);
19+
$uri = new Uri('https://example.com/?apikey=secret&other_param=1');
20+
$request = $this->prophesize(RequestInterface::class);
21+
$request->getUri()->willReturn($uri);
22+
$response = $this->prophesize(ResponseInterface::class);
2023

21-
$exception = new RequestFailedException($request, $response, 200);
24+
$exception = new RequestFailedException($request->reveal(), $response->reveal(), 200);
2225

23-
$this->assertSame($request, $exception->getRequest());
24-
$this->assertSame($response, $exception->getResponse());
25-
$this->assertSame(200, $exception->getStatusCode());
26+
self::assertSame($request->reveal(), $exception->getRequest());
27+
self::assertSame($response->reveal(), $exception->getResponse());
28+
self::assertSame(200, $exception->getStatusCode());
29+
}
30+
31+
/**
32+
* @test
33+
*/
34+
public function it_masks_api_key(): void
35+
{
36+
$uri = new Uri('https://example.com/?apikey=secret&other_param=1');
37+
$request = $this->prophesize(RequestInterface::class);
38+
$request->getUri()->willReturn($uri);
39+
$response = $this->prophesize(ResponseInterface::class);
40+
41+
$exception = new RequestFailedException($request->reveal(), $response->reveal(), 200);
42+
43+
self::assertSame(
44+
'Request failed with status code 200. Request URI was: https://example.com/?apikey=******&other_param=1',
45+
$exception->getMessage()
46+
);
2647
}
2748
}

0 commit comments

Comments
 (0)