Skip to content

Commit

Permalink
Merge branch 'release/v1.0.0-alpha.4'
Browse files Browse the repository at this point in the history
  • Loading branch information
nekofar committed Sep 22, 2021
2 parents 67af713 + 8b4bedd commit d265204
Show file tree
Hide file tree
Showing 4 changed files with 124 additions and 4 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/static.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: 7.4
php-version: 7.3
tools: composer:v2
coverage: none

Expand All @@ -40,7 +40,7 @@ jobs:
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: 7.4
php-version: 7.3
tools: composer:v2
coverage: none

Expand Down
43 changes: 43 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,49 @@
# Changelog
All notable changes to this project will be documented in this file.

## [1.0.0-alpha.4] - 2021-09-22

### Miscellaneous Tasks

- Add `pestphp/pest-plugin-global-assertions:^1.0` package

### Testing

- Add more tests for `mockClient`
- Replace instance assertions by global functions
- Replace assertions by expectations

## [1.0.0-alpha.3] - 2021-09-22

### Documentation

- Add some description for `mockClient`
- Add license docblock to the top of files

### Features

- Keep single instance for `MockClient` using `mockClient` function
- Add new `assertRequestCount` for assert `MockClient` request count

### Miscellaneous Tasks

- Replace `php-cs-fixer` by `phpcs`

### Refactor

- Rename `client` function to `mockClient`
- Rename `Client` trait to `ClientTrait`
- Add missing strict type declarations
- Replace mixed type usages by proper types

### Styling

- Solve whitespace issues all over codes

### Testing

- Add a test to check it can send multiple requests

## [1.0.0-alpha.2] - 2021-09-21

### Documentation
Expand Down
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
"require-dev": {
"ergebnis/phpstan-rules": "^0.15.3",
"nekofar/dev-tools": "^1.2",
"pestphp/pest-plugin-global-assertions": "^1.0",
"phpstan/phpstan-strict-rules": "^0.12.11",
"thecodingmachine/phpstan-strict-rules": "^0.12.1"
},
Expand Down
80 changes: 78 additions & 2 deletions tests/MockClient.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,90 @@
declare(strict_types=1);

use GuzzleHttp\Psr7\Request;
use Http\Client\Exception\RequestException;
use Http\Message\RequestMatcher\RequestMatcher;
use Psr\Http\Message\ResponseInterface;

use function Nekofar\Pest\MockClient\mockClient;

it('can send multiple requests', function (): void {
$firstRequest = new Request('GET', '/');
$secondRequest = new Request('POST', '/');

mockClient()->sendRequest($firstRequest);
mockClient()->sendRequest($secondRequest);

expect(mockClient()->getRequests())->toHaveCount(2);
});

it('can add response', function (): void {
$request = new Request('GET', '/');

$response = $this->createMock(ResponseInterface::class);
mockClient()->addResponse($response);

$returnedResponse = mockClient()->sendRequest($request);
expect($returnedResponse)->toBe($response);
expect(mockClient()->getLastRequest())->toBe($request);
});

it('can set default response', function (): void {
$firstRequest = new Request('GET', '/');
$secondRequest = new Request('POST', '/');

$response = $this->createMock(ResponseInterface::class);
mockClient()->setDefaultResponse($response);

$firstReturnedResponse = mockClient()->sendRequest($firstRequest);
$secondReturnedResponse = mockClient()->sendRequest($secondRequest);
expect($firstReturnedResponse)->toBe($response);
expect($secondReturnedResponse)->toBe($response);
});

it('can throw exception', function (): void {
$request = new Request('GET', '/');

$exception = new Exception('Whoops!');
mockClient()->addException($exception);

mockClient()->sendRequest($request);
mockClient()->sendRequest($request);
})->throws(Exception::class, 'Whoops!'); // phpcs:ignore

expect(mockClient()->getRequests())->toHaveCount(2);
it('can throw default exception', function (): void {
$firstRequest = new Request('GET', '/');
$secondRequest = new Request('POST', '/');

$exception = new Exception('Whoops!');
mockClient()->setDefaultException($exception);

$response = $this->createMock(ResponseInterface::class);
mockClient()->addResponse($response);

// The first request will returns the added response.
mockClient()->sendRequest($firstRequest);
// There is no more added response, the default exception will be thrown.
mockClient()->sendRequest($secondRequest);
})->throws(Exception::class, 'Whoops!'); // phpcs:ignore

it('can send request by request matcher', function (): void {
$request = new Request('GET', '/');

$requestMatcher = new RequestMatcher();

$response = $this->createMock(ResponseInterface::class);
mockClient()->on($requestMatcher, $response);

$returnedResponse = mockClient()->sendRequest($request);
expect($returnedResponse)->toBe($response);
});

it('can throw exception by request matcher', function (): void {
$request = new Request('GET', '/');

$requestMatcher = new RequestMatcher();

$exception = new RequestException('Whoops!', $request);
mockClient()->on($requestMatcher, $exception);

mockClient()->sendRequest($request);
})->throws(RequestException::class, 'Whoops!'); // phpcs:ignore

0 comments on commit d265204

Please sign in to comment.