diff --git a/src/Types/Message.php b/src/Types/Message.php index fd8e4c94..c3d16d57 100644 --- a/src/Types/Message.php +++ b/src/Types/Message.php @@ -46,6 +46,7 @@ class Message extends BaseType implements TypeInterface 'photo' => ArrayOfPhotoSize::class, 'sticker' => Sticker::class, 'video' => Video::class, + 'video_note' => VideoNote::class, 'voice' => Voice::class, 'caption' => true, 'contact' => Contact::class, @@ -238,6 +239,13 @@ class Message extends BaseType implements TypeInterface */ protected $video; + /** + * Optional. Message is a video note, information about the video note + * + * @var \TelegramBot\Api\Types\VideoNote + */ + protected $videoNote; + /** * Optional. Message is a voice message, information about the file * @@ -789,6 +797,23 @@ public function setVideo(Video $video) $this->video = $video; } + + /** + * @return VideoNote + */ + public function getVideoNote() + { + return $this->videoNote; + } + + /** + * @param VideoNote $videoNote + */ + public function setVideoNote(VideoNote $videoNote) + { + $this->videoNote = $videoNote; + } + /** * @return Voice */ diff --git a/src/Types/VideoNote.php b/src/Types/VideoNote.php new file mode 100644 index 00000000..0d19ee5e --- /dev/null +++ b/src/Types/VideoNote.php @@ -0,0 +1,170 @@ + true, + 'length' => true, + 'duration' => true, + 'thumb' => PhotoSize::class, + 'file_size' => true + ]; + + /** + * Unique identifier for this file + * + * @var string + */ + protected $fileId; + + /** + * Duration of the video note in seconds as defined by sender + * + * @var int + */ + protected $duration; + + /** + * Value of video width and height (diameter of the video message) as defined by sender + * + * @var int + */ + protected $length; + + /** + * Video Note thumbnail + * + * @var PhotoSize + */ + protected $thumb; + + /** + * Optional. File size + * + * @var int + */ + protected $fileSize; + + /** + * @return int + */ + public function getDuration() + { + return $this->duration; + } + + /** + * @param int $duration + * + * @throws InvalidArgumentException + */ + public function setDuration($duration) + { + if (is_integer($duration)) { + $this->duration = $duration; + } else { + throw new InvalidArgumentException('VideoNote duration does not contain integer values'); + } + } + + /** + * @return string + */ + public function getFileId() + { + return $this->fileId; + } + + /** + * @param string $fileId + */ + public function setFileId($fileId) + { + $this->fileId = $fileId; + } + + /** + * @return int + */ + public function getFileSize() + { + return $this->fileSize; + } + + /** + * @param int $fileSize + * + * @throws InvalidArgumentException + */ + public function setFileSize($fileSize) + { + if (is_integer($fileSize)) { + $this->fileSize = $fileSize; + } else { + throw new InvalidArgumentException('VideoNote file_size does not contain integer values'); + } + } + + /** + * @return int + */ + public function getLength() + { + return $this->length; + } + + /** + * @param int $length + * + * @throws InvalidArgumentException + */ + public function setLength($length) + { + if (is_integer($length)) { + $this->length = $length; + } else { + throw new InvalidArgumentException('VideoNote length does not contain integer values'); + } + } + + /** + * @return PhotoSize + */ + public function getThumb() + { + return $this->thumb; + } + + /** + * @param PhotoSize $thumb + */ + public function setThumb(PhotoSize $thumb) + { + $this->thumb = $thumb; + } + +} diff --git a/tests/VideoNoteTest.php b/tests/VideoNoteTest.php new file mode 100644 index 00000000..e533806e --- /dev/null +++ b/tests/VideoNoteTest.php @@ -0,0 +1,134 @@ +setFileId('testfileId'); + $this->assertAttributeEquals('testfileId', 'fileId', $item); + } + + public function testGetFileId() + { + $item = new VideoNote(); + $item->setFileId('testfileId'); + $this->assertEquals('testfileId', $item->getFileId()); + } + + public function testSetDuration() + { + $item = new VideoNote(); + $item->setDuration(1); + $this->assertAttributeEquals(1, 'duration', $item); + } + + public function testGetDuration() + { + $item = new VideoNote(); + $item->setDuration(1); + $this->assertEquals(1, $item->getDuration()); + } + + public function testSetFileSize() + { + $item = new VideoNote(); + $item->setFileSize(5); + $this->assertAttributeEquals(5, 'fileSize', $item); + } + + public function testGetFileSize() + { + $item = new VideoNote(); + $item->setFileSize(6); + $this->assertEquals(6, $item->getFileSize()); + } + + public function testSetThumb() + { + $item = new VideoNote(); + $thumb = PhotoSize::fromResponse(array( + 'file_id' => 'testFileId1', + 'width' => 1, + 'height' => 2, + 'file_size' => 3, + )); + $item->setThumb($thumb); + $this->assertAttributeEquals($thumb, 'thumb', $item); + } + + public function testGetThumb() + { + $item = new VideoNote(); + $thumb = PhotoSize::fromResponse(array( + 'file_id' => 'testFileId1', + 'width' => 1, + 'height' => 2, + 'file_size' => 3, + )); + $item->setThumb($thumb); + $this->assertEquals($thumb, $item->getThumb()); + $this->assertInstanceOf('\TelegramBot\Api\Types\PhotoSize', $item->getThumb()); + } + + public function testFromResponse() + { + $item = VideoNote::fromResponse(array( + 'file_id' => 'testFileId1', + 'length' => 1, + 'duration' => 2, + 'file_size' => 3, + 'thumb' => array( + 'file_id' => 'testFileId1', + 'width' => 4, + 'height' => 5, + 'file_size' => 6 + ) + )); + $thumb = PhotoSize::fromResponse(array( + 'file_id' => 'testFileId1', + 'width' => 4, + 'height' => 5, + 'file_size' => 6 + )); + $this->assertInstanceOf('\TelegramBot\Api\Types\VideoNote', $item); + $this->assertAttributeEquals('testFileId1', 'fileId', $item); + $this->assertAttributeEquals(1, 'length', $item); + $this->assertAttributeEquals(2, 'duration', $item); + $this->assertAttributeEquals(3, 'fileSize', $item); + $this->assertAttributeEquals($thumb, 'thumb', $item); + $this->assertInstanceOf('\TelegramBot\Api\Types\PhotoSize', $item->getThumb()); + } + + /** + * @expectedException \TelegramBot\Api\InvalidArgumentException + */ + public function testSetHeightException() + { + $item = new VideoNote(); + $item->setLength('s'); + } + + /** + * @expectedException \TelegramBot\Api\InvalidArgumentException + */ + public function testSetDurationException() + { + $item = new VideoNote(); + $item->setDuration('s'); + } + /** + * @expectedException \TelegramBot\Api\InvalidArgumentException + */ + public function testSetFileSizeException() + { + $item = new VideoNote(); + $item->setFileSize('s'); + } + +}