diff --git a/composer.json b/composer.json index 3bff8d0e..91978076 100644 --- a/composer.json +++ b/composer.json @@ -71,8 +71,8 @@ "scripts": { "test": "phpunit --debug tests", "cs": "phpcs", - "md": "phpmd --ignore-violations-on-exit src,examples/EchoBot/src,examples/EchoBot/public,examples/KitchenSink/src,examples/KitchenSink/public text phpmd.xml", - "stan": "devtool/check_phpstan.sh" + "md": "phpmd --ignore-violations-on-exit src/constants,src/laravel,src/parser,examples/EchoBot/src,examples/EchoBot/public,examples/KitchenSink/src,examples/KitchenSink/public text phpmd.xml", + "stan": "phpstan analyse --memory-limit=-1" }, "extra": { "laravel": { diff --git a/examples/EchoBot/src/LINEBot/EchoBot/Route.php b/examples/EchoBot/src/LINEBot/EchoBot/Route.php index 71d8b9fb..27eae738 100644 --- a/examples/EchoBot/src/LINEBot/EchoBot/Route.php +++ b/examples/EchoBot/src/LINEBot/EchoBot/Route.php @@ -32,8 +32,7 @@ class Route public function register(\Slim\App $app) { $app->post('/callback', function (\Psr\Http\Message\RequestInterface $req, \Psr\Http\Message\ResponseInterface $res) { - /** @var \LINE\Clients\MessagingApi\Api\MessagingApiApi $bot */ - $bot = $this->get('botMessagingApi'); + $bot = $this->get(\LINE\Clients\MessagingApi\Api\MessagingApiApi::class); $logger = $this->get(\Psr\Log\LoggerInterface::class); $signature = $req->getHeader(HTTPHeader::LINE_SIGNATURE); @@ -44,14 +43,14 @@ public function register(\Slim\App $app) // Check request with signature and parse request try { $secret = $this->get('settings')['bot']['channelSecret']; - $events = EventRequestParser::parseEventRequest($req->getBody(), $secret, $signature[0]); + $parsedEvents = EventRequestParser::parseEventRequest($req->getBody(), $secret, $signature[0]); } catch (InvalidSignatureException $e) { return $res->withStatus(400, 'Invalid signature'); } catch (InvalidEventRequestException $e) { return $res->withStatus(400, "Invalid event request"); } - foreach ($events as $event) { + foreach ($parsedEvents->getEvents() as $event) { if (!($event instanceof MessageEvent)) { $logger->info('Non message event has come'); continue; diff --git a/examples/KitchenSink/src/LINEBot/KitchenSink/EventHandler/AccountLinkEventHandler.php b/examples/KitchenSink/src/LINEBot/KitchenSink/EventHandler/AccountLinkEventHandler.php index 5d20cadb..d5bb5723 100644 --- a/examples/KitchenSink/src/LINEBot/KitchenSink/EventHandler/AccountLinkEventHandler.php +++ b/examples/KitchenSink/src/LINEBot/KitchenSink/EventHandler/AccountLinkEventHandler.php @@ -18,9 +18,9 @@ namespace LINE\LINEBot\KitchenSink; -use LINE\ChannelAccessToken\Model\TextMessage; use LINE\Clients\MessagingApi\Api\MessagingApiApi; use LINE\Clients\MessagingApi\Model\ReplyMessageRequest; +use LINE\Clients\MessagingApi\Model\TextMessage; use LINE\Constants\MessageType; use LINE\Webhook\Model\AccountLinkEvent; @@ -36,7 +36,6 @@ class AccountLinkEventHandler /** * AccountLinkEventHandler constructor. * @param MessagingApiApi $bot - * @param \Psr\Log\LoggerInterface $logger * @param AccountLinkEvent $accountLinkEvent */ public function __construct(MessagingApiApi $bot, \Psr\Log\LoggerInterface $logger, AccountLinkEvent $accountLinkEvent) @@ -51,10 +50,15 @@ public function __construct(MessagingApiApi $bot, \Psr\Log\LoggerInterface $logg */ public function handle() { + $link = $this->accountLinkEvent->getLink(); + $this->logger->info('Link result: ' . $link->getResult()); $request = new ReplyMessageRequest([ 'replyToken' => $this->accountLinkEvent->getReplyToken(), 'messages' => [ - new TextMessage(['type' => MessageType::TEXT, 'text' => 'Got account link event ' . $this->accountLinkEvent->getLink()->getNonce()]), + new TextMessage([ + 'type' => MessageType::TEXT, + 'text' => 'Got account link event ' . $link->getNonce(), + ]), ], ]); $this->bot->replyMessage($request); diff --git a/examples/KitchenSink/src/LINEBot/KitchenSink/EventHandler/MessageHandler/ImageMessageHandler.php b/examples/KitchenSink/src/LINEBot/KitchenSink/EventHandler/MessageHandler/ImageMessageHandler.php index ba116ac9..aa8a769d 100644 --- a/examples/KitchenSink/src/LINEBot/KitchenSink/EventHandler/MessageHandler/ImageMessageHandler.php +++ b/examples/KitchenSink/src/LINEBot/KitchenSink/EventHandler/MessageHandler/ImageMessageHandler.php @@ -29,6 +29,9 @@ use LINE\Webhook\Model\ImageMessageContent; use LINE\Webhook\Model\MessageEvent; +/** + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ class ImageMessageHandler implements EventHandler { /** @var = $bot */ diff --git a/examples/KitchenSink/src/LINEBot/KitchenSink/Route.php b/examples/KitchenSink/src/LINEBot/KitchenSink/Route.php index 706f31a9..694ec393 100644 --- a/examples/KitchenSink/src/LINEBot/KitchenSink/Route.php +++ b/examples/KitchenSink/src/LINEBot/KitchenSink/Route.php @@ -74,14 +74,14 @@ public function register(\Slim\App $app) // Check request with signature and parse request try { $secret = $this->get('settings')['bot']['channelSecret']; - $events = EventRequestParser::parseEventRequest($req->getBody(), $secret, $signature[0]); + $parsedEvents = EventRequestParser::parseEventRequest($req->getBody(), $secret, $signature[0]); } catch (InvalidSignatureException $e) { return $res->withStatus(400, 'Invalid signature'); } catch (InvalidEventRequestException $e) { return $res->withStatus(400, "Invalid event request"); } - foreach ($events as $event) { + foreach ($parsedEvents->getEvents() as $event) { /** @var EventHandler $handler */ $handler = null; diff --git a/phpmd.xml b/phpmd.xml new file mode 100644 index 00000000..deac1508 --- /dev/null +++ b/phpmd.xml @@ -0,0 +1,34 @@ + + + + line-bot-sdk-php phpmd custom rules + + EchoBot/Route.php + KitchenSink/Route.php + EchoBot/Dependency.php + KitchenSink/Dependency.php + test/EventRequestParserTest.php + + + + + + + + + + + + + + + + + + + + diff --git a/phpstan.neon.dist b/phpstan.neon.dist new file mode 100644 index 00000000..ffb391ed --- /dev/null +++ b/phpstan.neon.dist @@ -0,0 +1,11 @@ +parameters: + level: 5 + paths: + - src/constants + - src/laravel + - src/parser + ignoreErrors: + # Ignore laravel facade unknown. + - message: '#Call to static method getFacadeRoot\(\) on an unknown class [a-zA-Z]+\.#' + paths: + - src\laravel\test\Facades\FacadesTest.php diff --git a/src/Laravel/lib/LINEBotServiceProvider.php b/src/Laravel/lib/LINEBotServiceProvider.php index ca009944..ce80ea74 100644 --- a/src/Laravel/lib/LINEBotServiceProvider.php +++ b/src/Laravel/lib/LINEBotServiceProvider.php @@ -18,22 +18,41 @@ namespace LINE\Laravel; -use Guzzle\Http\Client; -use LINE\Clients\ChannelAccessToken\Api\ChannelAccessTokenApi; -use LINE\Clients\Insight\Api\InsightApi; -use LINE\Clients\ChannelAccessToken\Configuration as ChannelAccessTokenConfiguration; -use LINE\Clients\Insight\Configuration as InsightConfiguration; -use LINE\Clients\Liff\Api\LiffApi; -use LINE\Clients\Liff\Configuration as LiffConfiguration; -use LINE\Clients\ManageAudience\Api\ManageAudienceApi; -use LINE\Clients\ManageAudience\Api\ManageAudienceBlobApi; -use LINE\Clients\ManageAudience\Configuration as ManageAudienceConfiguration; -use LINE\Clients\MessagingApi\Api\MessagingApiApi; -use LINE\Clients\MessagingApi\Api\MessagingApiBlobApi; -use LINE\Clients\MessagingApi\Configuration as MessagingApiConfiguration; +use \GuzzleHttp\Client as GuzzleHttpClient; class LINEBotServiceProvider extends \Illuminate\Support\ServiceProvider { + private static $apiBindings = [ + 'line-bot-channel-access-token-api' => [ + 'config' => \LINE\Clients\ChannelAccessToken\Configuration::class, + 'api' => \LINE\Clients\ChannelAccessToken\Api\ChannelAccessTokenApi::class, + ], + 'line-bot-insight-api' => [ + 'config' => \LINE\Clients\Insight\Configuration::class, + 'api' => \LINE\Clients\Insight\Api\InsightApi::class, + ], + 'line-bot-liff-api' => [ + 'config' => \LINE\Clients\Liff\Configuration::class, + 'api' => \LINE\Clients\Liff\Api\LiffApi::class, + ], + 'line-bot-manage-audience-api' => [ + 'config' => \LINE\Clients\ManageAudience\Configuration::class, + 'api' => \LINE\Clients\ManageAudience\Api\ManageAudienceApi::class, + ], + 'line-bot-manage-audience-blob-api' => [ + 'config' => \LINE\Clients\ManageAudience\Configuration::class, + 'api' => \LINE\Clients\ManageAudience\Api\ManageAudienceBlobApi::class, + ], + 'line-bot-messaging-api' => [ + 'config' => \LINE\Clients\MessagingApi\Configuration::class, + 'api' => \LINE\Clients\MessagingApi\Api\MessagingApiApi::class, + ], + 'line-bot-messaging-blob-api' => [ + 'config' => \LINE\Clients\MessagingApi\Configuration::class, + 'api' => \LINE\Clients\MessagingApi\Api\MessagingApiBlobApi::class, + ], + ]; + /** * Register bindings in the container. * @@ -46,103 +65,22 @@ public function register() 'line-bot' ); $this->app->bind('line-bot-http-client', function () { - return new \GuzzleHttp\Client( + return new GuzzleHttpClient( config: config('line-bot.client.config'), ); }); - $this->bindChannelAccessTokenApi(); - $this->bindInsightApi(); - $this->bindLiffApi(); - $this->bindManageAudienceApi(); - $this->bindManageAudienceBlobApi(); - $this->bindMessagingApi(); - $this->bindMessagingBlobApi(); - } - - private function bindChannelAccessTokenApi() - { - $this->app->bind('line-bot-channel-access-token-api', function ($app) { - $httpClient = $app->make('line-bot-http-client'); - $config = new ChannelAccessTokenConfiguration(); - return new ChannelAccessTokenApi( - client: $httpClient, - config: $config, - ); - }); - } - - private function bindInsightApi() - { - $this->app->bind('line-bot-insight-api', function ($app) { - $httpClient = $app->make('line-bot-http-client'); - $config = new InsightConfiguration(); - $config->setAccessToken(config('line-bot.channel_access_token')); - return new InsightApi( - client: $httpClient, - config: $config, - ); - }); - } - - private function bindLiffApi() - { - $this->app->bind('line-bot-liff-api', function ($app) { - $httpClient = $app->make('line-bot-http-client'); - $config = new LiffConfiguration(); - $config->setAccessToken(config('line-bot.channel_access_token')); - return new LiffApi( - client: $httpClient, - config: $config, - ); - }); - } - - private function bindManageAudienceApi() - { - $this->app->bind('line-bot-manage-audience-api', function ($app) { - $httpClient = $app->make('line-bot-http-client'); - $config = new ManageAudienceConfiguration(); - $config->setAccessToken(config('line-bot.channel_access_token')); - return new ManageAudienceApi( - client: $httpClient, - config: $config, - ); - }); - } - - private function bindManageAudienceBlobApi() - { - $this->app->bind('line-bot-manage-audience-blob-api', function ($app) { - $httpClient = $app->make('line-bot-http-client'); - $config = new ManageAudienceConfiguration(); - $config->setAccessToken(config('line-bot.channel_access_token')); - return new ManageAudienceBlobApi( - client: $httpClient, - config: $config, - ); - }); - } - - private function bindMessagingApi() - { - $this->app->bind('line-bot-messaging-api', function ($app) { - $httpClient = $app->make('line-bot-http-client'); - $config = new MessagingApiConfiguration(); - $config->setAccessToken(config('line-bot.channel_access_token')); - return new MessagingApiApi( - client: $httpClient, - config: $config, - ); - }); + foreach (self::$apiBindings as $facadeName => $classes) { + $this->bindApis($facadeName, $classes['api'], $classes['config']); + } } - private function bindMessagingBlobApi() + private function bindApis($facadeName, $clientClass, $configClass) { - $this->app->bind('line-bot-messaging-blob-api', function ($app) { + $this->app->bind($facadeName, function ($app) use ($clientClass, $configClass) { $httpClient = $app->make('line-bot-http-client'); - $config = new MessagingApiConfiguration(); + $config = new $configClass(); $config->setAccessToken(config('line-bot.channel_access_token')); - return new MessagingApiBlobApi( + return new $clientClass( client: $httpClient, config: $config, ); diff --git a/src/laravel/test/Facades/FacadesTest.php b/src/laravel/test/Facades/FacadesTest.php index d8f87ad0..166e8ab6 100644 --- a/src/laravel/test/Facades/FacadesTest.php +++ b/src/laravel/test/Facades/FacadesTest.php @@ -16,35 +16,42 @@ * under the License. */ -namespace LINE\Tests\Laravel\Facade; +namespace LINE\Tests\Laravel\Facades; +/** + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ class FacadesTest extends \Orchestra\Testbench\TestCase { /** * Load package service provider + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) * @param \Illuminate\Foundation\Application $app * @return array */ protected function getPackageProviders($app) { - return ['LINE\Laravel\LINEBotServiceProvider']; + return [\LINE\Laravel\LINEBotServiceProvider::class]; } /** * Load package alias + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) * @param \Illuminate\Foundation\Application $app * @return array */ protected function getPackageAliases($app) { return [ - 'LINEChannelAccessTokenApi' => 'LINE\Laravel\Facades\LINEChannelAccessTokenApi', - 'LINEInsightApi' => 'LINE\Laravel\Facades\LINEInsightApi', - 'LINELiffApi' => 'LINE\Laravel\Facades\LINELiffApi', - 'LINEManageAudienceApi' => 'LINE\Laravel\Facades\LINEManageAudienceApi', - 'LINEManageAudienceBlobApi' => 'LINE\Laravel\Facades\LINEManageAudienceBlobApi', - 'LINEMessagingApi' => 'LINE\Laravel\Facades\LINEMessagingApi', - 'LINEMessagingBlobApi' => 'LINE\Laravel\Facades\LINEMessagingBlobApi', + 'LINEChannelAccessTokenApi' => \LINE\Laravel\Facades\LINEChannelAccessTokenApi::class, + 'LINEInsightApi' => \LINE\Laravel\Facades\LINEInsightApi::class, + 'LINELiffApi' => \LINE\Laravel\Facades\LINELiffApi::class, + 'LINEManageAudienceApi' => \LINE\Laravel\Facades\LINEManageAudienceApi::class, + 'LINEManageAudienceBlobApi' => \LINE\Laravel\Facades\LINEManageAudienceBlobApi::class, + 'LINEMessagingApi' => \LINE\Laravel\Facades\LINEMessagingApi::class, + 'LINEMessagingBlobApi' => \LINE\Laravel\Facades\LINEMessagingBlobApi::class, ]; } @@ -62,6 +69,7 @@ public function testConfigLoaded() /** * Testing LINEBot facade instance * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) * @return void */ public function testLINEBotFacadeInstance() diff --git a/src/parser/lib/Event/UnknownEvent.php b/src/parser/lib/Event/UnknownEvent.php deleted file mode 100644 index 257dea09..00000000 --- a/src/parser/lib/Event/UnknownEvent.php +++ /dev/null @@ -1,41 +0,0 @@ - 'LINE\Webhook\Model\MessageEvent', - 'unsend' => 'LINE\Webhook\Model\UnsendEvent', - 'follow' => 'LINE\Webhook\Model\FollowEvent', - 'unfollow' => 'LINE\Webhook\Model\UnfollowEvent', - 'join' => 'LINE\Webhook\Model\JoinEvent', - 'leave' => 'LINE\Webhook\Model\LeaveEvent', - 'postback' => 'LINE\Webhook\Model\PostbackEvent', - 'videoPlayComplete' => 'LINE\Webhook\Model\VideoPlayCompleteEvent', - 'beacon' => 'LINE\Webhook\Model\BeaconEvent', - 'accountLink' => 'LINE\Webhook\Model\AccountLinkEvent', - 'memberJoined' => 'LINE\Webhook\Model\MemberJoinedEvent', - 'memberLeft' => 'LINE\Webhook\Model\MemberLeftEvent', - 'things' => 'LINE\Webhook\Model\ThingsEvent', + 'message' => \LINE\Webhook\Model\MessageEvent::class, + 'unsend' => \LINE\Webhook\Model\UnsendEvent::class, + 'follow' => \LINE\Webhook\Model\FollowEvent::class, + 'unfollow' => \LINE\Webhook\Model\UnfollowEvent::class, + 'join' => \LINE\Webhook\Model\JoinEvent::class, + 'leave' => \LINE\Webhook\Model\LeaveEvent::class, + 'postback' => \LINE\Webhook\Model\PostbackEvent::class, + 'videoPlayComplete' => \LINE\Webhook\Model\VideoPlayCompleteEvent::class, + 'beacon' => \LINE\Webhook\Model\BeaconEvent::class, + 'accountLink' => \LINE\Webhook\Model\AccountLinkEvent::class, + 'memberJoined' => \LINE\Webhook\Model\MemberJoinedEvent::class, + 'memberLeft' => \LINE\Webhook\Model\MemberLeftEvent::class, + 'things' => \LINE\Webhook\Model\ThingsEvent::class, ]; private static $messageType2class = [ - 'text' => 'LINE\Webhook\Model\TextMessageContent', - 'image' => 'LINE\Webhook\Model\ImageMessageContent', - 'video' => 'LINE\Webhook\Model\VideoMessageContent', - 'audio' => 'LINE\Webhook\Model\AudioMessageContent', - 'file' => 'LINE\Webhook\Model\FileMessageContent', - 'location' => 'LINE\Webhook\Model\LocationMessageContent', - 'sticker' => 'LINE\Webhook\Model\StickerMessageContent', + 'text' => \LINE\Webhook\Model\TextMessageContent::class, + 'image' => \LINE\Webhook\Model\ImageMessageContent::class, + 'video' => \LINE\Webhook\Model\VideoMessageContent::class, + 'audio' => \LINE\Webhook\Model\AudioMessageContent::class, + 'file' => \LINE\Webhook\Model\FileMessageContent::class, + 'location' => \LINE\Webhook\Model\LocationMessageContent::class, + 'sticker' => \LINE\Webhook\Model\StickerMessageContent::class, ]; private static $sourceType2class = [ - 'user' => 'LINE\Webhook\Model\UserSource', - 'group' => 'LINE\Webhook\Model\GroupSource', - 'room' => 'LINE\Webhook\Model\RoomSource', + 'user' => \LINE\Webhook\Model\UserSource::class, + 'group' => \LINE\Webhook\Model\GroupSource::class, + 'room' => \LINE\Webhook\Model\RoomSource::class, ]; private static $thingsContentType2class = [ - 'link' => '\LINE\Webhook\Model\LinkThingsContent', - 'unlink' => '\LINE\Webhook\Model\UnlinkThingsContent', - 'scenarioResult' => '\LINE\Webhook\Model\ScenarioResultThingsContent', + 'link' => \LINE\Webhook\Model\LinkThingsContent::class, + 'unlink' => \LINE\Webhook\Model\UnlinkThingsContent::class, + 'scenarioResult' => \LINE\Webhook\Model\ScenarioResultThingsContent::class, + ]; + + private static $contentType2class = [ + 'postback' => \LINE\Webhook\Model\PostbackContent::class, + 'beacon' => \LINE\Webhook\Model\BeaconContent::class, + 'link' => \LINE\Webhook\Model\LinkContent::class, + 'joined' => \LINE\Webhook\Model\JoinedMembers::class, + 'left' => \LINE\Webhook\Model\LeftMembers::class, + 'unsend' => \LINE\Webhook\Model\UnsendDetail::class, + 'videoPlayComplete' => \LINE\Webhook\Model\VideoPlayComplete::class, ]; /** * @param string $body * @param string $channelSecret * @param string $signature + * @param bool $eventsOnly * @return mixed * @throws InvalidEventRequestException * @throws InvalidSignatureException */ - public static function parseEventRequest($body, $channelSecret, $signature, $eventsOnly = true) + public static function parseEventRequest(string $body, string $channelSecret, string $signature): ParsedEvents { if (trim($signature) === '') { throw new InvalidSignatureException('Request does not contain signature'); @@ -117,88 +113,51 @@ public static function parseEventRequest($body, $channelSecret, $signature, $eve throw new InvalidSignatureException('Invalid signature has given'); } - $events = []; - $parsedReq = json_decode($body, true); if (!isset($parsedReq['events'])) { throw new InvalidEventRequestException(); } + $events = []; foreach ($parsedReq['events'] as $eventData) { - $eventType = $eventData['type']; - - if (isset(self::$eventType2class[$eventType])) { - $eventClass = self::$eventType2class[$eventType]; - $event = new $eventClass($eventData); - } else { - # Unknown event has come - $event = new UnknownEvent($eventData); - } - - - if ($event instanceof MessageEvent) { - $message = self::parseMessageContent($eventData); - $event->setMessage($message); - } - - if ($event instanceof ThingsEvent) { - $content = self::parseThingsContent($eventData); - $event->setThings($content); - } - - if ($event instanceof PostbackEvent) { - $content = new PostbackContent($eventData['postback']); - $event->setPostback($content); - } - - if ($event instanceof BeaconEvent) { - $content = new BeaconContent($eventData['beacon']); - $event->setBeacon($content); - } - - if ($event instanceof AccountLinkEvent) { - $content = new LinkContent($eventData['link']); - $event->setLink($content); - } - - if ($event instanceof MemberJoinedEvent) { - $content = new JoinedMembers($eventData['joined']); - $event->setJoined($content); - } - - if ($event instanceof MemberLeftEvent) { - $content = new LeftMembers($eventData['left']); - $event->setLeft($content); - } - - if ($event instanceof UnsendEvent) { - $content = new UnsendDetail($eventData['unsend']); - $event->setUnsend($content); - } + $events[] = self::parseEvent($eventData); + } - if ($event instanceof VideoPlayCompleteEvent) { - $content = new VideoPlayComplete($eventData['videoPlayComplete']); - $event->setVideoPlayComplete($content); - } + return new ParsedEvents($parsedReq['destination'] ?? null, $events); + } - $source = self::parseSource($eventData); - $event->setSource($source); - $deliveryContext = new DeliveryContext($eventData['deliveryContext']); - $event->setDeliveryContext($deliveryContext); + private static function parseEvent($eventData): Event + { + $eventType = $eventData['type']; + $eventClass = self::$eventType2class[$eventType] ?? \LINE\Webhook\Model\Event::class; + $event = new $eventClass($eventData); - $events[] = $event; + if ($event instanceof MessageEvent) { + $message = self::parseMessageContent($eventData); + $event->setMessage($message); } - if ($eventsOnly) { - return $events; + if ($event instanceof ThingsEvent) { + $content = self::parseThingsContent($eventData); + $event->setThings($content); } - $parsedReq = json_decode($body, true); - if (!isset($parsedReq['destination'])) { - throw new InvalidEventRequestException(); + foreach (array_keys($eventData) as $key) { + $contentClass = self::$contentType2class[$key] ?? null; + if (!isset($contentClass)) { + continue; + } + $content = new $contentClass($eventData[$key]); + $setter = 'set' . ucfirst($key); + $event->$setter($content); } - return [$parsedReq['destination'], $events]; + $source = self::parseSource($eventData); + $event->setSource($source); + $deliveryContext = new DeliveryContext($eventData['deliveryContext']); + $event->setDeliveryContext($deliveryContext); + + return $event; } /** @@ -209,7 +168,7 @@ private static function parseMessageContent($eventData): MessageContent { $messageType = $eventData['message']['type']; if (!isset(self::$messageType2class[$messageType])) { - return new UnknownMessageContent($eventData['message']); + return new MessageContent($eventData['message']); } $messageClass = self::$messageType2class[$messageType]; @@ -220,11 +179,10 @@ private static function parseMessageContent($eventData): MessageContent } if ($message instanceof TextMessageContent) { - $emojis = array_map(function ($emoji) { - return new Emoji($emoji); - }, $eventData['message']['emojis'] ?? []); + $messageData = $eventData['message']; + $emojis = array_map(fn ($item) => new Emoji($item), $messageData['emojis'] ?? []); $message->setEmojis($emojis); - $mentionData = $eventData['message']['mention'] ?? null; + $mentionData = $messageData['mention'] ?? null; if (isset($mentionData)) { $mention = new Mention($mentionData); $mentionees = array_map(function ($mentionee) { @@ -259,7 +217,7 @@ private static function parseSource($eventData): Source { $sourceType = $eventData['source']['type']; if (!isset(self::$sourceType2class[$sourceType])) { - return new UnknownSource($eventData['source']); + return new Source($eventData['source']); } $sourceClass = self::$sourceType2class[$sourceType]; @@ -274,19 +232,20 @@ private static function parseThingsContent($eventData): ThingsContent { $thingsContentType = $eventData['things']['type']; if (!isset(self::$thingsContentType2class[$thingsContentType])) { - return new UnknownThingsContent($eventData['source']); + return new ThingsContent($eventData['source']); } $thingsContentClass = self::$thingsContentType2class[$thingsContentType]; $content = new $thingsContentClass($eventData['things']); - if ($content instanceof ScenarioResultThingsContent) { - $result = new ScenarioResult($eventData['things']['result']); - $actionResults = array_map(function ($actionResult) { - return new ActionResult($actionResult); - }, $eventData['things']['result']['actionResults']); - $result->setActionResults($actionResults); - $content->setResult($result); + if (!($content instanceof ScenarioResultThingsContent)) { + return $content; } + + $resultData = $eventData['things']['result']; + $result = new ScenarioResult($resultData); + $actionResults = array_map(fn ($item) => new ActionResult($item), $resultData['actionResults']); + $result->setActionResults($actionResults); + $content->setResult($result); return $content; } } diff --git a/src/parser/lib/MessageContent/UnknownMessageContent.php b/src/parser/lib/MessageContent/UnknownMessageContent.php deleted file mode 100644 index 302fa72a..00000000 --- a/src/parser/lib/MessageContent/UnknownMessageContent.php +++ /dev/null @@ -1,39 +0,0 @@ -destination = $destination; + $this->events = $events; + } + + /** + * Get destination + * + * @return ?string + */ + public function getDestination(): ?string + { + return $this->destination; + } + + /** + * Get events + * + * @return array + */ + public function getEvents(): array + { + return $this->events; + } +} diff --git a/src/parser/lib/Source/UnknownSource.php b/src/parser/lib/Source/UnknownSource.php deleted file mode 100644 index 6803ca78..00000000 --- a/src/parser/lib/Source/UnknownSource.php +++ /dev/null @@ -1,41 +0,0 @@ -assertEquals($destination, 'U0123456789abcdef0123456789abcd'); + $this->assertEquals($parsedEvents->getDestination(), 'U0123456789abcdef0123456789abcd'); + $events = $parsedEvents->getEvents(); $this->assertEquals(count($events), 39); { @@ -894,9 +875,8 @@ public function testParseEventRequest() $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); $this->assertJsonStringEqualsJsonString(json_encode($eventArrays[0]), $event->__toString()); - $this->assertInstanceOf('LINE\Webhook\Model\MessageEvent', $event); - $this->assertInstanceOf('LINE\Webhook\Model\TextMessageContent', $event->getMessage()); - /** @var TextMessage $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\MessageEvent::class, $event); + $this->assertInstanceOf(\LINE\Webhook\Model\TextMessageContent::class, $event->getMessage()); $this->assertEquals('replytoken', $event->getReplyToken()); $this->assertEquals('contentid', $event->getMessage()->getId()); $this->assertEquals('text', $event->getMessage()->getType()); @@ -918,8 +898,7 @@ public function testParseEventRequest() $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); $this->assertJsonStringEqualsJsonString(json_encode($eventArrays[1]), $event->__toString()); - $this->assertInstanceOf('LINE\Webhook\Model\ImageMessageContent', $event->getMessage()); - /** @var ImageMessage $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\ImageMessageContent::class, $event->getMessage()); $this->assertEquals('replytoken', $event->getReplyToken()); $this->assertEquals('image', $event->getMessage()->getType()); $this->assertEquals('contentid', $event->getMessage()->getId()); @@ -949,9 +928,8 @@ public function testParseEventRequest() $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); $this->assertJsonStringEqualsJsonString(json_encode($eventArrays[2]), $event->__toString()); - $this->assertInstanceOf('LINE\Webhook\Model\AudioMessageContent', $event->getMessage()); + $this->assertInstanceOf(\LINE\Webhook\Model\AudioMessageContent::class, $event->getMessage()); $this->assertEquals('userid', $source->getUserId()); - /** @var AudioMessage $event */ $this->assertEquals('replytoken', $event->getReplyToken()); $this->assertEquals('audio', $event->getMessage()->getType()); $this->assertEquals('contentid', $event->getMessage()->getId()); @@ -973,8 +951,7 @@ public function testParseEventRequest() $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); $this->assertJsonStringEqualsJsonString(json_encode($eventArrays[3]), $event->__toString()); - $this->assertInstanceOf('LINE\Webhook\Model\VideoMessageContent', $event->getMessage()); - /** @var VideoMessage $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\VideoMessageContent::class, $event->getMessage()); $this->assertEquals('replytoken', $event->getReplyToken()); $this->assertEquals('video', $event->getMessage()->getType()); $this->assertEquals(10000, $event->getMessage()->getDuration()); @@ -997,8 +974,7 @@ public function testParseEventRequest() $this->assertEquals('userid', $source->getUserId()); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\AudioMessageContent', $event->getMessage()); - /** @var AudioMessage $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\AudioMessageContent::class, $event->getMessage()); $this->assertEquals('replytoken', $event->getReplyToken()); $this->assertEquals('audio', $event->getMessage()->getType()); } @@ -1009,8 +985,7 @@ public function testParseEventRequest() $source = $event->getSource(); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\LocationMessageContent', $event->getMessage()); - /** @var LocationMessage $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\LocationMessageContent::class, $event->getMessage()); $this->assertEquals('replytoken', $event->getReplyToken()); $this->assertEquals('location', $event->getMessage()->getType()); $this->assertEquals('label', $event->getMessage()->getTitle()); @@ -1025,8 +1000,7 @@ public function testParseEventRequest() $source = $event->getSource(); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\LocationMessageContent', $event->getMessage()); - /** @var LocationMessage $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\LocationMessageContent::class, $event->getMessage()); $this->assertEquals('replytoken', $event->getReplyToken()); $this->assertEquals('location', $event->getMessage()->getType()); $this->assertNull($event->getMessage()->getTitle()); @@ -1041,8 +1015,7 @@ public function testParseEventRequest() $source = $event->getSource(); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\LocationMessageContent', $event->getMessage()); - /** @var LocationMessage $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\LocationMessageContent::class, $event->getMessage()); $this->assertEquals('replytoken', $event->getReplyToken()); $this->assertEquals('location', $event->getMessage()->getType()); $this->assertEquals('label', $event->getMessage()->getTitle()); @@ -1057,8 +1030,7 @@ public function testParseEventRequest() $source = $event->getSource(); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\StickerMessageContent', $event->getMessage()); - /** @var StickerMessage $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\StickerMessageContent::class, $event->getMessage()); $this->assertEquals('replytoken', $event->getReplyToken()); $this->assertEquals('sticker', $event->getMessage()->getType()); $this->assertEquals(1, $event->getMessage()->getPackageId()); @@ -1074,8 +1046,7 @@ public function testParseEventRequest() $source = $event->getSource(); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\StickerMessageContent', $event->getMessage()); - /** @var StickerMessage $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\StickerMessageContent::class, $event->getMessage()); $this->assertEquals('replytoken', $event->getReplyToken()); $this->assertEquals('sticker', $event->getMessage()->getType()); $this->assertEquals(12287, $event->getMessage()->getPackageId()); @@ -1094,8 +1065,7 @@ public function testParseEventRequest() $source = $event->getSource(); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\FollowEvent', $event); - /** @var FollowEvent $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\FollowEvent::class, $event); $this->assertEquals('replytoken', $event->getReplyToken()); } @@ -1105,7 +1075,7 @@ public function testParseEventRequest() $source = $event->getSource(); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\UnfollowEvent', $event); + $this->assertInstanceOf(\LINE\Webhook\Model\UnfollowEvent::class, $event); } { @@ -1114,8 +1084,7 @@ public function testParseEventRequest() $source = $event->getSource(); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\JoinEvent', $event); - /** @var JoinEvent $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\JoinEvent::class, $event); $this->assertEquals('replytoken', $event->getReplyToken()); } @@ -1125,7 +1094,7 @@ public function testParseEventRequest() $source = $event->getSource(); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\LeaveEvent', $event); + $this->assertInstanceOf(\LINE\Webhook\Model\LeaveEvent::class, $event); } { @@ -1134,8 +1103,7 @@ public function testParseEventRequest() $source = $event->getSource(); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\PostbackEvent', $event); - /** @var PostbackEvent $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\PostbackEvent::class, $event); $this->assertEquals('replytoken', $event->getReplyToken()); $this->assertEquals('postback', $event->getPostback()->getData()); $this->assertEquals(null, $event->getPostback()->getParams()); @@ -1147,8 +1115,7 @@ public function testParseEventRequest() $source = $event->getSource(); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\BeaconEvent', $event); - /** @var BeaconDetectionEvent $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\BeaconEvent::class, $event); $this->assertEquals('replytoken', $event->getReplyToken()); $this->assertEquals('bid', $event->getBeacon()->getHwid()); $this->assertEquals('enter', $event->getBeacon()->getType()); @@ -1162,8 +1129,7 @@ public function testParseEventRequest() // unknown event (event source: user) $event = $events[16]; $source = $event->getSource(); - $this->assertInstanceOf('LINE\Parser\Event\UnknownEvent', $event); - /** @var UnknownEvent $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\Event::class, $event); $this->assertEquals('__unknown__', $event->getType()); $this->assertEquals('__unknown__', $event->jsonSerialize()->type); // with unprocessed event body $this->assertEquals(12345678901234, $event->getTimestamp()); @@ -1178,8 +1144,7 @@ public function testParseEventRequest() // unknown event (event source: unknown) $event = $events[17]; $source = $event->getSource(); - $this->assertInstanceOf('LINE\Parser\Event\UnknownEvent', $event); - /** @var UnknownEvent $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\Event::class, $event); $this->assertEquals('__unknown__', $event->getType()); $this->assertEquals('__unknown__', $event->jsonSerialize()->type); // with unprocessed event body $this->assertEquals(12345678901234, $event->getTimestamp()); @@ -1192,10 +1157,9 @@ public function testParseEventRequest() // message event & unknown message event $event = $events[18]; $source = $event->getSource(); - $this->assertInstanceOf('LINE\Webhook\Model\MessageEvent', $event); + $this->assertInstanceOf(\LINE\Webhook\Model\MessageEvent::class, $event); $message = $event->getMessage(); - $this->assertInstanceOf('LINE\Parser\MessageContent\UnknownMessageContent', $message); - /** @var UnknownMessage $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\MessageContent::class, $message); $this->assertEquals('__unknown__', $message->getType()); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); @@ -1207,9 +1171,8 @@ public function testParseEventRequest() $source = $event->getSource(); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\MessageEvent', $event); - $this->assertInstanceOf('LINE\Webhook\Model\FileMessageContent', $event->getMessage()); - /** @var FileMessage $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\MessageEvent::class, $event); + $this->assertInstanceOf(\LINE\Webhook\Model\FileMessageContent::class, $event->getMessage()); $this->assertEquals('file.txt', $event->getMessage()->getFileName()); $this->assertEquals('2138', $event->getMessage()->getFileSize()); $this->assertEquals('325708', $event->getMessage()->getId()); @@ -1222,8 +1185,7 @@ public function testParseEventRequest() $source = $event->getSource(); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\PostbackEvent', $event); - /** @var PostbackEvent $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\PostbackEvent::class, $event); $this->assertEquals('replytoken', $event->getReplyToken()); $this->assertEquals('postback', $event->getPostback()->getData()); $this->assertEquals(["date" => "2013-04-01"], $event->getPostback()->getParams()); @@ -1235,8 +1197,7 @@ public function testParseEventRequest() $source = $event->getSource(); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\PostbackEvent', $event); - /** @var PostbackEvent $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\PostbackEvent::class, $event); $this->assertEquals('replytoken', $event->getReplyToken()); $this->assertEquals('postback', $event->getPostback()->getData()); $this->assertEquals(["time" => "10:00"], $event->getPostback()->getParams()); @@ -1248,8 +1209,7 @@ public function testParseEventRequest() $source = $event->getSource(); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\PostbackEvent', $event); - /** @var PostbackEvent $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\PostbackEvent::class, $event); $this->assertEquals('replytoken', $event->getReplyToken()); $this->assertEquals('postback', $event->getPostback()->getData()); $this->assertEquals(["datetime" => "2013-04-01T10:00"], $event->getPostback()->getParams()); @@ -1261,8 +1221,7 @@ public function testParseEventRequest() $source = $event->getSource(); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\AccountLinkEvent', $event); - /** @var AccountLinkEvent $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\AccountLinkEvent::class, $event); $this->assertEquals('replytoken', $event->getReplyToken()); $this->assertEquals(1501234567890, $event->getTimestamp()); $this->assertEquals('standby', $event->getMode()); @@ -1276,8 +1235,7 @@ public function testParseEventRequest() $source = $event->getSource(); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\AccountLinkEvent', $event); - /** @var AccountLinkEvent $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\AccountLinkEvent::class, $event); $this->assertEquals('replytoken', $event->getReplyToken()); $this->assertEquals(1501234567890, $event->getTimestamp()); $this->assertEquals('active', $event->getMode()); @@ -1291,8 +1249,7 @@ public function testParseEventRequest() $source = $event->getSource(); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\MemberJoinedEvent', $event); - /** @var MemberJoinedEvent $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\MemberJoinedEvent::class, $event); $this->assertEquals('replytoken', $event->getReplyToken()); $this->assertEquals(12345678901234, $event->getTimestamp()); $this->assertEquals('active', $event->getMode()); @@ -1307,8 +1264,7 @@ public function testParseEventRequest() $source = $event->getSource(); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\MemberLeftEvent', $event); - /** @var MemberLeftEvent $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\MemberLeftEvent::class, $event); $this->assertEquals(12345678901234, $event->getTimestamp()); $this->assertEquals('active', $event->getMode()); $members = $event->getLeft()->getMembers(); @@ -1322,11 +1278,13 @@ public function testParseEventRequest() $source = $event->getSource(); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\ThingsEvent', $event); - /** @var ThingsEvent $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\ThingsEvent::class, $event); $this->assertEquals('replytoken', $event->getReplyToken()); - $this->assertEquals('t2c449c9d1', $event->getThings()->getDeviceId()); - $this->assertEquals(ThingsEventType::DEVICE_LINKED, $event->getThings()->getType()); + /** @var \LINE\Webhook\Model\LinkThingsContent $things */ + $things = $event->getThings(); + $this->assertInstanceOf(\LINE\Webhook\Model\LinkThingsContent::class, $things); + $this->assertEquals('t2c449c9d1', $things->getDeviceId()); + $this->assertEquals(ThingsEventType::DEVICE_LINKED, $things->getType()); } { @@ -1335,11 +1293,13 @@ public function testParseEventRequest() $source = $event->getSource(); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\ThingsEvent', $event); - /** @var ThingsEvent $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\ThingsEvent::class, $event); $this->assertEquals('replytoken', $event->getReplyToken()); - $this->assertEquals('t2c449c9d1', $event->getThings()->getDeviceId()); - $this->assertEquals(ThingsEventType::DEVICE_UNLINKED, $event->getThings()->getType()); + /** @var \LINE\Webhook\Model\UnlinkThingsContent $things */ + $things = $event->getThings(); + $this->assertInstanceOf(\LINE\Webhook\Model\UnlinkThingsContent::class, $things); + $this->assertEquals('t2c449c9d1', $things->getDeviceId()); + $this->assertEquals(ThingsEventType::DEVICE_UNLINKED, $things->getType()); } { @@ -1348,12 +1308,14 @@ public function testParseEventRequest() $source = $event->getSource(); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\ThingsEvent', $event); - /** @var ThingsEvent $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\ThingsEvent::class, $event); $this->assertEquals('replytoken', $event->getReplyToken()); - $this->assertEquals('t2c449c9d1', $event->getThings()->getDeviceId()); - $this->assertEquals(ThingsEventType::SCENARIO_RESULT, $event->getThings()->getType()); - $scenarioResult = $event->getThings()->getResult(); + /** @var \LINE\Webhook\Model\ScenarioResultThingsContent $things */ + $things = $event->getThings(); + $this->assertInstanceOf(\LINE\Webhook\Model\ScenarioResultThingsContent::class, $things); + $this->assertEquals('t2c449c9d1', $things->getDeviceId()); + $this->assertEquals(ThingsEventType::SCENARIO_RESULT, $things->getType()); + $scenarioResult = $things->getResult(); $this->assertEquals('dummy_scenario_id', $scenarioResult->getScenarioId()); $this->assertEquals(2, $scenarioResult->getRevision()); $this->assertEquals(1547817845950, $scenarioResult->getStartTime()); @@ -1375,9 +1337,8 @@ public function testParseEventRequest() $this->assertEquals('userid', $source->getUserId()); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\MessageEvent', $event); - $this->assertInstanceOf('LINE\Webhook\Model\TextMessageContent', $event->getMessage()); - /** @var TextMessage $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\MessageEvent::class, $event); + $this->assertInstanceOf(\LINE\Webhook\Model\TextMessageContent::class, $event->getMessage()); $this->assertEquals('replytoken', $event->getReplyToken()); $this->assertEquals('contentid', $event->getMessage()->getId()); $this->assertEquals('text', $event->getMessage()->getType()); @@ -1391,8 +1352,7 @@ public function testParseEventRequest() $source = $event->getSource(); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\UnsendEvent', $event); - /** @var UnsendMessage $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\UnsendEvent::class, $event); $this->assertEquals('325708', $event->getUnsend()->getMessageId()); } @@ -1404,8 +1364,7 @@ public function testParseEventRequest() 'testwebhookeventid', $event->getWebhookEventId() ); - $this->assertInstanceOf('LINE\Webhook\Model\VideoPlayCompleteEvent', $event); - /** @var UnsendMessage $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\VideoPlayCompleteEvent::class, $event); $this->assertEquals('track_id', $event->getVideoPlayComplete()->getTrackingId()); } @@ -1419,15 +1378,14 @@ public function testParseEventRequest() $this->assertEquals('U4af4980629...', $source->getUserId()); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\MessageEvent', $event); - $this->assertInstanceOf('LINE\Webhook\Model\TextMessageContent', $event->getMessage()); - /** @var TextMessage $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\MessageEvent::class, $event); + $this->assertInstanceOf(\LINE\Webhook\Model\TextMessageContent::class, $event->getMessage()); $this->assertEquals('nHuyWiB7yP5Zw52FIkcQobQuGDXCTA', $event->getReplyToken()); $this->assertEquals('325708', $event->getMessage()->getId()); $this->assertEquals('text', $event->getMessage()->getType()); $this->assertEquals('@example Hello, world! (love)', $event->getMessage()->getText()); $mentioneeInfo = $event->getMessage()->getMention()->getMentionees()[0]; - $this->assertInstanceOf('LINE\Webhook\Model\UserMentionee', $mentioneeInfo); + $this->assertInstanceOf(\LINE\Webhook\Model\UserMentionee::class, $mentioneeInfo); $this->assertEquals(0, $mentioneeInfo->getIndex()); $this->assertEquals(8, $mentioneeInfo->getLength()); $this->assertEquals('U0123456789abcd0123456789abcdef', $mentioneeInfo->getUserId()); @@ -1443,15 +1401,14 @@ public function testParseEventRequest() $this->assertEquals('U0123456789abcd0123456789abcdef', $source->getUserId()); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\MessageEvent', $event); - $this->assertInstanceOf('LINE\Webhook\Model\TextMessageContent', $event->getMessage()); - /** @var TextMessage $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\MessageEvent::class, $event); + $this->assertInstanceOf(\LINE\Webhook\Model\TextMessageContent::class, $event->getMessage()); $this->assertEquals('nHuyWiB7yP5Zw52FIkcQobQuGDXCTA', $event->getReplyToken()); $this->assertEquals('325708', $event->getMessage()->getId()); $this->assertEquals('text', $event->getMessage()->getType()); $this->assertEquals('@example message without mentionee userId', $event->getMessage()->getText()); $mentioneeInfo = $event->getMessage()->getMention()->getMentionees()[0]; - $this->assertInstanceOf('LINE\Webhook\Model\AllMentionee', $mentioneeInfo); + $this->assertInstanceOf(\LINE\Webhook\Model\AllMentionee::class, $mentioneeInfo); $this->assertEquals(0, $mentioneeInfo->getIndex()); $this->assertEquals(8, $mentioneeInfo->getLength()); } @@ -1466,9 +1423,8 @@ public function testParseEventRequest() $this->assertEquals('U0123456789abcd0123456789abcdef', $source->getUserId()); $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); - $this->assertInstanceOf('LINE\Webhook\Model\MessageEvent', $event); - $this->assertInstanceOf('LINE\Webhook\Model\TextMessageContent', $event->getMessage()); - /** @var TextMessage $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\MessageEvent::class, $event); + $this->assertInstanceOf(\LINE\Webhook\Model\TextMessageContent::class, $event->getMessage()); $this->assertEquals('nHuyWiB7yP5Zw52FIkcQobQuGDXCTA', $event->getReplyToken()); $this->assertEquals('325708', $event->getMessage()->getId()); $this->assertEquals('text', $event->getMessage()->getType()); @@ -1486,8 +1442,7 @@ public function testParseEventRequest() $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); $this->assertJsonStringEqualsJsonString(json_encode($eventArrays[36]), $event->__toString()); - $this->assertInstanceOf('LINE\Webhook\Model\ImageMessageContent', $event->getMessage()); - /** @var ImageMessage $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\ImageMessageContent::class, $event->getMessage()); $this->assertEquals('replytoken', $event->getReplyToken()); $this->assertEquals('image', $event->getMessage()->getType()); $this->assertEquals('contentid', $event->getMessage()->getId()); @@ -1513,8 +1468,7 @@ public function testParseEventRequest() $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertFalse($event->getDeliveryContext()->getIsRedelivery()); $this->assertJsonStringEqualsJsonString(json_encode($eventArrays[37]), $event->__toString()); - $this->assertInstanceOf('LINE\Webhook\Model\ImageMessageContent', $event->getMessage()); - /** @var ImageMessage $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\ImageMessageContent::class, $event->getMessage()); $this->assertEquals('replytoken', $event->getReplyToken()); $this->assertEquals('image', $event->getMessage()->getType()); $this->assertEquals('contentid', $event->getMessage()->getId()); @@ -1546,9 +1500,8 @@ public function testParseEventRequest() $this->assertEquals('testwebhookeventid', $event->getWebhookEventId()); $this->assertTrue($event->getDeliveryContext()->getIsRedelivery()); $this->assertJsonStringEqualsJsonString(json_encode($eventArrays[38]), $event->__toString()); - $this->assertInstanceOf('LINE\Webhook\Model\MessageEvent', $event); - $this->assertInstanceOf('LINE\Webhook\Model\TextMessageContent', $event->getMessage()); - /** @var TextMessage $event */ + $this->assertInstanceOf(\LINE\Webhook\Model\MessageEvent::class, $event); + $this->assertInstanceOf(\LINE\Webhook\Model\TextMessageContent::class, $event->getMessage()); $this->assertEquals('replytoken', $event->getReplyToken()); $this->assertEquals('contentid', $event->getMessage()->getId()); $this->assertEquals('text', $event->getMessage()->getType()); diff --git a/src/parser/test/SignatureValidatorTest.php b/src/parser/test/SignatureValidatorTest.php index 076c6a60..bf2b4134 100644 --- a/src/parser/test/SignatureValidatorTest.php +++ b/src/parser/test/SignatureValidatorTest.php @@ -176,18 +176,18 @@ class SignatureValidatorTest extends TestCase JSON; /** - * @throws \LINE\LINEBot\Exception\InvalidSignatureException + * @throws \LINE\Parser\Exception\InvalidSignatureException */ public function testValidateSignature() { $this->assertTrue(SignatureValidator::validateSignature( - $this::$json, - $this::$channelSecret, + self::$json, + self::$channelSecret, 'Nq7AExtg27CQRfM3ngKtQxtVeIM/757ZTyDOrxQtWNg=' )); $this->assertFalse(SignatureValidator::validateSignature( - $this::$json, - $this::$channelSecret, + self::$json, + self::$channelSecret, 'deadbeef' )); }