From 20551106b842bc71a7eaff6af3b72ecc79e65185 Mon Sep 17 00:00:00 2001 From: eduard_crm Date: Fri, 18 Sep 2020 11:45:14 +0300 Subject: [PATCH 1/2] =?UTF-8?q?Add=20support=20VideoNote=20type.=20=D0=9Eb?= =?UTF-8?q?ject=20represents=20a=20video=20message=20(available=20in=20Tel?= =?UTF-8?q?egram=20apps=20as=20of=20v.4.0).=20https://core.telegram.org/bo?= =?UTF-8?q?ts/api#videonote?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Types/Message.php | 25 ++++++ src/Types/VideoNote.php | 171 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 196 insertions(+) create mode 100644 src/Types/VideoNote.php 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..fb9cc344 --- /dev/null +++ b/src/Types/VideoNote.php @@ -0,0 +1,171 @@ + 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(); + } + } + + /** + * @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(); + } + } + + /** + * @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(); + } + } + + /** + * @return PhotoSize + */ + public function getThumb() + { + return $this->thumb; + } + + /** + * @param PhotoSize $thumb + */ + public function setThumb(PhotoSize $thumb) + { + $this->thumb = $thumb; + } + +} From 503ee6754134ef30407852e6cbaf94c1f0fd5123 Mon Sep 17 00:00:00 2001 From: eduard_crm Date: Tue, 22 Sep 2020 18:03:42 +0300 Subject: [PATCH 2/2] Add text exception for VideoNote and phpunittest --- src/Types/VideoNote.php | 7 +-- tests/VideoNoteTest.php | 134 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 137 insertions(+), 4 deletions(-) create mode 100644 tests/VideoNoteTest.php diff --git a/src/Types/VideoNote.php b/src/Types/VideoNote.php index fb9cc344..0d19ee5e 100644 --- a/src/Types/VideoNote.php +++ b/src/Types/VideoNote.php @@ -62,7 +62,6 @@ class VideoNote extends BaseType implements TypeInterface */ protected $thumb; - /** * Optional. File size * @@ -88,7 +87,7 @@ public function setDuration($duration) if (is_integer($duration)) { $this->duration = $duration; } else { - throw new InvalidArgumentException(); + throw new InvalidArgumentException('VideoNote duration does not contain integer values'); } } @@ -126,7 +125,7 @@ public function setFileSize($fileSize) if (is_integer($fileSize)) { $this->fileSize = $fileSize; } else { - throw new InvalidArgumentException(); + throw new InvalidArgumentException('VideoNote file_size does not contain integer values'); } } @@ -148,7 +147,7 @@ public function setLength($length) if (is_integer($length)) { $this->length = $length; } else { - throw new InvalidArgumentException(); + throw new InvalidArgumentException('VideoNote length does not contain integer values'); } } 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'); + } + +}