Commit 84267c30 authored by MBoretto's avatar MBoretto

resolve conflict

parents a8ea577f 980dcd4c
...@@ -31,9 +31,7 @@ class ChatsCommand extends AdminCommand ...@@ -31,9 +31,7 @@ class ChatsCommand extends AdminCommand
/**#@-*/ /**#@-*/
/** /**
* Execute command * {@inheritdoc}
*
* @return boolean
*/ */
public function execute() public function execute()
{ {
...@@ -85,6 +83,6 @@ class ChatsCommand extends AdminCommand ...@@ -85,6 +83,6 @@ class ChatsCommand extends AdminCommand
'text' => $text, 'text' => $text,
]; ];
return Request::sendMessage($data)->isOk(); return Request::sendMessage($data);
} }
} }
...@@ -95,6 +95,6 @@ class SendtoallCommand extends AdminCommand ...@@ -95,6 +95,6 @@ class SendtoallCommand extends AdminCommand
'text' => $text, 'text' => $text,
]; ];
return Request::sendMessage($data)->isOk(); return Request::sendMessage($data);
} }
} }
...@@ -23,7 +23,7 @@ class SendtochannelCommand extends AdminCommand ...@@ -23,7 +23,7 @@ class SendtochannelCommand extends AdminCommand
*/ */
protected $name = 'sendtochannel'; protected $name = 'sendtochannel';
protected $description = 'Send message to a channel'; protected $description = 'Send message to a channel';
protected $usage = '/sendchannel <message to send>'; protected $usage = '/sendtochannel <message to send>';
protected $version = '0.1.1'; protected $version = '0.1.1';
protected $need_mysql = false; protected $need_mysql = false;
/**#@-*/ /**#@-*/
...@@ -52,8 +52,7 @@ class SendtochannelCommand extends AdminCommand ...@@ -52,8 +52,7 @@ class SendtochannelCommand extends AdminCommand
'text' => $text, 'text' => $text,
]; ];
$result = Request::sendMessage($data); if (Request::sendMessage($data)->isOk()) {
if ($result->isOk()) {
$text_back = 'Message sent succesfully to: ' . $your_channel; $text_back = 'Message sent succesfully to: ' . $your_channel;
} else { } else {
$text_back = 'Sorry message not sent to: ' . $your_channel; $text_back = 'Sorry message not sent to: ' . $your_channel;
...@@ -65,6 +64,6 @@ class SendtochannelCommand extends AdminCommand ...@@ -65,6 +64,6 @@ class SendtochannelCommand extends AdminCommand
'text' => $text_back, 'text' => $text_back,
]; ];
return Request::sendMessage($data)->isOk(); return Request::sendMessage($data);
} }
} }
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
namespace Longman\TelegramBot\Commands; namespace Longman\TelegramBot\Commands;
use Longman\TelegramBot\DB; use Longman\TelegramBot\DB;
use Longman\TelegramBot\Request;
use Longman\TelegramBot\Telegram; use Longman\TelegramBot\Telegram;
use Longman\TelegramBot\Entities\Chat; use Longman\TelegramBot\Entities\Chat;
use Longman\TelegramBot\Entities\Update; use Longman\TelegramBot\Entities\Update;
...@@ -42,13 +43,6 @@ abstract class Command ...@@ -42,13 +43,6 @@ abstract class Command
*/ */
protected $message; protected $message;
/**
* Command
*
* @var string
*/
protected $command;
/** /**
* Name * Name
* *
...@@ -61,7 +55,7 @@ abstract class Command ...@@ -61,7 +55,7 @@ abstract class Command
* *
* @var string * @var string
*/ */
protected $description = 'Command help'; protected $description = 'Command description';
/** /**
* Usage * Usage
...@@ -96,16 +90,18 @@ abstract class Command ...@@ -96,16 +90,18 @@ abstract class Command
* *
* @var array * @var array
*/ */
protected $config; protected $config = [];
/** /**
* Constructor * Constructor
* *
* @param Telegram $telegram * @param Telegram $telegram
* @param Entities\Update $update
*/ */
public function __construct(Telegram $telegram) public function __construct(Telegram $telegram, Update $update = null)
{ {
$this->telegram = $telegram; $this->telegram = $telegram;
$this->setUpdate($update);
$this->config = $telegram->getCommandConfig($this->name); $this->config = $telegram->getCommandConfig($this->name);
} }
...@@ -127,25 +123,27 @@ abstract class Command ...@@ -127,25 +123,27 @@ abstract class Command
/** /**
* Pre-execute command * Pre-execute command
* *
* @return mixed * @return Entities\ServerResponse
*/ */
public function preExecute() public function preExecute()
{ {
if (!$this->need_mysql || ($this->telegram->isDbEnabled() && DB::isDbConnected())) { if ($this->need_mysql && !($this->telegram->isDbEnabled() && DB::isDbConnected())) {
return $this->execute();
}
return $this->executeNoDB(); return $this->executeNoDB();
} }
return $this->execute();
}
/** /**
* Execute command * Execute command
*
* @return Entities\ServerResponse
*/ */
abstract public function execute(); abstract public function execute();
/** /**
* Execution if MySQL is required but not available * Execution if MySQL is required but not available
* *
* @return boolean * @return Entities\ServerResponse
*/ */
public function executeNoDB() public function executeNoDB()
{ {
...@@ -158,7 +156,7 @@ abstract class Command ...@@ -158,7 +156,7 @@ abstract class Command
'text' => 'Sorry no database connection, unable to execute "' . $this->name . '" command.', 'text' => 'Sorry no database connection, unable to execute "' . $this->name . '" command.',
]; ];
return Request::sendMessage($data)->isOk(); return Request::sendMessage($data);
} }
/** /**
...@@ -184,21 +182,22 @@ abstract class Command ...@@ -184,21 +182,22 @@ abstract class Command
/** /**
* Get command config * Get command config
* *
* Look for parameter $name if found return it, if not return null. * Look for config $name if found return it, if not return null.
* If $name is not set return the all set params * If $name is not set return all set config.
* *
* @param string|null $name * @param string|null $name
*
* @return mixed * @return mixed
*/ */
public function getConfig($name = null) public function getConfig($name = null)
{ {
if ($name === null) {
return $this->config;
}
if (isset($this->config[$name])) { if (isset($this->config[$name])) {
return $this->config[$name]; return $this->config[$name];
} else {
return null;
} }
return null;
return $this->config;
} }
/** /**
...@@ -211,18 +210,6 @@ abstract class Command ...@@ -211,18 +210,6 @@ abstract class Command
return $this->telegram; return $this->telegram;
} }
/**
* Set command
*
* @param string $command
* @return Command
*/
public function setCommand($command)
{
$this->command = $command;
return $this;
}
/** /**
* Get usage * Get usage
* *
...@@ -272,4 +259,34 @@ abstract class Command ...@@ -272,4 +259,34 @@ abstract class Command
{ {
return $this->enabled; return $this->enabled;
} }
/**
* If this is a SystemCommand
*
* @return bool
*/
public function isSystemCommand()
{
return ($this instanceof SystemCommand);
}
/**
* If this is an AdminCommand
*
* @return bool
*/
public function isAdminCommand()
{
return ($this instanceof AdminCommand);
}
/**
* If this is a UserCommand
*
* @return bool
*/
public function isUserCommand()
{
return ($this instanceof UserCommand);
}
} }
...@@ -10,6 +10,8 @@ ...@@ -10,6 +10,8 @@
namespace Longman\TelegramBot\Commands; namespace Longman\TelegramBot\Commands;
use Longman\TelegramBot\Entities\ServerResponse;
/** /**
* Abstract System Command Class * Abstract System Command Class
*/ */
...@@ -18,14 +20,14 @@ abstract class SystemCommand extends Command ...@@ -18,14 +20,14 @@ abstract class SystemCommand extends Command
/** /**
* A system command just executes * A system command just executes
* *
* Although system commands should just work and return 'true', * Although system commands should just work and return a successful ServerResponse,
* each system command can override this method to add custom functionality. * each system command can override this method to add custom functionality.
* *
* @return bool * @return Entities\ServerResponse
*/ */
public function execute() public function execute()
{ {
//System command, do nothing //System command, return successful ServerResponse
return true; return new ServerResponse(['ok' => true, 'result' => true], null);
} }
} }
...@@ -26,16 +26,11 @@ class ChannelchatcreatedCommand extends SystemCommand ...@@ -26,16 +26,11 @@ class ChannelchatcreatedCommand extends SystemCommand
/**#@-*/ /**#@-*/
/** /**
* Execute command * {@inheritdoc}
*
* @return boolean
*/ */
public function execute() /*public function execute()
{ {
//$message = $this->getMessage(); //$message = $this->getMessage();
//$channel_chat_created = $message->getChannelChatCreated(); //$channel_chat_created = $message->getChannelChatCreated();
}*/
//System command, do nothing
return true;
}
} }
...@@ -26,18 +26,13 @@ class ChoseninlineresultCommand extends SystemCommand ...@@ -26,18 +26,13 @@ class ChoseninlineresultCommand extends SystemCommand
/**#@-*/ /**#@-*/
/** /**
* Execute command * {@inheritdoc}
*
* @return boolean
*/ */
public function execute() /*public function execute()
{ {
//Information about chosen result is returned //Information about chosen result is returned
//$update = $this->getUpdate(); //$update = $this->getUpdate();
//$inline_query = $update->getChosenInlineResult(); //$inline_query = $update->getChosenInlineResult();
//$query = $inline_query->getQuery(); //$query = $inline_query->getQuery();
}*/
//System command, do nothing
return true;
}
} }
...@@ -26,16 +26,11 @@ class DeletechatphotoCommand extends SystemCommand ...@@ -26,16 +26,11 @@ class DeletechatphotoCommand extends SystemCommand
/**#@-*/ /**#@-*/
/** /**
* Execute command * {@inheritdoc}
*
* @return boolean
*/ */
public function execute() /*public function execute()
{ {
//$message = $this->getMessage(); //$message = $this->getMessage();
//$delete_chat_photo = $message->getDeleteChatPhoto(); //$delete_chat_photo = $message->getDeleteChatPhoto();
}*/
//System command, do nothing
return true;
}
} }
...@@ -27,11 +27,7 @@ class GenericCommand extends SystemCommand ...@@ -27,11 +27,7 @@ class GenericCommand extends SystemCommand
/**#@-*/ /**#@-*/
/** /**
* Execute command * {@inheritdoc}
*
* @todo This can't be right, as it always returns "Command: xyz not found.. :("
*
* @return boolean
*/ */
public function execute() public function execute()
{ {
...@@ -43,9 +39,9 @@ class GenericCommand extends SystemCommand ...@@ -43,9 +39,9 @@ class GenericCommand extends SystemCommand
$data = [ $data = [
'chat_id' => $chat_id, 'chat_id' => $chat_id,
'text' => 'Command: ' . $command . ' not found.. :(', 'text' => 'Command /' . $command . ' not found.. :(',
]; ];
return Request::sendMessage($data)->isOk(); return Request::sendMessage($data);
} }
} }
...@@ -26,16 +26,11 @@ class GroupchatcreatedCommand extends SystemCommand ...@@ -26,16 +26,11 @@ class GroupchatcreatedCommand extends SystemCommand
/**#@-*/ /**#@-*/
/** /**
* Execute command * {@inheritdoc}
*
* @return boolean
*/ */
public function execute() /*public function execute()
{ {
//$message = $this->getMessage(); //$message = $this->getMessage();
//$group_chat_created = $message->getGroupChatCreated(); //$group_chat_created = $message->getGroupChatCreated();
}*/
//System command, do nothing
return true;
}
} }
...@@ -28,9 +28,7 @@ class InlinequeryCommand extends SystemCommand ...@@ -28,9 +28,7 @@ class InlinequeryCommand extends SystemCommand
/**#@-*/ /**#@-*/
/** /**
* Execute command * {@inheritdoc}
*
* @return boolean
*/ */
public function execute() public function execute()
{ {
...@@ -52,6 +50,6 @@ class InlinequeryCommand extends SystemCommand ...@@ -52,6 +50,6 @@ class InlinequeryCommand extends SystemCommand
} }
$data['results'] = '[' . implode(',', $array_article) . ']'; $data['results'] = '[' . implode(',', $array_article) . ']';
return Request::answerInlineQuery($data)->isOk(); return Request::answerInlineQuery($data);
} }
} }
...@@ -26,16 +26,11 @@ class LeftchatparticipantCommand extends SystemCommand ...@@ -26,16 +26,11 @@ class LeftchatparticipantCommand extends SystemCommand
/**#@-*/ /**#@-*/
/** /**
* Execute command * {@inheritdoc}
*
* @return boolean
*/ */
public function execute() /*public function execute()
{ {
//$message = $this->getMessage(); //$message = $this->getMessage();
//$participant = $message->getLeftChatParticipant(); //$participant = $message->getLeftChatParticipant();
}*/
//System command, do nothing
return true;
}
} }
...@@ -27,9 +27,7 @@ class NewchatparticipantCommand extends SystemCommand ...@@ -27,9 +27,7 @@ class NewchatparticipantCommand extends SystemCommand
/**#@-*/ /**#@-*/
/** /**
* Execute command * {@inheritdoc}
*
* @return boolean
*/ */
public function execute() public function execute()
{ {
...@@ -49,6 +47,6 @@ class NewchatparticipantCommand extends SystemCommand ...@@ -49,6 +47,6 @@ class NewchatparticipantCommand extends SystemCommand
'text' => $text, 'text' => $text,
]; ];
return Request::sendMessage($data)->isOk(); return Request::sendMessage($data);
} }
} }
...@@ -26,16 +26,11 @@ class NewchattitleCommand extends SystemCommand ...@@ -26,16 +26,11 @@ class NewchattitleCommand extends SystemCommand
/**#@-*/ /**#@-*/
/** /**
* Execute command * {@inheritdoc}
*
* @return boolean
*/ */
public function execute() /*public function execute()
{ {
//$message = $this->getMessage(); //$message = $this->getMessage();
//$new_chat_title = $message->getNewChatTitle(); //$new_chat_title = $message->getNewChatTitle();
}*/
//System command, do nothing
return true;
}
} }
...@@ -28,9 +28,7 @@ class StartCommand extends SystemCommand ...@@ -28,9 +28,7 @@ class StartCommand extends SystemCommand
/**#@-*/ /**#@-*/
/** /**
* Execute command * {@inheritdoc}
*
* @return boolean
*/ */
public function execute() public function execute()
{ {
...@@ -44,6 +42,6 @@ class StartCommand extends SystemCommand ...@@ -44,6 +42,6 @@ class StartCommand extends SystemCommand
'text' => $text, 'text' => $text,
]; ];
return Request::sendMessage($data)->isOk(); return Request::sendMessage($data);
} }
} }
...@@ -27,9 +27,7 @@ class SupergroupchatcreatedCommand extends SystemCommand ...@@ -27,9 +27,7 @@ class SupergroupchatcreatedCommand extends SystemCommand
/**#@-*/ /**#@-*/
/** /**
* Execute command * {@inheritdoc}
*
* @return boolean
*/ */
public function execute() public function execute()
{ {
...@@ -48,6 +46,6 @@ class SupergroupchatcreatedCommand extends SystemCommand ...@@ -48,6 +46,6 @@ class SupergroupchatcreatedCommand extends SystemCommand
'text' => $text, 'text' => $text,
]; ];
return Request::sendMessage($data)->isOk(); return Request::sendMessage($data);
} }
} }
...@@ -175,9 +175,7 @@ class DateCommand extends UserCommand ...@@ -175,9 +175,7 @@ class DateCommand extends UserCommand
} }
/** /**
* Execute command * {@inheritdoc}
*
* @return boolean
*/ */
public function execute() public function execute()
{ {
...@@ -204,6 +202,6 @@ class DateCommand extends UserCommand ...@@ -204,6 +202,6 @@ class DateCommand extends UserCommand
'text' => $text, 'text' => $text,
]; ];
return Request::sendMessage($data)->isOk(); return Request::sendMessage($data);
} }
} }
...@@ -28,21 +28,23 @@ class EchoCommand extends UserCommand ...@@ -28,21 +28,23 @@ class EchoCommand extends UserCommand
/**#@-*/ /**#@-*/
/** /**
* Execute command * {@inheritdoc}
*
* @return boolean
*/ */
public function execute() public function execute()
{ {
$message = $this->getMessage(); $message = $this->getMessage();
$chat_id = $message->getChat()->getId(); $chat_id = $message->getChat()->getId();
$text = $message->getText(true); $text = trim($message->getText(true));
if ($text === '') {
$text = 'Command usage: ' . $this->getUsage();
}
$data = [ $data = [
'chat_id' => $chat_id, 'chat_id' => $chat_id,
'text' => $text, 'text' => $text,
]; ];
return Request::sendMessage($data)->isOk(); return Request::sendMessage($data);
} }
} }
...@@ -28,9 +28,7 @@ class HelpCommand extends UserCommand ...@@ -28,9 +28,7 @@ class HelpCommand extends UserCommand
/**#@-*/ /**#@-*/
/** /**
* Execute command * {@inheritdoc}
*
* @return boolean
*/ */
public function execute() public function execute()
{ {
...@@ -38,46 +36,40 @@ class HelpCommand extends UserCommand ...@@ -38,46 +36,40 @@ class HelpCommand extends UserCommand
$chat_id = $message->getChat()->getId(); $chat_id = $message->getChat()->getId();
$message_id = $message->getMessageId(); $message_id = $message->getMessageId();
$text = $message->getText(true); $command = trim($message->getText(true));
$commands = $this->telegram->getCommandsList(); //Only get enabled Admin and User commands
$commands = array_filter($this->telegram->getCommandsList(), function ($command) {
return (!$command->isSystemCommand() && $command->isEnabled());
});
if (empty($text)) { //If no command parameter is passed, show the list
$msg = $this->telegram->getBotName() . ' v. ' . $this->telegram->getVersion() . "\n\n"; if ($command === '') {
$msg .= 'Commands List:' . "\n"; $text = $this->telegram->getBotName() . ' v. ' . $this->telegram->getVersion() . "\n\n";
$text .= 'Commands List:' . "\n";
foreach ($commands as $command) { foreach ($commands as $command) {
if (is_object($command)) { $text .= '/' . $command->getName() . ' - ' . $command->getDescription() . "\n";
if (!$command->isEnabled()) {
continue;
} }
$msg .= '/' . $command->getName() . ' - ' . $command->getDescription() . "\n"; $text .= "\n" . 'For exact command help type: /help <command>';
}
}
$msg .= "\n" . 'For exact command help type: /help <command>';
} else {
$text = str_replace('/', '', $text);
if (isset($commands[$text])) {
$command = $commands[$text];
if (!$command->isEnabled()) {
$msg = 'Command ' . $text . ' not found';
} else { } else {
$msg = 'Command: ' . $command->getName() . ' v' . $command->getVersion() . "\n"; $command = str_replace('/', '', $command);
$msg .= 'Description: ' . $command->getDescription() . "\n"; if (isset($commands[$command])) {
$msg .= 'Usage: ' . $command->getUsage(); $command = $commands[$command];
} $text = 'Command: ' . $command->getName() . ' v' . $command->getVersion() . "\n";
$text .= 'Description: ' . $command->getDescription() . "\n";
$text .= 'Usage: ' . $command->getUsage();
} else { } else {
$msg = 'Command ' . $text . ' not found'; $text = 'No help available: Command /' . $command . ' not found';
} }
} }
$data = [ $data = [
'chat_id' => $chat_id, 'chat_id' => $chat_id,
'reply_to_message_id' => $message_id, 'reply_to_message_id' => $message_id,
'text' => $msg, 'text' => $text,
]; ];
return Request::sendMessage($data)->isOk(); return Request::sendMessage($data);
} }
} }
...@@ -28,9 +28,7 @@ class SlapCommand extends UserCommand ...@@ -28,9 +28,7 @@ class SlapCommand extends UserCommand
/**#@-*/ /**#@-*/
/** /**
* Execute command * {@inheritdoc}
*
* @return boolean
*/ */
public function execute() public function execute()
{ {
...@@ -55,6 +53,6 @@ class SlapCommand extends UserCommand ...@@ -55,6 +53,6 @@ class SlapCommand extends UserCommand
'text' => $text, 'text' => $text,
]; ];
return Request::sendMessage($data)->isOk(); return Request::sendMessage($data);
} }
} }
...@@ -110,9 +110,7 @@ class WeatherCommand extends UserCommand ...@@ -110,9 +110,7 @@ class WeatherCommand extends UserCommand
} }
/** /**
* Execute command * {@inheritdoc}
*
* @return boolean
*/ */
public function execute() public function execute()
{ {
...@@ -139,6 +137,6 @@ class WeatherCommand extends UserCommand ...@@ -139,6 +137,6 @@ class WeatherCommand extends UserCommand
'text' => $text, 'text' => $text,
]; ];
return Request::sendMessage($data)->isOk(); return Request::sendMessage($data);
} }
} }
...@@ -32,9 +32,7 @@ class WhoamiCommand extends UserCommand ...@@ -32,9 +32,7 @@ class WhoamiCommand extends UserCommand
/**#@-*/ /**#@-*/
/** /**
* Execute command * {@inheritdoc}
*
* @return boolean
*/ */
public function execute() public function execute()
{ {
......
...@@ -88,14 +88,14 @@ class Request ...@@ -88,14 +88,14 @@ class Request
} }
/** /**
* Set input from update or stdin and return it * Set input from custom input or stdin and return it
* *
* @return string * @return string
*/ */
public static function getInput() public static function getInput()
{ {
if ($update = self::$telegram->getCustomUpdate()) { if ($input = self::$telegram->getCustomInput()) {
self::setInputRaw($update); self::setInputRaw($input);
} else { } else {
self::setInputRaw(file_get_contents('php://input')); self::setInputRaw(file_get_contents('php://input'));
} }
......
This diff is collapsed.
<?php <?php
/* /**
* This file is part of the TelegramBot package. * This file is part of the TelegramBot package.
* *
* (c) Avtandil Kikabidze aka LONGMAN <akalongman@gmail.com> * (c) Avtandil Kikabidze aka LONGMAN <akalongman@gmail.com>
...@@ -7,7 +7,9 @@ ...@@ -7,7 +7,9 @@
* For the full copyright and license information, please view the LICENSE * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Tests; namespace Tests;
/* /*
* Set error reporting to the max level. * Set error reporting to the max level.
*/ */
...@@ -18,24 +20,22 @@ error_reporting(-1); ...@@ -18,24 +20,22 @@ error_reporting(-1);
*/ */
date_default_timezone_set('UTC'); date_default_timezone_set('UTC');
$autoloader = __DIR__ . '/../vendor/autoload.php';
$root = realpath(dirname(dirname(__FILE__))); /*
/**
* Check that --dev composer installation was done * Check that --dev composer installation was done
*/ */
if (!file_exists($root . '/vendor/autoload.php')) { if (!file_exists($autoloader)) {
throw new \Exception( throw new \Exception(
'Please run "php composer.phar install --dev" in root directory ' 'Please run "php composer.phar install --dev" in root directory '
. 'to setup unit test dependencies before running the tests' . 'to setup unit test dependencies before running the tests'
); );
} }
// Include the Composer autoloader //Include the Composer autoloader
$loader = require __DIR__ . '/../vendor/autoload.php'; require_once $autoloader;
/* /*
* Unset global variables that are no longer needed. * Unset global variables that are no longer needed.
*/ */
unset($root, $loader); unset($autoloader);
<?php
/**
* This file is part of the TelegramBot package.
*
* (c) Avtandil Kikabidze aka LONGMAN <akalongman@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Tests;
use Longman\TelegramBot\Entities\Update;
/**
* @package TelegramTest
* @author Avtandil Kikabidze <akalongman@gmail.com>
* @copyright Avtandil Kikabidze <akalongman@gmail.com>
* @license http://opensource.org/licenses/mit-license.php The MIT License (MIT)
* @link http://www.github.com/akalongman/php-telegram-bot
*/
class TestHelpers
{
/**
* Set the value of a private/protected property of an object
*
* @param object $object Object that contains the private property
* @param string $property Name of the property who's value we want to set
* @param mixed $value The value to set to the property
*/
public static function setObjectProperty($object, $property, $value)
{
$ref_object = new \ReflectionObject($object);
$ref_property = $ref_object->getProperty($property);
$ref_property->setAccessible(true);
$ref_property->setValue($object, $value);
}
/**
* Return a simple fake Update object
*
* @param array $data Pass custom data array if needed
*
* @return Entities\Update
*/
public static function getFakeUpdateObject($data = null)
{
$data = $data ?: [
'update_id' => 1,
'message' => [
'message_id' => 1,
'chat' => [
'id' => 1,
],
'date' => 1,
]
];
return new Update($data, 'botname');
}
/**
* Return a fake command object for the passed command text
*
* @param string $command_text
*
* @return Entities\Update
*/
public static function getFakeUpdateCommandObject($command_text)
{
$data = [
'update_id' => 1,
'message' => [
'message_id' => 1,
'from' => [
'id' => 1,
'first_name' => 'first',
'last_name' => 'last',
'username' => 'user',
],
'chat' => [
'id' => 1,
'first_name' => 'first',
'last_name' => 'last',
'username' => 'name',
'type' => 'private',
],
'date' => 1,
'text' => $command_text,
],
];
return self::getFakeUpdateObject($data);
}
}
<?php
/**
* This file is part of the TelegramBot package.
*
* (c) Avtandil Kikabidze aka LONGMAN <akalongman@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Tests\Unit\Commands;
use Tests\Unit\TestCase;
use Tests\TestHelpers;
use Longman\TelegramBot\Telegram;
/**
* @package TelegramTest
* @author Avtandil Kikabidze <akalongman@gmail.com>
* @copyright Avtandil Kikabidze <akalongman@gmail.com>
* @license http://opensource.org/licenses/mit-license.php The MIT License (MIT)
* @link http://www.github.com/akalongman/php-telegram-bot
*/
class CommandTest extends TestCase
{
private $command_namespace = 'Longman\TelegramBot\Commands\Command';
private $telegram;
private $command_stub;
private $telegram_with_config;
private $command_stub_with_config;
public function setUp()
{
//Default command object
$this->telegram = new Telegram('apikey', 'botname');
$this->command_stub = $this->getMockForAbstractClass($this->command_namespace, [$this->telegram]);
//Create separate command object that contain a command config
$this->telegram_with_config = new Telegram('apikey', 'botname');
$this->telegram_with_config->setCommandConfig('command_name', ['config_key' => 'config_value']);
$this->command_stub_with_config = $this->getMockBuilder($this->command_namespace)
->disableOriginalConstructor()
->getMockForAbstractClass();
//Set a name for the object property so that the constructor can set the config correctly
TestHelpers::setObjectProperty($this->command_stub_with_config, 'name', 'command_name');
$this->command_stub_with_config->__construct($this->telegram_with_config);
}
/**
* @test
*/
public function testCommandConstructorNeedsTelegramObject()
{
$error_message = 'must be an instance of Longman\TelegramBot\Telegram';
$params_to_test = [
[],
[null],
['something'],
[new \stdClass],
];
foreach ($params_to_test as $param) {
try {
$this->getMockForAbstractClass($this->command_namespace, $param);
} catch (\Exception $e) {
$this->assertContains($error_message, $e->getMessage());
} catch (\Throwable $e) { //For PHP7
$this->assertContains($error_message, $e->getMessage());
}
}
}
/**
* @test
*/
public function testCommandHasCorrectTelegramObject()
{
$this->assertAttributeEquals($this->telegram, 'telegram', $this->command_stub);
$this->assertSame($this->telegram, $this->command_stub->getTelegram());
}
/**
* @test
*/
public function testDefaultCommandName()
{
$this->assertAttributeEquals('', 'name', $this->command_stub);
$this->assertEmpty($this->command_stub->getName());
}
/**
* @test
*/
public function testDefaultCommandDescription()
{
$this->assertAttributeEquals('Command description', 'description', $this->command_stub);
$this->assertEquals('Command description', $this->command_stub->getDescription());
}
/**
* @test
*/
public function testDefaultCommandUsage()
{
$this->assertAttributeEquals('Command usage', 'usage', $this->command_stub);
$this->assertEquals('Command usage', $this->command_stub->getUsage());
}
/**
* @test
*/
public function testDefaultCommandVersion()
{
$this->assertAttributeEquals('1.0.0', 'version', $this->command_stub);
$this->assertEquals('1.0.0', $this->command_stub->getVersion());
}
/**
* @test
*/
public function testDefaultCommandIsEnabled()
{
$this->assertAttributeEquals(true, 'enabled', $this->command_stub);
$this->assertTrue($this->command_stub->isEnabled());
}
/**
* @test
*/
public function testDefaultCommandNeedsMysql()
{
$this->assertAttributeEquals(false, 'need_mysql', $this->command_stub);
}
/**
* @test
*/
public function testDefaultCommandEmptyConfig()
{
$this->assertAttributeEquals([], 'config', $this->command_stub);
}
/**
* @test
*/
public function testDefaultCommandUpdateNull()
{
$this->assertAttributeEquals(null, 'update', $this->command_stub);
}
/**
* @test
*/
public function testCommandSetUpdateAndMessage()
{
$stub = $this->command_stub;
$this->assertSame($stub, $stub->setUpdate());
$this->assertEquals(null, $stub->getUpdate());
$this->assertEquals(null, $stub->getMessage());
$this->assertSame($stub, $stub->setUpdate(null));
$this->assertEquals(null, $stub->getUpdate());
$this->assertEquals(null, $stub->getMessage());
$update = TestHelpers::getFakeUpdateObject();
$message = $update->getMessage();
$stub->setUpdate($update);
$this->assertAttributeEquals($update, 'update', $stub);
$this->assertEquals($update, $stub->getUpdate());
$this->assertAttributeEquals($message, 'message', $stub);
$this->assertEquals($message, $stub->getMessage());
}
/**
* @test
*/
public function testCommandWithConfigNotEmptyConfig()
{
$this->assertAttributeNotEmpty('config', $this->command_stub_with_config);
}
/**
* @test
*/
public function testCommandWithConfigCorrectConfig()
{
$this->assertAttributeEquals(['config_key' => 'config_value'], 'config', $this->command_stub_with_config);
$this->assertEquals(['config_key' => 'config_value'], $this->command_stub_with_config->getConfig(null));
$this->assertEquals(['config_key' => 'config_value'], $this->command_stub_with_config->getConfig());
$this->assertEquals('config_value', $this->command_stub_with_config->getConfig('config_key'));
$this->assertEquals(null, $this->command_stub_with_config->getConfig('not_config_key'));
}
}
<?php
/**
* This file is part of the TelegramBot package.
*
* (c) Avtandil Kikabidze aka LONGMAN <akalongman@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Tests\Unit\Commands;
use Tests\Unit\TestCase;
use Longman\TelegramBot\Telegram;
/**
* @package TelegramTest
* @author Avtandil Kikabidze <akalongman@gmail.com>
* @copyright Avtandil Kikabidze <akalongman@gmail.com>
* @license http://opensource.org/licenses/mit-license.php The MIT License (MIT)
* @link http://www.github.com/akalongman/php-telegram-bot
*/
class CommandTestCase extends TestCase
{
protected $telegram;
protected $command;
public function setUp()
{
$this->telegram = new Telegram('apikey', 'botname');
$this->telegram->addCommandsPath(BASE_COMMANDS_PATH . '/UserCommands');
$this->telegram->getCommandsList();
}
/**
* Make sure the version number is in the format x.x.x, x.x or x
*
* @test
*/
public function testVersionNumberFormat()
{
$this->assertRegExp('/^(\d+\\.)?(\d+\\.)?(\d+)$/', $this->command->getVersion());
}
}
<?php
/**
* This file is part of the TelegramBot package.
*
* (c) Avtandil Kikabidze aka LONGMAN <akalongman@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Tests\Unit\Commands\UserCommands;
use Tests\Unit\Commands\CommandTestCase;
use Tests\TestHelpers;
use Longman\TelegramBot\Telegram;
use Longman\TelegramBot\Commands\UserCommands\EchoCommand;
/**
* @package TelegramTest
* @author Avtandil Kikabidze <akalongman@gmail.com>
* @copyright Avtandil Kikabidze <akalongman@gmail.com>
* @license http://opensource.org/licenses/mit-license.php The MIT License (MIT)
* @link http://www.github.com/akalongman/php-telegram-bot
*/
class EchoCommandTest extends CommandTestCase
{
public function setUp()
{
parent::setUp();
$this->command = new EchoCommand($this->telegram);
}
/**
* @test
*/
public function testEchoCommandProperties()
{
$this->assertAttributeEquals('echo', 'name', $this->command);
$this->assertAttributeEquals('Show text', 'description', $this->command);
$this->assertAttributeEquals('/echo <text>', 'usage', $this->command);
}
/**
* @test
*/
public function testEchoCommandExecuteWithoutParameter()
{
$text = $this->command
->setUpdate(TestHelpers::getFakeUpdateCommandObject('/echo'))
->execute()
->getResult()
->getText();
$this->assertEquals('Command usage: /echo <text>', $text);
$text = $this->command
->setUpdate(TestHelpers::getFakeUpdateCommandObject('/echo '))
->execute()
->getResult()
->getText();
$this->assertEquals('Command usage: /echo <text>', $text);
}
/**
* @test
*/
public function testEchoCommandExecuteWithParameter()
{
$text = $this->command
->setUpdate(TestHelpers::getFakeUpdateCommandObject('/echo Message!'))
->execute()
->getResult()
->getText();
$this->assertEquals('Message!', $text);
}
}
<?php
/**
* This file is part of the TelegramBot package.
*
* (c) Avtandil Kikabidze aka LONGMAN <akalongman@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Tests\Unit\Commands\UserCommands;
use Tests\Unit\Commands\CommandTestCase;
use Tests\TestHelpers;
use Longman\TelegramBot\Commands\UserCommands\HelpCommand;
/**
* @package TelegramTest
* @author Avtandil Kikabidze <akalongman@gmail.com>
* @copyright Avtandil Kikabidze <akalongman@gmail.com>
* @license http://opensource.org/licenses/mit-license.php The MIT License (MIT)
* @link http://www.github.com/akalongman/php-telegram-bot
*/
class HelpCommandTest extends CommandTestCase
{
public function setUp()
{
parent::setUp();
$this->command = new HelpCommand($this->telegram);
}
/**
* @test
*/
public function testHelpCommandProperties()
{
$this->assertAttributeEquals('help', 'name', $this->command);
$this->assertAttributeEquals('Show bot commands help', 'description', $this->command);
$this->assertAttributeEquals('/help or /help <command>', 'usage', $this->command);
}
/**
* @test
*/
public function testHelpCommandExecuteWithoutParameter()
{
$text = $this->command
->setUpdate(TestHelpers::getFakeUpdateCommandObject('/help'))
->execute()
->getResult()
->getText();
$this->assertContains(
"botname v. " . $this->telegram->getVersion() . "\n\nCommands List:",
$text
);
}
/**
* @test
*/
public function testHelpCommandExecuteWithParameterInvalidCommand()
{
$text = $this->command
->setUpdate(TestHelpers::getFakeUpdateCommandObject('/help invalidcommand'))
->execute()
->getResult()
->getText();
$this->assertEquals('No help available: Command /invalidcommand not found', $text);
}
/**
* @test
*/
public function testHelpCommandExecuteWithParameterValidCommand()
{
$text = $this->command
->setUpdate(TestHelpers::getFakeUpdateCommandObject('/help echo'))
->execute()
->getResult()
->getText();
$this->assertContains("Description: Show text\nUsage: /echo <text>", $text);
}
}
<?php <?php
/* /**
* This file is part of the TelegramBot package. * This file is part of the TelegramBot package.
* *
* (c) Avtandil Kikabidze aka LONGMAN <akalongman@gmail.com> * (c) Avtandil Kikabidze aka LONGMAN <akalongman@gmail.com>
...@@ -7,9 +7,10 @@ ...@@ -7,9 +7,10 @@
* For the full copyright and license information, please view the LICENSE * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
namespace Tests\Unit; namespace Tests\Unit;
use \Longman\TelegramBot\Telegram; use Longman\TelegramBot\Telegram;
/** /**
* @package TelegramTest * @package TelegramTest
...@@ -25,7 +26,6 @@ class TelegramTest extends TestCase ...@@ -25,7 +26,6 @@ class TelegramTest extends TestCase
*/ */
private $telegram; private $telegram;
/** /**
* setUp * setUp
*/ */
...@@ -34,51 +34,56 @@ class TelegramTest extends TestCase ...@@ -34,51 +34,56 @@ class TelegramTest extends TestCase
$this->telegram = new Telegram('testapikey', 'testbotname'); $this->telegram = new Telegram('testapikey', 'testbotname');
} }
/** /**
* @test * @test
* @expectedException \Longman\TelegramBot\Exception\TelegramException * @expectedException \Longman\TelegramBot\Exception\TelegramException
*/ */
public function newInstanceWithoutParams() { public function newInstanceWithoutApiKeyParam()
$telegram = new Telegram('testapikey', null); {
$telegram = new Telegram(null, 'test'); new Telegram(null, 'testbotname');
} }
/** /**
* @test * @test
* @expectedException \Longman\TelegramBot\Exception\TelegramException
*/ */
public function getCommandsList() { public function newInstanceWithoutBotNameParam()
$commands = $this->telegram->getCommandsList(); {
$this->assertInternalType('array', $commands); new Telegram('testapikey', null);
$this->assertNotCount(0, $commands);
} }
/** /**
* @test * @test
*/ */
public function getCommandsClass() { public function getApiKey()
$command = $this->telegram->getCommandClass('help'); {
$this->assertInstanceOf('Longman\TelegramBot\Commands\HelpCommand', $command); $this->assertEquals('testapikey', $this->telegram->getApiKey());
} }
/** /**
* @test * @test
*/ */
public function getApiKey() { public function getBotName()
$this->assertEquals('testapikey', $this->telegram->getApiKey()); {
$this->assertEquals('testbotname', $this->telegram->getBotName());
} }
/** /**
* @test * @test
*/ */
public function getBotName() { public function getCommandsList()
$this->assertEquals('testbotname', $this->telegram->getBotName()); {
$commands = $this->telegram->getCommandsList();
$this->assertInternalType('array', $commands);
$this->assertNotCount(0, $commands);
} }
/**
* @test
*/
public function getHelpCommandObject()
{
$command = $this->telegram->getCommandObject('help');
$this->assertInstanceOf('Longman\TelegramBot\Commands\UserCommands\HelpCommand', $command);
}
} }
...@@ -12,5 +12,4 @@ class TestCase extends \PHPUnit_Framework_TestCase ...@@ -12,5 +12,4 @@ class TestCase extends \PHPUnit_Framework_TestCase
); );
} }
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment