| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- <?php
- namespace Illuminate\Tests\Pipeline;
- use Illuminate\Container\Container;
- use Illuminate\Pipeline\Pipeline;
- use PHPUnit\Framework\TestCase;
- use RuntimeException;
- class PipelineTest extends TestCase
- {
- public function testPipelineBasicUsage()
- {
- $pipeTwo = function ($piped, $next) {
- $_SERVER['__test.pipe.two'] = $piped;
- return $next($piped);
- };
- $result = (new Pipeline(new Container))
- ->send('foo')
- ->through([PipelineTestPipeOne::class, $pipeTwo])
- ->then(function ($piped) {
- return $piped;
- });
- $this->assertSame('foo', $result);
- $this->assertSame('foo', $_SERVER['__test.pipe.one']);
- $this->assertSame('foo', $_SERVER['__test.pipe.two']);
- unset($_SERVER['__test.pipe.one'], $_SERVER['__test.pipe.two']);
- }
- public function testPipelineUsageWithObjects()
- {
- $result = (new Pipeline(new Container))
- ->send('foo')
- ->through([new PipelineTestPipeOne])
- ->then(function ($piped) {
- return $piped;
- });
- $this->assertSame('foo', $result);
- $this->assertSame('foo', $_SERVER['__test.pipe.one']);
- unset($_SERVER['__test.pipe.one']);
- }
- public function testPipelineUsageWithInvokableObjects()
- {
- $result = (new Pipeline(new Container))
- ->send('foo')
- ->through([new PipelineTestPipeTwo])
- ->then(
- function ($piped) {
- return $piped;
- }
- );
- $this->assertSame('foo', $result);
- $this->assertSame('foo', $_SERVER['__test.pipe.one']);
- unset($_SERVER['__test.pipe.one']);
- }
- public function testPipelineUsageWithCallable()
- {
- $function = function ($piped, $next) {
- $_SERVER['__test.pipe.one'] = 'foo';
- return $next($piped);
- };
- $result = (new Pipeline(new Container))
- ->send('foo')
- ->through([$function])
- ->then(
- function ($piped) {
- return $piped;
- }
- );
- $this->assertSame('foo', $result);
- $this->assertSame('foo', $_SERVER['__test.pipe.one']);
- unset($_SERVER['__test.pipe.one']);
- $result = (new Pipeline(new Container))
- ->send('bar')
- ->through($function)
- ->thenReturn();
- $this->assertSame('bar', $result);
- $this->assertSame('foo', $_SERVER['__test.pipe.one']);
- unset($_SERVER['__test.pipe.one']);
- }
- public function testPipelineUsageWithInvokableClass()
- {
- $result = (new Pipeline(new Container))
- ->send('foo')
- ->through([PipelineTestPipeTwo::class])
- ->then(
- function ($piped) {
- return $piped;
- }
- );
- $this->assertSame('foo', $result);
- $this->assertSame('foo', $_SERVER['__test.pipe.one']);
- unset($_SERVER['__test.pipe.one']);
- }
- public function testPipelineUsageWithParameters()
- {
- $parameters = ['one', 'two'];
- $result = (new Pipeline(new Container))
- ->send('foo')
- ->through(PipelineTestParameterPipe::class.':'.implode(',', $parameters))
- ->then(function ($piped) {
- return $piped;
- });
- $this->assertSame('foo', $result);
- $this->assertEquals($parameters, $_SERVER['__test.pipe.parameters']);
- unset($_SERVER['__test.pipe.parameters']);
- }
- public function testPipelineViaChangesTheMethodBeingCalledOnThePipes()
- {
- $pipelineInstance = new Pipeline(new Container);
- $result = $pipelineInstance->send('data')
- ->through(PipelineTestPipeOne::class)
- ->via('differentMethod')
- ->then(function ($piped) {
- return $piped;
- });
- $this->assertSame('data', $result);
- }
- public function testPipelineThrowsExceptionOnResolveWithoutContainer()
- {
- $this->expectException(RuntimeException::class);
- $this->expectExceptionMessage('A container instance has not been passed to the Pipeline.');
- (new Pipeline)->send('data')
- ->through(PipelineTestPipeOne::class)
- ->then(function ($piped) {
- return $piped;
- });
- }
- public function testPipelineThenReturnMethodRunsPipelineThenReturnsPassable()
- {
- $result = (new Pipeline(new Container))
- ->send('foo')
- ->through([PipelineTestPipeOne::class])
- ->thenReturn();
- $this->assertSame('foo', $result);
- $this->assertSame('foo', $_SERVER['__test.pipe.one']);
- unset($_SERVER['__test.pipe.one']);
- }
- }
- class PipelineTestPipeOne
- {
- public function handle($piped, $next)
- {
- $_SERVER['__test.pipe.one'] = $piped;
- return $next($piped);
- }
- public function differentMethod($piped, $next)
- {
- return $next($piped);
- }
- }
- class PipelineTestPipeTwo
- {
- public function __invoke($piped, $next)
- {
- $_SERVER['__test.pipe.one'] = $piped;
- return $next($piped);
- }
- }
- class PipelineTestParameterPipe
- {
- public function handle($piped, $next, $parameter1 = null, $parameter2 = null)
- {
- $_SERVER['__test.pipe.parameters'] = [$parameter1, $parameter2];
- return $next($piped);
- }
- }
|