Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions SendWebRequest.php
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ public static function Init()
*/
public static function AddToQueue(WebRequest $oWebRequest, $oLog = null)
{
$oNew = new static();
$oNew = new SendWebRequest();
if ($oLog)
{
$oNew->Set('event_id', $oLog->GetKey());
Expand All @@ -102,7 +102,8 @@ public function DoProcess()

$oSenderService = WebRequestSender::GetInstance();
$aResult = $oSenderService->Send($oWebRequest, $aIssues, $oLog, WebRequestSender::ENUM_SEND_MODE_SYNC);
switch ($aResult['sender_status'])
$iStatus = $aResult['sender_status'] ?? "";
switch ($iStatus)
{
case WebRequestSender::ENUM_SEND_STATE_OK:
return 'Sent';
Expand All @@ -111,7 +112,10 @@ public function DoProcess()
return 'Whoops! Seems like a bug occurred, the request should be sent in synchronous mode';

case WebRequestSender::ENUM_SEND_STATE_ERROR:
return 'Failed: '.implode(', ', $aIssues);
throw new Exception('Failed: '.implode(', ', $aIssues));

Comment thread
odain-cbd marked this conversation as resolved.
default:
return "Whoops! unexpected behavior (sender_status: $iStatus)";
}
}
}
}
2 changes: 1 addition & 1 deletion module.combodo-webhook-integration.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
//
//
SetupWebPage::AddModule(__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'combodo-webhook-integration/1.4.6',
'combodo-webhook-integration/1.4.7',
array(
//
'label' => 'Webhook integrations',
Expand Down
32 changes: 17 additions & 15 deletions src/Service/WebRequestSender.php
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ class WebRequestSender

public static function SetMockDoPostRequest(bool $mockDoPostRequest): void
{
static::$mockDoPostRequest = $mockDoPostRequest;
self::$mockDoPostRequest = $mockDoPostRequest;
}
/**
* Return the singleton instance for this class
Expand All @@ -71,12 +71,16 @@ public static function SetMockDoPostRequest(bool $mockDoPostRequest): void
*/
public static function GetInstance()
{
if(static::$oInstance === null)
if(self::$oInstance === null)
{
static::$oInstance = new static();
self::$oInstance = new WebRequestSender();
}

return static::$oInstance;
return self::$oInstance;
}

public static function SetInstance(?WebRequestSender $oInstance) : void {
self::$oInstance = $oInstance;
}
Comment on lines 72 to 84

/**
Expand All @@ -93,22 +97,20 @@ public function Send(WebRequest $oRequest, &$aIssues, $oLog = null, $sForcedSend
{
if($sForcedSendMode === static::ENUM_SEND_MODE_SYNC)
{
$aResult = $this->SendSynchronously($oRequest, $aIssues, $oLog);
}
elseif($sForcedSendMode === static::ENUM_SEND_MODE_ASYNC)
{
$aResult = $this->SendAsynchronously($oRequest, $aIssues, $oLog);
return $this->SendSynchronously($oRequest, $aIssues, $oLog);
}
elseif(MetaModel::GetModuleSetting('combodo-webhook-integration', 'prefer_asynchronous', (static::DEFAULT_SEND_MODE === static::ENUM_SEND_MODE_ASYNC)))

if($sForcedSendMode === static::ENUM_SEND_MODE_ASYNC)
{
$aResult = $this->SendAsynchronously($oRequest, $aIssues, $oLog);
return $this->SendAsynchronously($oRequest, $aIssues, $oLog);
}
else

if(MetaModel::GetModuleSetting('combodo-webhook-integration', 'prefer_asynchronous', (static::DEFAULT_SEND_MODE === static::ENUM_SEND_MODE_ASYNC)))
{
$aResult = $this->SendSynchronously($oRequest, $aIssues, $oLog);
return $this->SendAsynchronously($oRequest, $aIssues, $oLog);
}

return $aResult;
return $this->SendSynchronously($oRequest, $aIssues, $oLog);
}

/**
Expand Down Expand Up @@ -205,4 +207,4 @@ private function DoPostRequest($sUrl, $aData, $sOptionnalHeaders = null, &$aResp
return utils::DoPostRequest($sUrl, $aData, $sOptionnalHeaders, $aResponseHeaders, $aCurlOptions);
}
}
}
}
8 changes: 4 additions & 4 deletions src/Service/WebRequestService.php
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@ protected function __construct()

final public static function GetInstance(): WebRequestService
{
if (!isset(static::$oInstance)) {
static::$oInstance = new static();
if (!isset(self::$oInstance)) {
self::$oInstance = new WebRequestService();
}

return static::$oInstance;
return self::$oInstance;
}
Comment on lines 15 to 22

/**
Expand All @@ -34,7 +34,7 @@ final public static function SetInstance(WebRequestService $oInstance)
*/
final public static function ResetInstance()
{
self::$oInstance = new static();
self::$oInstance = new WebRequestService();
}

public function ObfuscateRawHeader(string $sRawHeaders) : string {
Expand Down
89 changes: 89 additions & 0 deletions tests/php-unit-tests/SendWebRequestTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
<?php

namespace Combodo\iTop\Core\Test;

namespace Combodo\iTop\Core\Test;

use Combodo\iTop\Core\WebRequest;
use Combodo\iTop\Service\WebRequestSender;
use Combodo\iTop\Test\UnitTest\ItopDataTestCase;
use SendWebRequest;

/**
* @runTestsInSeparateProcesses
* @preserveGlobalState disabled
* @backupGlobals disabled
*/
class SendWebRequestTest extends ItopDataTestCase
{
private WebRequestSender $oWebRequestSender;

protected function setUp(): void
{
parent::setUp();
$this->RequireOnceItopFile('env-production/combodo-webhook-integration/vendor/autoload.php');

$this->oWebRequestSender = $this->createMock(WebRequestSender::class);
WebRequestSender::SetInstance($this->oWebRequestSender);
}

protected function tearDown(): void
{
parent::tearDown();
WebRequestSender::SetInstance(null);
}

public static function DoProcessProvider()
{
return [
'cornercase error that should not happen' => [666, "Whoops! unexpected behavior (sender_status: 666)"],
'sent ENUM_SEND_STATE_OK' => [0, 'Sent'],
'sent ENUM_SEND_STATE_PENDING issue' => [1, 'Whoops! Seems like a bug occurred, the request should be sent in synchronous mode'],
];
}

/**
* @dataProvider DoProcessProvider
*/
public function testDoProcessOK($iSenderStatus, $expected)
{
/** @var SendWebRequest $oSendWebRequest */
$oWebRequest = new WebRequest('http://127.0.0.1');
$aParams = [
'request' => serialize($oWebRequest),
];
$oSendWebRequest = $this->GivenObject(SendWebRequest::class, $aParams);

$aResult = [
'sender_status' => $iSenderStatus,
];

$this->oWebRequestSender->expects(self::once())
->method("Send")
->willReturn($aResult);

self::assertEquals($expected, $oSendWebRequest->DoProcess());
}

public function testDoProcessFailAndMakesureRetryWillBePossible()
{
/** @var SendWebRequest $oSendWebRequest */
$oWebRequest = new WebRequest('http://127.0.0.1');
$aParams = [
'request' => serialize($oWebRequest),
];
$oSendWebRequest = $this->GivenObject(SendWebRequest::class, $aParams);

$sExceptionThrownMsg = 'Error while sending request to webhook: BLABLA';
$this->oWebRequestSender->expects(self::once())
->method("Send")
->will(
$this->returnCallback(function ($oWebRequest, &$aIssues) use ($sExceptionThrownMsg) {
$aIssues []= $sExceptionThrownMsg;
return ['sender_status' => WebRequestSender::ENUM_SEND_STATE_ERROR ];
}));

$this->expectExceptionMessage("Failed: $sExceptionThrownMsg");
$oSendWebRequest->DoProcess();
}
}