123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- <?php
- namespace GuzzleHttp\Test\Handler;
- use GuzzleHttp\Handler\MockHandler;
- use GuzzleHttp\Promise\PromiseInterface;
- use GuzzleHttp\Psr7\Request;
- use GuzzleHttp\Psr7\Response;
- use GuzzleHttp\TransferStats;
- use PHPUnit\Framework\TestCase;
- /**
- * @covers \GuzzleHttp\Handler\MockHandler
- */
- class MockHandlerTest extends TestCase
- {
- public function testReturnsMockResponse()
- {
- $res = new Response();
- $mock = new MockHandler([$res]);
- $request = new Request('GET', 'http://example.com');
- $p = $mock($request, []);
- $this->assertSame($res, $p->wait());
- }
- public function testIsCountable()
- {
- $res = new Response();
- $mock = new MockHandler([$res, $res]);
- $this->assertCount(2, $mock);
- }
- public function testEmptyHandlerIsCountable()
- {
- $this->assertCount(0, new MockHandler());
- }
- /**
- * @expectedException \InvalidArgumentException
- */
- public function testEnsuresEachAppendIsValid()
- {
- $mock = new MockHandler(['a']);
- $request = new Request('GET', 'http://example.com');
- $mock($request, []);
- }
- public function testCanQueueExceptions()
- {
- $e = new \Exception('a');
- $mock = new MockHandler([$e]);
- $request = new Request('GET', 'http://example.com');
- $p = $mock($request, []);
- try {
- $p->wait();
- $this->fail();
- } catch (\Exception $e2) {
- $this->assertSame($e, $e2);
- }
- }
- public function testCanGetLastRequestAndOptions()
- {
- $res = new Response();
- $mock = new MockHandler([$res]);
- $request = new Request('GET', 'http://example.com');
- $mock($request, ['foo' => 'bar']);
- $this->assertSame($request, $mock->getLastRequest());
- $this->assertSame(['foo' => 'bar'], $mock->getLastOptions());
- }
- public function testSinkFilename()
- {
- $filename = sys_get_temp_dir().'/mock_test_'.uniqid();
- $res = new Response(200, [], 'TEST CONTENT');
- $mock = new MockHandler([$res]);
- $request = new Request('GET', '/');
- $p = $mock($request, ['sink' => $filename]);
- $p->wait();
- $this->assertFileExists($filename);
- $this->assertStringEqualsFile($filename, 'TEST CONTENT');
- unlink($filename);
- }
- public function testSinkResource()
- {
- $file = tmpfile();
- $meta = stream_get_meta_data($file);
- $res = new Response(200, [], 'TEST CONTENT');
- $mock = new MockHandler([$res]);
- $request = new Request('GET', '/');
- $p = $mock($request, ['sink' => $file]);
- $p->wait();
- $this->assertFileExists($meta['uri']);
- $this->assertStringEqualsFile($meta['uri'], 'TEST CONTENT');
- }
- public function testSinkStream()
- {
- $stream = new \GuzzleHttp\Psr7\Stream(tmpfile());
- $res = new Response(200, [], 'TEST CONTENT');
- $mock = new MockHandler([$res]);
- $request = new Request('GET', '/');
- $p = $mock($request, ['sink' => $stream]);
- $p->wait();
- $this->assertFileExists($stream->getMetadata('uri'));
- $this->assertStringEqualsFile($stream->getMetadata('uri'), 'TEST CONTENT');
- }
- public function testCanEnqueueCallables()
- {
- $r = new Response();
- $fn = function ($req, $o) use ($r) { return $r; };
- $mock = new MockHandler([$fn]);
- $request = new Request('GET', 'http://example.com');
- $p = $mock($request, ['foo' => 'bar']);
- $this->assertSame($r, $p->wait());
- }
- /**
- * @expectedException \InvalidArgumentException
- */
- public function testEnsuresOnHeadersIsCallable()
- {
- $res = new Response();
- $mock = new MockHandler([$res]);
- $request = new Request('GET', 'http://example.com');
- $mock($request, ['on_headers' => 'error!']);
- }
- /**
- * @expectedException \GuzzleHttp\Exception\RequestException
- * @expectedExceptionMessage An error was encountered during the on_headers event
- * @expectedExceptionMessage test
- */
- public function testRejectsPromiseWhenOnHeadersFails()
- {
- $res = new Response();
- $mock = new MockHandler([$res]);
- $request = new Request('GET', 'http://example.com');
- $promise = $mock($request, [
- 'on_headers' => function () {
- throw new \Exception('test');
- }
- ]);
- $promise->wait();
- }
- public function testInvokesOnFulfilled()
- {
- $res = new Response();
- $mock = new MockHandler([$res], function ($v) use (&$c) {
- $c = $v;
- });
- $request = new Request('GET', 'http://example.com');
- $mock($request, [])->wait();
- $this->assertSame($res, $c);
- }
- public function testInvokesOnRejected()
- {
- $e = new \Exception('a');
- $c = null;
- $mock = new MockHandler([$e], null, function ($v) use (&$c) { $c = $v; });
- $request = new Request('GET', 'http://example.com');
- $mock($request, [])->wait(false);
- $this->assertSame($e, $c);
- }
- /**
- * @expectedException \OutOfBoundsException
- */
- public function testThrowsWhenNoMoreResponses()
- {
- $mock = new MockHandler();
- $request = new Request('GET', 'http://example.com');
- $mock($request, []);
- }
- /**
- * @expectedException \GuzzleHttp\Exception\BadResponseException
- */
- public function testCanCreateWithDefaultMiddleware()
- {
- $r = new Response(500);
- $mock = MockHandler::createWithMiddleware([$r]);
- $request = new Request('GET', 'http://example.com');
- $mock($request, ['http_errors' => true])->wait();
- }
- public function testInvokesOnStatsFunctionForResponse()
- {
- $res = new Response();
- $mock = new MockHandler([$res]);
- $request = new Request('GET', 'http://example.com');
- $stats = null;
- $onStats = function (TransferStats $s) use (&$stats) {
- $stats = $s;
- };
- $p = $mock($request, ['on_stats' => $onStats]);
- $p->wait();
- $this->assertSame($res, $stats->getResponse());
- $this->assertSame($request, $stats->getRequest());
- }
- public function testInvokesOnStatsFunctionForError()
- {
- $e = new \Exception('a');
- $c = null;
- $mock = new MockHandler([$e], null, function ($v) use (&$c) { $c = $v; });
- $request = new Request('GET', 'http://example.com');
- $stats = null;
- $onStats = function (TransferStats $s) use (&$stats) {
- $stats = $s;
- };
- $mock($request, ['on_stats' => $onStats])->wait(false);
- $this->assertSame($e, $stats->getHandlerErrorData());
- $this->assertNull($stats->getResponse());
- $this->assertSame($request, $stats->getRequest());
- }
- }
|