mirror of
				https://github.com/elyby/accounts.git
				synced 2025-05-31 14:11:46 +05:30 
			
		
		
		
	* start updating to PHP 8.3 * taking off! Co-authored-by: ErickSkrauch <erickskrauch@yandex.ru> Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com> * dropped this Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com> * migrate to symfonymailer Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com> * this is so stupid 😭 Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com> * ah, free, at last. Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com> * oh, Gabriel. Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com> * now dawns thy reckoning. Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com> * and thy gore shall GLISTEN before the temples of man. Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com> * creature of steel. Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com> * my gratitude upon thee for my freedom. Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com> * but the crimes thy kind has committed against humanity Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com> * Upgrade PHP-CS-Fixer and do fix the codebase * First review round (maybe I have broken something) * are NOT forgotten. Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com> * Enable parallel PHP-CS-Fixer runner * PHPStan level 1 * PHPStan level 2 * PHPStan level 3 * PHPStan level 4 * PHPStan level 5 * Levels 6 and 7 takes too much effort. Generate a baseline and fix them eventually * Resolve TODO's related to the php-mock * Drastically reduce baseline size with the Rector * More code modernization with help of the Rector * Update GitLab CI --------- Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com> Co-authored-by: ErickSkrauch <erickskrauch@yandex.ru>
		
			
				
	
	
		
			135 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| declare(strict_types=1);
 | |
| 
 | |
| namespace common\tests\unit\tasks;
 | |
| 
 | |
| use common\tasks\DeliveryWebHook;
 | |
| use common\tests\unit\TestCase;
 | |
| use GuzzleHttp\Exception\ConnectException;
 | |
| use GuzzleHttp\Exception\ServerException;
 | |
| use GuzzleHttp\Handler\MockHandler;
 | |
| use GuzzleHttp\HandlerStack;
 | |
| use GuzzleHttp\Middleware;
 | |
| use GuzzleHttp\Psr7\Response;
 | |
| use Psr\Http\Message\RequestInterface;
 | |
| use Psr\Http\Message\ResponseInterface;
 | |
| use yii\queue\Queue;
 | |
| 
 | |
| /**
 | |
|  * @covers \common\tasks\DeliveryWebHook
 | |
|  */
 | |
| class DeliveryWebHookTest extends TestCase {
 | |
| 
 | |
|     private array $historyContainer = [];
 | |
| 
 | |
|     /**
 | |
|      * @var Response|\GuzzleHttp\Exception\GuzzleException
 | |
|      */
 | |
|     private $response;
 | |
| 
 | |
|     public function testCanRetry(): void {
 | |
|         $task = new DeliveryWebHook();
 | |
|         $this->assertFalse($task->canRetry(1, new \Exception()));
 | |
|         $request = $this->createMock(RequestInterface::class);
 | |
|         $response = $this->createMock(ResponseInterface::class);
 | |
|         $this->assertTrue($task->canRetry(4, new ConnectException('', $request)));
 | |
|         $this->assertTrue($task->canRetry(4, new ServerException('', $request, $response)));
 | |
|         $this->assertFalse($task->canRetry(5, new ConnectException('', $request)));
 | |
|         $this->assertFalse($task->canRetry(5, new ServerException('', $request, $response)));
 | |
|     }
 | |
| 
 | |
|     public function testExecuteSuccessDelivery(): void {
 | |
|         $this->response = new Response();
 | |
|         $task = $this->createMockedTask();
 | |
|         $task->type = 'account.edit';
 | |
|         $task->url = 'http://localhost:81/webhooks/ely';
 | |
|         $task->payloads = [
 | |
|             'key' => 'value',
 | |
|             'another' => 'value',
 | |
|         ];
 | |
|         $task->execute($this->createMock(Queue::class));
 | |
|         /** @var \GuzzleHttp\Psr7\Request $request */
 | |
|         $request = $this->historyContainer[0]['request'];
 | |
|         $this->assertSame('http://localhost:81/webhooks/ely', (string)$request->getUri());
 | |
|         $this->assertStringStartsWith('Account-Ely-Hookshot/', $request->getHeaders()['User-Agent'][0]);
 | |
|         $this->assertSame('account.edit', $request->getHeaders()['X-Ely-Accounts-Event'][0]);
 | |
|         $this->assertSame('application/x-www-form-urlencoded', $request->getHeaders()['Content-Type'][0]);
 | |
|         $this->assertArrayNotHasKey('X-Hub-Signature', $request->getHeaders());
 | |
|         $this->assertSame('key=value&another=value', (string)$request->getBody());
 | |
|     }
 | |
| 
 | |
|     public function testExecuteSuccessDeliveryWithSignature(): void {
 | |
|         $this->response = new Response();
 | |
|         $task = $this->createMockedTask();
 | |
|         $task->type = 'account.edit';
 | |
|         $task->url = 'http://localhost:81/webhooks/ely';
 | |
|         $task->secret = 'secret';
 | |
|         $task->payloads = [
 | |
|             'key' => 'value',
 | |
|             'another' => 'value',
 | |
|         ];
 | |
|         $task->execute($this->createMock(Queue::class));
 | |
|         /** @var \GuzzleHttp\Psr7\Request $request */
 | |
|         $request = $this->historyContainer[0]['request'];
 | |
|         $this->assertSame('http://localhost:81/webhooks/ely', (string)$request->getUri());
 | |
|         $this->assertStringStartsWith('Account-Ely-Hookshot/', $request->getHeaders()['User-Agent'][0]);
 | |
|         $this->assertSame('account.edit', $request->getHeaders()['X-Ely-Accounts-Event'][0]);
 | |
|         $this->assertSame('application/x-www-form-urlencoded', $request->getHeaders()['Content-Type'][0]);
 | |
|         $this->assertSame('sha1=3c0b1eef564b2d3a5e9c0f2a8302b1b42b3d4784', $request->getHeaders()['X-Hub-Signature'][0]);
 | |
|         $this->assertSame('key=value&another=value', (string)$request->getBody());
 | |
|     }
 | |
| 
 | |
|     public function testExecuteHandleClientException(): void {
 | |
|         $this->response = new Response(403);
 | |
|         $task = $this->createMockedTask();
 | |
|         $task->type = 'account.edit';
 | |
|         $task->url = 'http://localhost:81/webhooks/ely';
 | |
|         $task->secret = 'secret';
 | |
|         $task->payloads = [
 | |
|             'key' => 'value',
 | |
|             'another' => 'value',
 | |
|         ];
 | |
|         $task->execute($this->createMock(Queue::class));
 | |
|     }
 | |
| 
 | |
|     public function testExecuteUnhandledException(): void {
 | |
|         $this->expectException(ServerException::class);
 | |
| 
 | |
|         $this->response = new Response(502);
 | |
|         $task = $this->createMockedTask();
 | |
|         $task->type = 'account.edit';
 | |
|         $task->url = 'http://localhost:81/webhooks/ely';
 | |
|         $task->secret = 'secret';
 | |
|         $task->payloads = [
 | |
|             'key' => 'value',
 | |
|             'another' => 'value',
 | |
|         ];
 | |
|         $task->execute($this->createMock(Queue::class));
 | |
|     }
 | |
| 
 | |
|     private function createMockedTask(): DeliveryWebHook {
 | |
|         $container = &$this->historyContainer;
 | |
|         $response = $this->response;
 | |
| 
 | |
|         return new class($container, $response) extends DeliveryWebHook {
 | |
|             private $historyContainer;
 | |
| 
 | |
|             public function __construct(
 | |
|                 array & $historyContainer,
 | |
|                 private $response,
 | |
|             ) {
 | |
|                 $this->historyContainer = &$historyContainer;
 | |
|             }
 | |
| 
 | |
|             protected function createStack(): HandlerStack {
 | |
|                 $stack = parent::createStack();
 | |
|                 $stack->setHandler(new MockHandler([$this->response]));
 | |
|                 $stack->push(Middleware::history($this->historyContainer));
 | |
| 
 | |
|                 return $stack;
 | |
|             }
 | |
|         };
 | |
|     }
 | |
| 
 | |
| }
 |