diff --git a/src/Plugins/BangMessage/Inbound/BangMessage.php b/src/Plugins/BangMessage/Inbound/BangMessage.php index 648ac8f..89fb526 100644 --- a/src/Plugins/BangMessage/Inbound/BangMessage.php +++ b/src/Plugins/BangMessage/Inbound/BangMessage.php @@ -16,11 +16,22 @@ class BangMessage extends Message */ public function bangCommand() { - return head(explode(' ', $this->text())); + list($bangCommand, $bangText) = explode(' ', $this->text(), 2); + + return ltrim($bangCommand, '!'); } - public function text() + /** + * The bang text + * e.g. the message "!somersault mouse acrobat" + * would return "mouse acrobat" as the bang text + * + * @return string + */ + public function bangText() { - return ltrim(parent::text(), '!'); + list($bangCommand, $bangText) = explode(' ', $this->text(), 2); + + return $bangText; } } diff --git a/src/Plugins/BangMessage/Plugin.php b/src/Plugins/BangMessage/Plugin.php index 7d33c46..d7edb41 100644 --- a/src/Plugins/BangMessage/Plugin.php +++ b/src/Plugins/BangMessage/Plugin.php @@ -14,7 +14,7 @@ class Plugin */ public function createBangMessage(Message $message) { - if ($message->text()[0] === '!') { + if (preg_match('/^![^\s]/', $message->text())) { return BangMessage::from($message); } diff --git a/tests/Plugins/BangMessage/Inbound/BangMessageTest.php b/tests/Plugins/BangMessage/Inbound/BangMessageTest.php index 8a01375..94764bf 100644 --- a/tests/Plugins/BangMessage/Inbound/BangMessageTest.php +++ b/tests/Plugins/BangMessage/Inbound/BangMessageTest.php @@ -5,26 +5,26 @@ namespace Spires\Tests\Plugins\BangMessage\Inbound; -use Spires\Plugins\BangMessage\Inbound\BangMessage; use Spires\Tests\Resources\SpiresTestCase; +use Spires\Plugins\BangMessage\Inbound\BangMessage; class BangMessageTest extends SpiresTestCase { /** * @test */ - function it_returns_the_text_minus_the_bang() + function it_provides_the_bang_command() { $bangMessage = BangMessage::from($this->newRawMessage("!foo hello world")); - assertThat($bangMessage->text(), is("foo hello world")); + assertThat($bangMessage->bangCommand(), is("foo")); } /** * @test */ - function it_provides_the_bang_command() + function it_provides_the_bang_params() { $bangMessage = BangMessage::from($this->newRawMessage("!foo hello world")); - assertThat($bangMessage->bangCommand(), is("foo")); + assertThat($bangMessage->bangText(), is("hello world")); } } diff --git a/tests/Plugins/BangMessage/PluginTest.php b/tests/Plugins/BangMessage/PluginTest.php new file mode 100644 index 0000000..d53ee7d --- /dev/null +++ b/tests/Plugins/BangMessage/PluginTest.php @@ -0,0 +1,59 @@ +newRawMessage("!foo")); + $bang = $plugin->createBangMessage($message); + + assertThat($bang, is(anInstanceOf(BangMessage::class))); + } + + /** + * @test + */ + public function recognize_bang_command_with_additional_text() + { + $plugin = new Plugin(); + $message = Message::from($this->newRawMessage("!foo hello world")); + $bang = $plugin->createBangMessage($message); + + assertThat($bang, is(anInstanceOf(BangMessage::class))); + } + + /** + * @test + */ + public function do_not_recognize_if_just_a_bang() + { + $plugin = new Plugin(); + $message = Message::from($this->newRawMessage("!")); + $bang = $plugin->createBangMessage($message); + + assertThat($bang, is(nullValue())); + } + + /** + * @test + */ + public function do_not_recognize_if_space_after_bang() + { + $plugin = new Plugin(); + $message = Message::from($this->newRawMessage("! foo")); + $bang = $plugin->createBangMessage($message); + + assertThat($bang, is(nullValue())); + } +} diff --git a/tests/helpersTest.php b/tests/helpersTest.php new file mode 100644 index 0000000..4983210 --- /dev/null +++ b/tests/helpersTest.php @@ -0,0 +1,29 @@ +