233 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			233 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace LaravelFCM\Mocks;
 | |
| 
 | |
| use LaravelFCM\Response\DownstreamResponse;
 | |
| use LaravelFCM\Response\DownstreamResponseContract;
 | |
| 
 | |
| /**
 | |
|  * Class MockDownstreamResponse **Only use it for testing**.
 | |
|  */
 | |
| class MockDownstreamResponse implements DownstreamResponseContract
 | |
| {
 | |
|     /**
 | |
|      * @internal
 | |
|      *
 | |
|      * @var int
 | |
|      */
 | |
|     protected $numberTokensSuccess = 0;
 | |
| 
 | |
|     /**
 | |
|      * @internal
 | |
|      *
 | |
|      * @var
 | |
|      */
 | |
|     protected $messageId;
 | |
| 
 | |
|     /**
 | |
|      * @internal
 | |
|      *
 | |
|      * @var array
 | |
|      */
 | |
|     protected $tokensToDelete = [];
 | |
| 
 | |
|     /**
 | |
|      * @internal
 | |
|      *
 | |
|      * @var array
 | |
|      */
 | |
|     protected $tokensToModify = [];
 | |
|     /**
 | |
|      * @internal
 | |
|      *
 | |
|      * @var array
 | |
|      */
 | |
|     protected $tokensToRetry = [];
 | |
| 
 | |
|     /**
 | |
|      * @internal
 | |
|      *
 | |
|      * @var array
 | |
|      */
 | |
|     protected $tokensWithError = [];
 | |
| 
 | |
|     /**
 | |
|      * @internal
 | |
|      *
 | |
|      * @var bool
 | |
|      */
 | |
|     protected $hasMissingToken = false;
 | |
| 
 | |
|     /**
 | |
|      * DownstreamResponse constructor.
 | |
|      *
 | |
|      * @param $numberSuccess
 | |
|      */
 | |
|     public function __construct($numberSuccess)
 | |
|     {
 | |
|         $this->numberTokensSuccess = $numberSuccess;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Not using it.
 | |
|      *
 | |
|      * @param DownstreamResponse $response
 | |
|      *
 | |
|      * @throws \Exception
 | |
|      */
 | |
|     public function merge(DownstreamResponse $response)
 | |
|     {
 | |
|         throw new \Exception('You cannot use this method for mocking response');
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the number of device reached with success + numberTokenToModify.
 | |
|      *
 | |
|      * @return int
 | |
|      */
 | |
|     public function numberSuccess()
 | |
|     {
 | |
|         return $this->numberTokensSuccess + count($this->tokensToModify);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the number of device which thrown an error.
 | |
|      *
 | |
|      * @return int
 | |
|      */
 | |
|     public function numberFailure()
 | |
|     {
 | |
|         return count($this->tokensToDelete()) + count($this->tokensWithError);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the number of device that you need to modify their token.
 | |
|      *
 | |
|      * @return int
 | |
|      */
 | |
|     public function numberModification()
 | |
|     {
 | |
|         return count($this->tokensToModify());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Add a token to delete.
 | |
|      *
 | |
|      * @param $token
 | |
|      * @return MockDownstreamResponse
 | |
|      */
 | |
|     public function addTokenToDelete($token)
 | |
|     {
 | |
|         $this->tokensToDelete[] = $token;
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * get token to delete
 | |
|      * remove all tokens returned by this method in your database.
 | |
|      *
 | |
|      * @return array
 | |
|      */
 | |
|     public function tokensToDelete()
 | |
|     {
 | |
|         return $this->tokensToDelete;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Add a token to modify.
 | |
|      *
 | |
|      * @param $oldToken
 | |
|      * @param $newToken
 | |
|      * @return MockDownstreamResponse
 | |
|      */
 | |
|     public function addTokenToModify($oldToken, $newToken)
 | |
|     {
 | |
|         $this->tokensToModify[$oldToken] = $newToken;
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * get token to modify
 | |
|      * key: oldToken
 | |
|      * value: new token
 | |
|      * find the old token in your database and replace it with the new one.
 | |
|      *
 | |
|      * @return array
 | |
|      */
 | |
|     public function tokensToModify()
 | |
|     {
 | |
|         return $this->tokensToModify;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Add a token to retry.
 | |
|      *
 | |
|      * @param $token
 | |
|      * @return MockDownstreamResponse
 | |
|      */
 | |
|     public function addTokenToRetry($token)
 | |
|     {
 | |
|         $this->tokensToRetry[] = $token;
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get tokens that you should resend using exponential backoof.
 | |
|      *
 | |
|      * @return array
 | |
|      */
 | |
|     public function tokensToRetry()
 | |
|     {
 | |
|         return $this->tokensToRetry;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Add a token to errors.
 | |
|      *
 | |
|      * @param $token
 | |
|      * @param $message
 | |
|      * @return MockDownstreamResponse
 | |
|      */
 | |
|     public function addTokenWithError($token, $message)
 | |
|     {
 | |
|         $this->tokensWithError[$token] = $message;
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get tokens that thrown an error
 | |
|      * key : token
 | |
|      * value : error
 | |
|      * In production, remove these tokens from you database.
 | |
|      *
 | |
|      * @return array
 | |
|      */
 | |
|     public function tokensWithError()
 | |
|     {
 | |
|         return $this->tokensWithError;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * change missing token state.
 | |
|      *
 | |
|      * @param $hasMissingToken
 | |
|      * @return MockDownstreamResponse
 | |
|      */
 | |
|     public function setMissingToken($hasMissingToken)
 | |
|     {
 | |
|         $this->hasMissingToken = $hasMissingToken;
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * check if missing tokens was given to the request
 | |
|      * If true, remove all the empty token in your database.
 | |
|      *
 | |
|      * @return bool
 | |
|      */
 | |
|     public function hasMissingToken()
 | |
|     {
 | |
|         return $this->hasMissingToken;
 | |
|     }
 | |
| }
 | 
