178 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			178 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Zend Framework (http://framework.zend.com/)
 | |
|  *
 | |
|  * @link       http://github.com/zendframework/zf2 for the canonical source repository
 | |
|  * @copyright  Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
 | |
|  * @license    http://framework.zend.com/license/new-bsd New BSD License
 | |
|  * @category   ZendService
 | |
|  * @package    ZendService_Apple
 | |
|  * @subpackage UnitTests
 | |
|  */
 | |
| 
 | |
| namespace ZendServiceTest\Apple\Apns;
 | |
| 
 | |
| use PHPUnit\Framework\TestCase;
 | |
| use ZendServiceTest\Apple\Apns\TestAsset\MessageClient;
 | |
| use ZendService\Apple\Apns\Message;
 | |
| use ZendService\Apple\Apns\Response\Message as MessageResponse;
 | |
| 
 | |
| /**
 | |
|  * @category   ZendService
 | |
|  * @package    ZendService_Apple
 | |
|  * @subpackage UnitTests
 | |
|  * @group      ZendService
 | |
|  * @group      ZendService_Apple
 | |
|  * @group      ZendService_Apple_Apns
 | |
|  */
 | |
| class MessageClientTest extends TestCase
 | |
| {
 | |
|     public function setUp()
 | |
|     {
 | |
|         $this->apns = new MessageClient();
 | |
|         $this->message = new Message();
 | |
|     }
 | |
| 
 | |
|     protected function setupValidBase()
 | |
|     {
 | |
|         $this->apns->open(MessageClient::SANDBOX_URI, __DIR__ . '/TestAsset/certificate.pem');
 | |
|         $this->message->setToken('662cfe5a69ddc65cdd39a1b8f8690647778204b064df7b264e8c4c254f94fdd8');
 | |
|         $this->message->setId(time());
 | |
|         $this->message->setAlert('bar');
 | |
|     }
 | |
| 
 | |
|     public function testConnectThrowsExceptionOnInvalidEnvironment()
 | |
|     {
 | |
|         $this->expectException('InvalidArgumentException');
 | |
|         $this->apns->open(5, __DIR__ . '/TestAsset/certificate.pem');
 | |
|     }
 | |
| 
 | |
|     public function testSetCertificateThrowsExceptionOnNonString()
 | |
|     {
 | |
|         $this->expectException('InvalidArgumentException');
 | |
|         $this->apns->open(MessageClient::PRODUCTION_URI, ['foo']);
 | |
|     }
 | |
| 
 | |
|     public function testSetCertificateThrowsExceptionOnMissingFile()
 | |
|     {
 | |
|         $this->expectException('InvalidArgumentException');
 | |
|         $this->apns->open(MessageClient::PRODUCTION_URI, 'foo');
 | |
|     }
 | |
| 
 | |
|     public function testSetCertificatePassphraseThrowsExceptionOnNonString()
 | |
|     {
 | |
|         $this->expectException('InvalidArgumentException');
 | |
|         $this->apns->open(MessageClient::PRODUCTION_URI, __DIR__ . '/TestAsset/certificate.pem', ['foo']);
 | |
|     }
 | |
| 
 | |
|     public function testOpen()
 | |
|     {
 | |
|         $ret = $this->apns->open(MessageClient::SANDBOX_URI, __DIR__ . '/TestAsset/certificate.pem');
 | |
|         $this->assertEquals($this->apns, $ret);
 | |
|         $this->assertTrue($this->apns->isConnected());
 | |
|     }
 | |
| 
 | |
|     public function testClose()
 | |
|     {
 | |
|         $this->apns->open(MessageClient::SANDBOX_URI, __DIR__ . '/TestAsset/certificate.pem');
 | |
|         $this->apns->close();
 | |
|         $this->assertFalse($this->apns->isConnected());
 | |
|     }
 | |
| 
 | |
|     public function testOpenWhenAlreadyOpenThrowsException()
 | |
|     {
 | |
|         $this->expectException('RuntimeException');
 | |
|         $this->apns->open(MessageClient::SANDBOX_URI, __DIR__ . '/TestAsset/certificate.pem');
 | |
|         $this->apns->open(MessageClient::SANDBOX_URI, __DIR__ . '/TestAsset/certificate.pem');
 | |
|     }
 | |
| 
 | |
|     public function testSendReturnsTrueOnSuccess()
 | |
|     {
 | |
|         $this->setupValidBase();
 | |
|         $response = $this->apns->send($this->message);
 | |
|         $this->assertEquals(MessageResponse::RESULT_OK, $response->getCode());
 | |
|         $this->assertNull($response->getId());
 | |
|     }
 | |
| 
 | |
|     public function testSendResponseOnProcessingError()
 | |
|     {
 | |
|         $this->setupValidBase();
 | |
|         $this->apns->setReadResponse(pack('CCN*', 1, 1, 12345));
 | |
|         $response = $this->apns->send($this->message);
 | |
|         $this->assertEquals(MessageResponse::RESULT_PROCESSING_ERROR, $response->getCode());
 | |
|         $this->assertEquals(12345, $response->getId());
 | |
|     }
 | |
| 
 | |
|     public function testSendResponseOnMissingToken()
 | |
|     {
 | |
|         $this->setupValidBase();
 | |
|         $this->apns->setReadResponse(pack('CCN*', 2, 2, 12345));
 | |
|         $response = $this->apns->send($this->message);
 | |
|         $this->assertEquals(MessageResponse::RESULT_MISSING_TOKEN, $response->getCode());
 | |
|         $this->assertEquals(12345, $response->getId());
 | |
|     }
 | |
| 
 | |
|     public function testSendResponseOnMissingTopic()
 | |
|     {
 | |
|         $this->setupValidBase();
 | |
|         $this->apns->setReadResponse(pack('CCN*', 3, 3, 12345));
 | |
|         $response = $this->apns->send($this->message);
 | |
|         $this->assertEquals(MessageResponse::RESULT_MISSING_TOPIC, $response->getCode());
 | |
|         $this->assertEquals(12345, $response->getId());
 | |
|     }
 | |
| 
 | |
|     public function testSendResponseOnMissingPayload()
 | |
|     {
 | |
|         $this->setupValidBase();
 | |
|         $this->apns->setReadResponse(pack('CCN*', 4, 4, 12345));
 | |
|         $response = $this->apns->send($this->message);
 | |
|         $this->assertEquals(MessageResponse::RESULT_MISSING_PAYLOAD, $response->getCode());
 | |
|         $this->assertEquals(12345, $response->getId());
 | |
|     }
 | |
| 
 | |
|     public function testSendResponseOnInvalidTokenSize()
 | |
|     {
 | |
|         $this->setupValidBase();
 | |
|         $this->apns->setReadResponse(pack('CCN*', 5, 5, 12345));
 | |
|         $response = $this->apns->send($this->message);
 | |
|         $this->assertEquals(MessageResponse::RESULT_INVALID_TOKEN_SIZE, $response->getCode());
 | |
|         $this->assertEquals(12345, $response->getId());
 | |
|     }
 | |
| 
 | |
|     public function testSendResponseOnInvalidTopicSize()
 | |
|     {
 | |
|         $this->setupValidBase();
 | |
|         $this->apns->setReadResponse(pack('CCN*', 6, 6, 12345));
 | |
|         $response = $this->apns->send($this->message);
 | |
|         $this->assertEquals(MessageResponse::RESULT_INVALID_TOPIC_SIZE, $response->getCode());
 | |
|         $this->assertEquals(12345, $response->getId());
 | |
|     }
 | |
| 
 | |
|     public function testSendResponseOnInvalidPayloadSize()
 | |
|     {
 | |
|         $this->setupValidBase();
 | |
|         $this->apns->setReadResponse(pack('CCN*', 7, 7, 12345));
 | |
|         $response = $this->apns->send($this->message);
 | |
|         $this->assertEquals(MessageResponse::RESULT_INVALID_PAYLOAD_SIZE, $response->getCode());
 | |
|         $this->assertEquals(12345, $response->getId());
 | |
|     }
 | |
| 
 | |
|     public function testSendResponseOnInvalidToken()
 | |
|     {
 | |
|         $this->setupValidBase();
 | |
|         $this->apns->setReadResponse(pack('CCN*', 8, 8, 12345));
 | |
|         $response = $this->apns->send($this->message);
 | |
|         $this->assertEquals(MessageResponse::RESULT_INVALID_TOKEN, $response->getCode());
 | |
|         $this->assertEquals(12345, $response->getId());
 | |
|     }
 | |
| 
 | |
|     public function testSendResponseOnUnknownError()
 | |
|     {
 | |
|         $this->setupValidBase();
 | |
|         $this->apns->setReadResponse(pack('CCN*', 255, 255, 12345));
 | |
|         $response = $this->apns->send($this->message);
 | |
|         $this->assertEquals(MessageResponse::RESULT_UNKNOWN_ERROR, $response->getCode());
 | |
|         $this->assertEquals(12345, $response->getId());
 | |
|     }
 | |
| }
 | 
