diff --git a/src/MessageEvent.php b/src/MessageEvent.php index 6490874..35445e4 100644 --- a/src/MessageEvent.php +++ b/src/MessageEvent.php @@ -24,15 +24,15 @@ public static function parse($data, $lastEventId) foreach ($lines as $line) { $name = strstr($line, ':', true); - $value = substr(strstr($line, ':'), 1); + $value = (string) substr(strstr($line, ':'), 1); if (isset($value[0]) && $value[0] === ' ') { - $value = substr($value, 1); + $value = (string) substr($value, 1); } if ($name === 'data') { $data .= $value . "\n"; } elseif ($name === 'id') { $id = $value; - } elseif ($name === 'event') { + } elseif ($name === 'event' && $value !== '') { $type = $value; } elseif ($name === 'retry' && $value === (string)(int)$value && $value >= 0) { $retry = (int)$value; diff --git a/tests/MessageEventTest.php b/tests/MessageEventTest.php index 84ef8ea..599c1ba 100644 --- a/tests/MessageEventTest.php +++ b/tests/MessageEventTest.php @@ -88,6 +88,38 @@ public function testParseWithMultipleIdsReturnsMessageWithLastEventIdFromStream( $this->assertEquals('2', $message->lastEventId); } + public function testParseReturnsMessageWithTypeFromStream() + { + $message = MessageEvent::parse("data: hello\r\nevent: join", ''); + + $this->assertEquals("hello", $message->data); + $this->assertEquals('join', $message->type); + } + + public function testParseWithoutEventReturnsMessageWithDefaultMessageType() + { + $message = MessageEvent::parse("data: hello", ''); + + $this->assertEquals("hello", $message->data); + $this->assertEquals('message', $message->type); + } + + public function testParseWithMultipleEventsReturnsMessageWithLastTypeFromStream() + { + $message = MessageEvent::parse("data: hello\nevent: join\nevent: leave", ''); + + $this->assertEquals("hello", $message->data); + $this->assertEquals('leave', $message->type); + } + + public function testParseWithEmptyEventReturnsMessageWithDefaultMessageType() + { + $message = MessageEvent::parse("data: hello\r\nevent:", ''); + + $this->assertEquals("hello", $message->data); + $this->assertEquals('message', $message->type); + } + public function retryTimeDataProvider() { return [