Вход Регистрация
Файл: gapps/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/AbstractSmtpEventSupportTest.php
Строк: 619
<?php

require_once __DIR__.'/AbstractSmtpTest.php';

abstract class 
Swift_Transport_AbstractSmtpEventSupportTest extends Swift_Transport_AbstractSmtpTest
{
    public function 
testRegisterPluginLoadsPluginInEventDispatcher()
    {
        
$buf $this->_getBuffer();
        
$dispatcher $this->_createEventDispatcher(false);
        
$listener $this->getMockery('Swift_Events_EventListener');
        
$smtp $this->_getTransport($buf$dispatcher);
        
$dispatcher->shouldReceive('bindEventListener')
                   ->
once()
                   ->
with($listener);

        
$smtp->registerPlugin($listener);
    }

    public function 
testSendingDispatchesBeforeSendEvent()
    {
        
$buf $this->_getBuffer();
        
$dispatcher $this->_createEventDispatcher(false);
        
$message $this->_createMessage();
        
$smtp $this->_getTransport($buf$dispatcher);
        
$evt $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing();

        
$message->shouldReceive('getFrom')
                ->
zeroOrMoreTimes()
                ->
andReturn(array('chris@swiftmailer.org' => null));
        
$message->shouldReceive('getTo')
                ->
zeroOrMoreTimes()
                ->
andReturn(array('mark@swiftmailer.org' => 'Mark'));
        
$dispatcher->shouldReceive('createSendEvent')
                   ->
once()
                   ->
andReturn($evt);
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
once()
                   ->
with($evt'beforeSendPerformed');
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
zeroOrMoreTimes();
        
$evt->shouldReceive('bubbleCancelled')
            ->
zeroOrMoreTimes()
            ->
andReturn(false);

        
$this->_finishBuffer($buf);
        
$smtp->start();
        
$this->assertEquals(1$smtp->send($message));
    }

    public function 
testSendingDispatchesSendEvent()
    {
        
$buf $this->_getBuffer();
        
$dispatcher $this->_createEventDispatcher(false);
        
$message $this->_createMessage();
        
$smtp $this->_getTransport($buf$dispatcher);
        
$evt $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing();

        
$message->shouldReceive('getFrom')
                ->
zeroOrMoreTimes()
                ->
andReturn(array('chris@swiftmailer.org' => null));
        
$message->shouldReceive('getTo')
                ->
zeroOrMoreTimes()
                ->
andReturn(array('mark@swiftmailer.org' => 'Mark'));
        
$dispatcher->shouldReceive('createSendEvent')
                   ->
once()
                   ->
andReturn($evt);
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
once()
                   ->
with($evt'sendPerformed');
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
zeroOrMoreTimes();
        
$evt->shouldReceive('bubbleCancelled')
            ->
zeroOrMoreTimes()
            ->
andReturn(false);

        
$this->_finishBuffer($buf);
        
$smtp->start();
        
$this->assertEquals(1$smtp->send($message));
    }

    public function 
testSendEventCapturesFailures()
    {
        
$buf $this->_getBuffer();
        
$dispatcher $this->_createEventDispatcher(false);
        
$evt $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing();
        
$smtp $this->_getTransport($buf$dispatcher);
        
$message $this->_createMessage();

        
$message->shouldReceive('getFrom')
                ->
zeroOrMoreTimes()
                ->
andReturn(array('chris@swiftmailer.org' => null));
        
$message->shouldReceive('getTo')
                ->
zeroOrMoreTimes()
                ->
andReturn(array('mark@swiftmailer.org' => 'Mark'));
        
$buf->shouldReceive('write')
            ->
once()
            ->
with("MAIL FROM:<chris@swiftmailer.org>rn")
            ->
andReturn(1);
        
$buf->shouldReceive('readLine')
            ->
once()
            ->
with(1)
            ->
andReturn("250 OKrn");
        
$buf->shouldReceive('write')
            ->
once()
            ->
with("RCPT TO:<mark@swiftmailer.org>rn")
            ->
andReturn(2);
        
$buf->shouldReceive('readLine')
            ->
once()
            ->
with(2)
            ->
andReturn("500 Not nowrn");
        
$dispatcher->shouldReceive('createSendEvent')
                   ->
zeroOrMoreTimes()
                   ->
with($smtpMockery::any())
                   ->
andReturn($evt);
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
once()
                   ->
with($evt'sendPerformed');
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
zeroOrMoreTimes();
        
$evt->shouldReceive('bubbleCancelled')
            ->
zeroOrMoreTimes()
            ->
andReturn(false);
        
$evt->shouldReceive('setFailedRecipients')
            ->
once()
            ->
with(array('mark@swiftmailer.org'));

        
$this->_finishBuffer($buf);
        
$smtp->start();
        
$this->assertEquals(0$smtp->send($message));
    }

    public function 
testSendEventHasResultFailedIfAllFailures()
    {
        
$buf $this->_getBuffer();
        
$dispatcher $this->_createEventDispatcher(false);
        
$evt $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing();
        
$smtp $this->_getTransport($buf$dispatcher);
        
$message $this->_createMessage();

        
$message->shouldReceive('getFrom')
                ->
zeroOrMoreTimes()
                ->
andReturn(array('chris@swiftmailer.org' => null));
        
$message->shouldReceive('getTo')
                ->
zeroOrMoreTimes()
                ->
andReturn(array('mark@swiftmailer.org' => 'Mark'));
        
$buf->shouldReceive('write')
            ->
once()
            ->
with("MAIL FROM:<chris@swiftmailer.org>rn")
            ->
andReturn(1);
        
$buf->shouldReceive('readLine')
            ->
once()
            ->
with(1)
            ->
andReturn("250 OKrn");
        
$buf->shouldReceive('write')
            ->
once()
            ->
with("RCPT TO:<mark@swiftmailer.org>rn")
            ->
andReturn(2);
        
$buf->shouldReceive('readLine')
            ->
once()
            ->
with(2)
            ->
andReturn("500 Not nowrn");
        
$dispatcher->shouldReceive('createSendEvent')
                   ->
zeroOrMoreTimes()
                   ->
with($smtpMockery::any())
                   ->
andReturn($evt);
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
once()
                   ->
with($evt'sendPerformed');
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
zeroOrMoreTimes();
        
$evt->shouldReceive('bubbleCancelled')
            ->
zeroOrMoreTimes()
            ->
andReturn(false);
        
$evt->shouldReceive('setResult')
            ->
once()
            ->
with(Swift_Events_SendEvent::RESULT_FAILED);

        
$this->_finishBuffer($buf);
        
$smtp->start();
        
$this->assertEquals(0$smtp->send($message));
    }

    public function 
testSendEventHasResultTentativeIfSomeFailures()
    {
        
$buf $this->_getBuffer();
        
$dispatcher $this->_createEventDispatcher(false);
        
$evt $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing();
        
$smtp $this->_getTransport($buf$dispatcher);
        
$message $this->_createMessage();

        
$message->shouldReceive('getFrom')
                ->
zeroOrMoreTimes()
                ->
andReturn(array('chris@swiftmailer.org' => null));
        
$message->shouldReceive('getTo')
                ->
zeroOrMoreTimes()
                ->
andReturn(array(
                    
'mark@swiftmailer.org' => 'Mark',
                    
'chris@site.tld' => 'Chris',
                ));
        
$buf->shouldReceive('write')
            ->
once()
            ->
with("MAIL FROM:<chris@swiftmailer.org>rn")
            ->
andReturn(1);
        
$buf->shouldReceive('readLine')
            ->
once()
            ->
with(1)
            ->
andReturn("250 OKrn");
        
$buf->shouldReceive('write')
            ->
once()
            ->
with("RCPT TO:<mark@swiftmailer.org>rn")
            ->
andReturn(2);
        
$buf->shouldReceive('readLine')
            ->
once()
            ->
with(2)
            ->
andReturn("500 Not nowrn");
        
$dispatcher->shouldReceive('createSendEvent')
                   ->
zeroOrMoreTimes()
                   ->
with($smtpMockery::any())
                   ->
andReturn($evt);
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
once()
                   ->
with($evt'sendPerformed');
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
zeroOrMoreTimes();
        
$evt->shouldReceive('bubbleCancelled')
            ->
zeroOrMoreTimes()
            ->
andReturn(false);
        
$evt->shouldReceive('setResult')
            ->
once()
            ->
with(Swift_Events_SendEvent::RESULT_TENTATIVE);

        
$this->_finishBuffer($buf);
        
$smtp->start();
        
$this->assertEquals(1$smtp->send($message));
    }

    public function 
testSendEventHasResultSuccessIfNoFailures()
    {
        
$buf $this->_getBuffer();
        
$dispatcher $this->_createEventDispatcher(false);
        
$evt $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing();
        
$smtp $this->_getTransport($buf$dispatcher);
        
$message $this->_createMessage();

        
$message->shouldReceive('getFrom')
                ->
zeroOrMoreTimes()
                ->
andReturn(array('chris@swiftmailer.org' => null));
        
$message->shouldReceive('getTo')
                ->
zeroOrMoreTimes()
                ->
andReturn(array(
                    
'mark@swiftmailer.org' => 'Mark',
                    
'chris@site.tld' => 'Chris',
                ));
        
$dispatcher->shouldReceive('createSendEvent')
                   ->
zeroOrMoreTimes()
                   ->
with($smtpMockery::any())
                   ->
andReturn($evt);
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
once()
                   ->
with($evt'sendPerformed');
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
zeroOrMoreTimes();
        
$evt->shouldReceive('bubbleCancelled')
            ->
zeroOrMoreTimes()
            ->
andReturn(false);
        
$evt->shouldReceive('setResult')
            ->
once()
            ->
with(Swift_Events_SendEvent::RESULT_SUCCESS);

        
$this->_finishBuffer($buf);
        
$smtp->start();
        
$this->assertEquals(2$smtp->send($message));
    }

    public function 
testCancellingEventBubbleBeforeSendStopsEvent()
    {
        
$buf $this->_getBuffer();
        
$dispatcher $this->_createEventDispatcher(false);
        
$evt $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing();
        
$smtp $this->_getTransport($buf$dispatcher);
        
$message $this->_createMessage();

        
$message->shouldReceive('getFrom')
                ->
zeroOrMoreTimes()
                ->
andReturn(array('chris@swiftmailer.org' => null));
        
$message->shouldReceive('getTo')
                ->
zeroOrMoreTimes()
                ->
andReturn(array('mark@swiftmailer.org' => 'Mark'));
        
$dispatcher->shouldReceive('createSendEvent')
                   ->
zeroOrMoreTimes()
                   ->
with($smtpMockery::any())
                   ->
andReturn($evt);
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
once()
                   ->
with($evt'beforeSendPerformed');
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
zeroOrMoreTimes();
        
$evt->shouldReceive('bubbleCancelled')
            ->
atLeast()->once()
            ->
andReturn(true);

        
$this->_finishBuffer($buf);
        
$smtp->start();
        
$this->assertEquals(0$smtp->send($message));
    }

    public function 
testStartingTransportDispatchesTransportChangeEvent()
    {
        
$buf $this->_getBuffer();
        
$dispatcher $this->_createEventDispatcher(false);
        
$evt $this->getMockery('Swift_Events_TransportChangeEvent');
        
$smtp $this->_getTransport($buf$dispatcher);

        
$dispatcher->shouldReceive('createTransportChangeEvent')
                   ->
atLeast()->once()
                   ->
with($smtp)
                   ->
andReturn($evt);
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
once()
                   ->
with($evt'transportStarted');
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
zeroOrMoreTimes();
        
$evt->shouldReceive('bubbleCancelled')
            ->
atLeast()->once()
            ->
andReturn(false);

        
$this->_finishBuffer($buf);
        
$smtp->start();
    }

    public function 
testStartingTransportDispatchesBeforeTransportChangeEvent()
    {
        
$buf $this->_getBuffer();
        
$dispatcher $this->_createEventDispatcher(false);
        
$evt $this->getMockery('Swift_Events_TransportChangeEvent');
        
$smtp $this->_getTransport($buf$dispatcher);

        
$dispatcher->shouldReceive('createTransportChangeEvent')
                   ->
atLeast()->once()
                   ->
with($smtp)
                   ->
andReturn($evt);
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
once()
                   ->
with($evt'beforeTransportStarted');
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
zeroOrMoreTimes();
        
$evt->shouldReceive('bubbleCancelled')
            ->
atLeast()->once()
            ->
andReturn(false);

        
$this->_finishBuffer($buf);
        
$smtp->start();
    }

    public function 
testCancellingBubbleBeforeTransportStartStopsEvent()
    {
        
$buf $this->_getBuffer();
        
$dispatcher $this->_createEventDispatcher(false);
        
$evt $this->getMockery('Swift_Events_TransportChangeEvent');
        
$smtp $this->_getTransport($buf$dispatcher);

        
$dispatcher->shouldReceive('createTransportChangeEvent')
                   ->
atLeast()->once()
                   ->
with($smtp)
                   ->
andReturn($evt);
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
once()
                   ->
with($evt'beforeTransportStarted');
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
zeroOrMoreTimes();
        
$evt->shouldReceive('bubbleCancelled')
            ->
atLeast()->once()
            ->
andReturn(true);

        
$this->_finishBuffer($buf);
        
$smtp->start();

        
$this->assertFalse($smtp->isStarted(),
            
'%s: Transport should not be started since event bubble was cancelled'
        
);
    }

    public function 
testStoppingTransportDispatchesTransportChangeEvent()
    {
        
$buf $this->_getBuffer();
        
$dispatcher $this->_createEventDispatcher(false);
        
$evt $this->getMockery('Swift_Events_TransportChangeEvent')->shouldIgnoreMissing();
        
$smtp $this->_getTransport($buf$dispatcher);

        
$dispatcher->shouldReceive('createTransportChangeEvent')
                   ->
atLeast()->once()
                   ->
with($smtp)
                   ->
andReturn($evt);
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
once()
                   ->
with($evt'transportStopped');
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
zeroOrMoreTimes();

        
$this->_finishBuffer($buf);
        
$smtp->start();
        
$smtp->stop();
    }

    public function 
testStoppingTransportDispatchesBeforeTransportChangeEvent()
    {
        
$buf $this->_getBuffer();
        
$dispatcher $this->_createEventDispatcher(false);
        
$evt $this->getMockery('Swift_Events_TransportChangeEvent')->shouldIgnoreMissing();
        
$smtp $this->_getTransport($buf$dispatcher);

        
$dispatcher->shouldReceive('createTransportChangeEvent')
                   ->
atLeast()->once()
                   ->
with($smtp)
                   ->
andReturn($evt);
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
once()
                   ->
with($evt'beforeTransportStopped');
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
zeroOrMoreTimes();

        
$this->_finishBuffer($buf);
        
$smtp->start();
        
$smtp->stop();
    }

    public function 
testCancellingBubbleBeforeTransportStoppedStopsEvent()
    {
        
$buf $this->_getBuffer();
        
$dispatcher $this->_createEventDispatcher(false);
        
$evt $this->getMockery('Swift_Events_TransportChangeEvent');
        
$smtp $this->_getTransport($buf$dispatcher);

        
$hasRun false;
        
$dispatcher->shouldReceive('createTransportChangeEvent')
                   ->
atLeast()->once()
                   ->
with($smtp)
                   ->
andReturn($evt);
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
once()
                   ->
with($evt'beforeTransportStopped')
                   ->
andReturnUsing(function () use (&$hasRun) {
                       
$hasRun true;
                   });
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
zeroOrMoreTimes();
        
$evt->shouldReceive('bubbleCancelled')
            ->
zeroOrMoreTimes()
            ->
andReturnUsing(function () use (&$hasRun) {
                return 
$hasRun;
            });

        
$this->_finishBuffer($buf);
        
$smtp->start();
        
$smtp->stop();

        
$this->assertTrue($smtp->isStarted(),
            
'%s: Transport should not be stopped since event bubble was cancelled'
        
);
    }

    public function 
testResponseEventsAreGenerated()
    {
        
$buf $this->_getBuffer();
        
$dispatcher $this->_createEventDispatcher(false);
        
$evt $this->getMockery('Swift_Events_ResponseEvent');
        
$smtp $this->_getTransport($buf$dispatcher);

        
$dispatcher->shouldReceive('createResponseEvent')
                   ->
atLeast()->once()
                   ->
with($smtpMockery::any(), Mockery::any())
                   ->
andReturn($evt);
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
atLeast()->once()
                   ->
with($evt'responseReceived');

        
$this->_finishBuffer($buf);
        
$smtp->start();
    }

    public function 
testCommandEventsAreGenerated()
    {
        
$buf $this->_getBuffer();
        
$dispatcher $this->_createEventDispatcher(false);
        
$evt $this->getMockery('Swift_Events_CommandEvent');
        
$smtp $this->_getTransport($buf$dispatcher);

        
$dispatcher->shouldReceive('createCommandEvent')
                   ->
once()
                   ->
with($smtpMockery::any(), Mockery::any())
                   ->
andReturn($evt);
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
once()
                   ->
with($evt'commandSent');

        
$this->_finishBuffer($buf);
        
$smtp->start();
    }

    public function 
testExceptionsCauseExceptionEvents()
    {
        
$buf $this->_getBuffer();
        
$dispatcher $this->_createEventDispatcher(false);
        
$evt $this->getMockery('Swift_Events_TransportExceptionEvent');
        
$smtp $this->_getTransport($buf$dispatcher);

        
$buf->shouldReceive('readLine')
            ->
atLeast()->once()
            ->
andReturn("503 I'm sleepy, go away!rn");
        
$dispatcher->shouldReceive('createTransportExceptionEvent')
                   ->
zeroOrMoreTimes()
                   ->
with($smtpMockery::any())
                   ->
andReturn($evt);
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
once()
                   ->
with($evt'exceptionThrown');
        
$evt->shouldReceive('bubbleCancelled')
            ->
atLeast()->once()
            ->
andReturn(false);

        try {
            
$smtp->start();
            
$this->fail('TransportException should be thrown on invalid response');
        } catch (
Swift_TransportException $e) {
        }
    }

    public function 
testExceptionBubblesCanBeCancelled()
    {
        
$buf $this->_getBuffer();
        
$dispatcher $this->_createEventDispatcher(false);
        
$evt $this->getMockery('Swift_Events_TransportExceptionEvent');
        
$smtp $this->_getTransport($buf$dispatcher);

        
$buf->shouldReceive('readLine')
            ->
atLeast()->once()
            ->
andReturn("503 I'm sleepy, go away!rn");
        
$dispatcher->shouldReceive('createTransportExceptionEvent')
                   ->
twice()
                   ->
with($smtpMockery::any())
                   ->
andReturn($evt);
        
$dispatcher->shouldReceive('dispatchEvent')
                   ->
twice()
                   ->
with($evt'exceptionThrown');
        
$evt->shouldReceive('bubbleCancelled')
            ->
atLeast()->once()
            ->
andReturn(true);

        
$this->_finishBuffer($buf);
        
$smtp->start();
    }

    protected function 
_createEventDispatcher($stub true)
    {
        return 
$this->getMockery('Swift_Events_EventDispatcher')->shouldIgnoreMissing();
    }
}
Онлайн: 0
Реклама