Skip to content

Commit

Permalink
Adds method for detection request type from Request object (#9)
Browse files Browse the repository at this point in the history
  • Loading branch information
butschster committed Apr 13, 2023
1 parent 94f3272 commit 9b48bfa
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 0 deletions.
2 changes: 2 additions & 0 deletions psalm.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="https://getpsalm.org/schema/config"
xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
findUnusedBaselineEntry="true"
findUnusedCode="false"
>
<projectFiles>
<directory name="src" />
Expand Down
15 changes: 15 additions & 0 deletions src/Request/RequestType.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

namespace RoadRunner\Centrifugo\Request;

use RoadRunner\Centrifugo\Exception\InvalidRequestTypeException;

enum RequestType: string
{
case Connect = 'connect';
Expand All @@ -13,4 +15,17 @@ enum RequestType: string
case Subscribe = 'subscribe';
case RPC = 'rpc';
case Invalid = 'invalid';

public static function createFrom(RequestInterface $request): self
{
return match (true) {
$request instanceof Connect => RequestType::Connect,
$request instanceof Subscribe => RequestType::Subscribe,
$request instanceof Refresh => RequestType::Refresh,
$request instanceof SubRefresh => RequestType::SubRefresh,
$request instanceof Publish => RequestType::Publish,
$request instanceof RPC => RequestType::RPC,
$request instanceof Invalid => RequestType::Invalid,
};
}
}
66 changes: 66 additions & 0 deletions tests/Unit/Request/RequestTypeTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
<?php

declare(strict_types=1);

namespace RoadRunner\Centrifugo\Tests\Unit\Request;

use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\TestCase;
use RoadRunner\Centrifugo\Request\Connect;
use RoadRunner\Centrifugo\Request\Invalid;
use RoadRunner\Centrifugo\Request\Publish;
use RoadRunner\Centrifugo\Request\Refresh;
use RoadRunner\Centrifugo\Request\RequestInterface;
use RoadRunner\Centrifugo\Request\RequestType;
use RoadRunner\Centrifugo\Request\RPC;
use RoadRunner\Centrifugo\Request\SubRefresh;
use RoadRunner\Centrifugo\Request\Subscribe;

final class RequestTypeTest extends TestCase
{
#[DataProvider('requestTypeDataProvider')]
public function testRequestType(RequestInterface $request, RequestType $expected): void
{
$this->assertSame($expected, RequestType::createFrom($request));
}

public static function requestTypeDataProvider(): \Traversable
{
$worker = \Mockery::mock(\Spiral\RoadRunner\WorkerInterface::class);

yield 'Connect' => [
new Connect($worker, '', '', '', '', [], '', '', [], []),
RequestType::Connect,
];

yield 'Subscribe' => [
new Subscribe($worker, '', '', '', '', '', '', '', [], [], []),
RequestType::Subscribe,
];

yield 'Refresh' => [
new Refresh($worker, '', '', '', '', '', [], []),
RequestType::Refresh,
];

yield 'SubRefresh' => [
new SubRefresh($worker, '', '', '', '', '', '', [], []),
RequestType::SubRefresh,
];

yield 'Publish' => [
new Publish($worker, '', '', '', '', '', '', [], [], []),
RequestType::Publish,
];

yield 'RPC' => [
new RPC($worker, '', '', '', '', '', '', [], [], []),
RequestType::RPC,
];

yield 'Invalid' => [
new Invalid(new \Exception('Test Exception')),
RequestType::Invalid,
];
}
}

0 comments on commit 9b48bfa

Please sign in to comment.