public function testCallCancelCallInQueue()
{
$sessionMockBuilder = $this->getMockBuilder('\\Thruway\\Session')->setMethods(['sendMessage'])->disableOriginalConstructor();
$realm = new \Thruway\Realm('realm1');
/** @var Session $eeSession */
$eeSession = $sessionMockBuilder->getMock();
$eeSession->setRealm($realm);
$eeSession->setHelloMessage($this->_helloMessage);
$erSession = $sessionMockBuilder->getMock();
$erSession->setRealm($realm);
$erSession->expects($this->exactly(1))->method('sendMessage')->withConsecutive([$this->callback(function (\Thruway\Message\ErrorMessage $msg) {
$this->assertEquals("wamp.error.canceled", $msg->getErrorURI());
$this->assertObjectHasAttribute("_thruway_removed_from_queue", $msg->getDetails());
$this->assertTrue($msg->getDetails()->_thruway_removed_from_queue);
return true;
})]);
$dealer = new \Thruway\Role\Dealer();
$registerMsg = new \Thruway\Message\RegisterMessage(1, (object) ["thruway_multiregister" => true], "cancel_queued_call_procedure");
$dealer->handleRegisterMessage(new \Thruway\Event\MessageEvent($eeSession, $registerMsg));
$callMessage = new \Thruway\Message\CallMessage(2, (object) [], 'cancel_queued_call_procedure');
$dealer->handleCallMessage(new \Thruway\Event\MessageEvent($erSession, $callMessage));
// this should get through to callee
$callMessage->setRequestId(3);
$dealer->handleCallMessage(new \Thruway\Event\MessageEvent($erSession, $callMessage));
// this should be in the queue now
$cancelMessage = new \Thruway\Message\CancelMessage(3, (object) []);
$dealer->handleCancelMessage(new \Thruway\Event\MessageEvent($erSession, $cancelMessage));
}