Code
Explorer
You are a developer and looking for Shopware projects?
Apply Now!
onMessageFailed example
$senderLocator
->
expects
(
$this
->
never
(
)
)
->
method
(
'has'
)
;
$senderLocator
->
expects
(
$this
->
never
(
)
)
->
method
(
'get'
)
;
$retryStrategyLocator
=
$this
->
createMock
(
ContainerInterface::
class
)
;
$retryStrategyLocator
->
expects
(
$this
->
once
(
)
)
->
method
(
'has'
)
->
willReturn
(
false
)
;
$listener
=
new
SendFailedMessageForRetryListener
(
$senderLocator
,
$retryStrategyLocator
)
;
$exception
=
new
\
Exception
(
'no!'
)
;
$envelope
=
new
Envelope
(
new
\
stdClass
(
)
)
;
$event
=
new
WorkerMessageFailedEvent
(
$envelope
, 'my_receiver',
$exception
)
;
$listener
->
onMessageFailed
(
$event
)
;
}
public
function
testRecoverableStrategyCausesRetry
(
)
{
$sender
=
$this
->
createMock
(
SenderInterface::
class
)
;
$sender
->
expects
(
$this
->
once
(
)
)
->
method
(
'send'
)
->
willReturnCallback
(
function
DEnvelope
$envelope
)
{
/** @var DelayStamp $delayStamp */
$delayStamp
=
$envelope
->
last
(
DelayStamp::
class
)
;
/** @var RedeliveryStamp $redeliveryStamp */
$redeliveryStamp
=
$envelope
->
last
(
RedeliveryStamp::
class
)
;
->
willReturnArgument
(
0
)
;
$serviceLocator
=
$this
->
createMock
(
ServiceLocator::
class
)
;
$serviceLocator
->
expects
(
$this
->
once
(
)
)
->
method
(
'has'
)
->
willReturn
(
true
)
;
$serviceLocator
->
expects
(
$this
->
once
(
)
)
->
method
(
'get'
)
->
with
(
$receiverName
)
->
willReturn
(
$sender
)
;
$listener
=
new
SendFailedMessageToFailureTransportListener
(
$serviceLocator
)
;
$exception
=
new
\
Exception
(
'no!'
)
;
$envelope
=
new
Envelope
(
new
\
stdClass
(
)
)
;
$event
=
new
WorkerMessageFailedEvent
(
$envelope
, 'my_receiver',
$exception
)
;
$listener
->
onMessageFailed
(
$event
)
;
}
public
function
testDoNothingOnRetryWithServiceLocator
(
)
{
$sender
=
$this
->
createMock
(
SenderInterface::
class
)
;
$sender
->
expects
(
$this
->
never
(
)
)
->
method
(
'send'
)
;
$serviceLocator
=
$this
->
createMock
(
ServiceLocator::
class
)
;
$listener
=
new
SendFailedMessageToFailureTransportListener
(
$serviceLocator
)
;
$envelope
=
new
Envelope
(
new
\
stdClass
(
)
)
;
public
function
testWorkerStopsWhenMaximumCountReached
(
int
$max
, bool
$shouldStop
)
{
$worker
=
$this
->
createMock
(
Worker::
class
)
;
$worker
->
expects
(
$shouldStop
?
$this
->
atLeastOnce
(
)
:
$this
->
never
(
)
)
->
method
(
'stop'
)
;
$failedEvent
=
$this
->
createFailedEvent
(
)
;
$runningEvent
=
new
WorkerRunningEvent
(
$worker
, false
)
;
$failureLimitListener
=
new
StopWorkerOnFailureLimitListener
(
$max
)
;
// simulate three messages (of which 2 failed)
$failureLimitListener
->
onMessageFailed
(
$failedEvent
)
;
$failureLimitListener
->
onWorkerRunning
(
$runningEvent
)
;
$failureLimitListener
->
onWorkerRunning
(
$runningEvent
)
;
$failureLimitListener
->
onMessageFailed
(
$failedEvent
)
;
$failureLimitListener
->
onWorkerRunning
(
$runningEvent
)
;
}
public
static
function
countProvider
(
)
: iterable
{
yield
[
1, true
]
;
yield
'it should stop with core exception wrapped (2)' =>
[
new
HandlerFailedException
(
new
Envelope
(
new
\
stdClass
(
)
)
,
[
new
\
Exception
(
)
,
$t
]
)
, true
]
;
}
/** @dataProvider provideTests */
public
function
test
(
\Throwable
$throwable
, bool
$shouldStop
)
{
$listener
=
new
StopWorkerOnCustomStopExceptionListener
(
)
;
$envelope
=
new
Envelope
(
new
\
stdClass
(
)
)
;
$failedEvent
=
new
WorkerMessageFailedEvent
(
$envelope
, 'my_receiver',
$throwable
)
;
$listener
->
onMessageFailed
(
$failedEvent
)
;
$worker
=
$this
->
createMock
(
Worker::
class
)
;
$worker
->
expects
(
$shouldStop
?
$this
->
once
(
)
:
$this
->
never
(
)
)
->
method
(
'stop'
)
;
$runningEvent
=
new
WorkerRunningEvent
(
$worker
, false
)
;
$listener
->
onWorkerRunning
(
$runningEvent
)
;
}
}
final
class
AddErrorDetailsStampListenerTest
extends
TestCase
{
public
function
testExceptionDetailsAreAdded
(
)
{
$listener
=
new
AddErrorDetailsStampListener
(
)
;
$envelope
=
new
Envelope
(
new
\
stdClass
(
)
)
;
$exception
=
new
\
Exception
(
'It failed!'
)
;
$event
=
new
WorkerMessageFailedEvent
(
$envelope
, 'my_receiver',
$exception
)
;
$expectedStamp
= ErrorDetailsStamp::
create
(
$exception
)
;
$listener
->
onMessageFailed
(
$event
)
;
$this
->
assertEquals
(
$expectedStamp
,
$event
->
getEnvelope
(
)
->
last
(
ErrorDetailsStamp::
class
)
)
;
}
public
function
testWorkerAddsNewErrorDetailsStampOnFailure
(
)
{
$listener
=
new
AddErrorDetailsStampListener
(
)
;
$envelope
=
new
Envelope
(
new
\
stdClass
(
)
,
[
ErrorDetailsStamp::
create
(
new
\
InvalidArgumentException
(
'First error!'
)
)
,
]
)
;