diff --git a/examples/mms-create.php b/examples/mms-create.php new file mode 100644 index 00000000..457b0e50 --- /dev/null +++ b/examples/mms-create.php @@ -0,0 +1,25 @@ +originator = 'MessageBird'; +$MmsMessage->recipients = array(31612345678); +$MmsMessage->subject = "Check out this cool MMS"; +$MmsMessage->body = 'Have you seen this logo?'; +$MmsMessage->mediaUrls = array('https://www.messagebird.com/assets/images/og/messagebird.gif'); + +try { + $MmsMessageResult = $MessageBird->mmsMessages->create($MmsMessage); + var_dump($MmsMessageResult); +} catch (\MessageBird\Exceptions\AuthenticateException $e) { + // That means that your accessKey is unknown + echo 'wrong login'; +} catch (\MessageBird\Exceptions\BalanceException $e) { + // That means that you are out of credits, so do something about it. + echo 'no balance'; +} catch (\Exception $e) { + echo $e->getMessage(); +} diff --git a/examples/mms-delete.php b/examples/mms-delete.php new file mode 100644 index 00000000..8ec1e877 --- /dev/null +++ b/examples/mms-delete.php @@ -0,0 +1,18 @@ +mmsMessages->delete('mms_message_id'); // id here + var_dump('Deleted: ' . $deleted); +} catch (\MessageBird\Exceptions\AuthenticateException $e) { + // That means that your accessKey is unknown + echo 'wrong login'; +} catch (\MessageBird\Exceptions\BalanceException $e) { + // That means that you are out of credits, so do something about it. + echo 'no balance'; +} catch (\Exception $e) { + echo $e->getMessage(); +} diff --git a/examples/mms-list.php b/examples/mms-list.php new file mode 100644 index 00000000..1958a02b --- /dev/null +++ b/examples/mms-list.php @@ -0,0 +1,15 @@ +mmsMessages->getList(array('offset' => 0, 'limit' => 30)); + var_dump($MmsList); +} catch (\MessageBird\Exceptions\AuthenticateException $e) { + // That means that your accessKey is unknown + echo 'wrong login'; +} catch (\Exception $e) { + var_dump($e->getMessage()); +} diff --git a/examples/mms-view.php b/examples/mms-view.php new file mode 100644 index 00000000..c05eec5e --- /dev/null +++ b/examples/mms-view.php @@ -0,0 +1,15 @@ +mmsMessages->read('mms_message_id'); // Set a MMS Message id + var_dump($MmsResult); +} catch (\MessageBird\Exceptions\AuthenticateException $e) { + // That means that your accessKey is unknown + echo 'wrong login'; +} catch (\Exception $e) { + var_dump($e->getMessage()); +} diff --git a/src/MessageBird/Client.php b/src/MessageBird/Client.php index 4e7ce1ab..5d432cbe 100644 --- a/src/MessageBird/Client.php +++ b/src/MessageBird/Client.php @@ -64,6 +64,11 @@ class Client */ public $lookupHlr; + /** + * @var Resources\MmsMessages + */ + public $mmsMessages; + /** * @var Resources\Chat\Message */ @@ -125,6 +130,7 @@ public function __construct($accessKey = null, Common\HttpClient $httpClient = n $this->voicemessages = new Resources\VoiceMessage($this->HttpClient); $this->lookup = new Resources\Lookup($this->HttpClient); $this->lookupHlr = new Resources\LookupHlr($this->HttpClient); + $this->mmsMessages = new Resources\MmsMessages($this->HttpClient); $this->contacts = new Resources\Contacts($this->HttpClient); $this->groups = new Resources\Groups($this->HttpClient); $this->chatMessages = new Resources\Chat\Message($this->ChatAPIHttpClient); diff --git a/src/MessageBird/Objects/MmsMessage.php b/src/MessageBird/Objects/MmsMessage.php new file mode 100644 index 00000000..98fb0c0b --- /dev/null +++ b/src/MessageBird/Objects/MmsMessage.php @@ -0,0 +1,142 @@ +id; + } + + /** + * Get the created href + * + * @return string + */ + public function getHref() { + return $this->href; + } + + /** + * Get the $createdDatetime value + * + * @return string + */ + public function getCreatedDatetime() { + return $this->createdDatetime; + } + + /** + * @param $object + * + * @return $this|void + */ + public function loadFromArray($object) + { + parent::loadFromArray($object); + + if (!empty($this->recipients->items)) { + foreach($this->recipients->items as &$item) { + $Recipient = new Recipient(); + $Recipient->loadFromArray($item); + + $item = $Recipient; + } + } + + return $this; + } +} diff --git a/src/MessageBird/Resources/MmsMessages.php b/src/MessageBird/Resources/MmsMessages.php new file mode 100644 index 00000000..2fb848bc --- /dev/null +++ b/src/MessageBird/Resources/MmsMessages.php @@ -0,0 +1,25 @@ +setObject(new Objects\MmsMessage()); + $this->setResourceName('mms'); + + parent::__construct($HttpClient); + } +} diff --git a/tests/integration/BaseTest.php b/tests/integration/BaseTest.php index e00113da..c558c1ef 100644 --- a/tests/integration/BaseTest.php +++ b/tests/integration/BaseTest.php @@ -1,9 +1,16 @@ mockClient = $this->getMockBuilder("\MessageBird\Common\HttpClient")->setConstructorArgs(array("fake.messagebird.dev"))->getMock(); + $this->client = new \MessageBird\Client('YOUR_ACCESS_KEY', $this->mockClient); } public function testClientConstructor() diff --git a/tests/integration/mms/MmsTest.php b/tests/integration/mms/MmsTest.php new file mode 100644 index 00000000..36375f13 --- /dev/null +++ b/tests/integration/mms/MmsTest.php @@ -0,0 +1,169 @@ +mockClient->expects($this->once()) + ->method('performHttpRequest') + ->with('POST', 'mms', null, json_encode($MmsMessage)) + ->willReturn(array(422, '', '{"errors":[{"code":9,"description":"no (correct) recipients found","parameter":"recipients"}]}')); + + $this->client->mmsMessages->create($MmsMessage); + } + + public function testCreateMmsSuccess() + { + $MmsMessage = $this->generateDummyMessage(); + $dummyMessageId = 'message_id'; + + $this->mockClient->expects($this->once()) + ->method('performHttpRequest') + ->with('POST', 'mms', null, json_encode($MmsMessage)) + ->willReturn(array(200, '', $this->generateMmsServerResponse($MmsMessage, $dummyMessageId))); + + $ResultMmsMessage = $this->client->mmsMessages->create($MmsMessage); + + $this->assertMessagesAreEqual($MmsMessage, $ResultMmsMessage, $dummyMessageId); + } + + public function testListMms() + { + $dummyMessage = $this->generateDummyMessage(); + + $this->mockClient->expects($this->once()) + ->method('performHttpRequest') + ->with('GET', 'mms', array('offset' => '100', 'limit' => '30'), null) + ->willReturn(array(200, '', + '{ + "offset": 0, "limit": 20, "count": 1, "totalCount": 2, + "links": { + "first": "https://rest.messagebird.com/mms/?offset=0&type=mms", + "previous": null, + "next": null, + "last": "https://rest.messagebird.com/mms/?offset=0&type=mms" + }, + "items": [ ' . $this->generateMmsServerResponse($dummyMessage, 'message_id') . ', + ' . $this->generateMmsServerResponse($dummyMessage, 'message_id_2') . '] + }' + )); + + $ResultMessages = $this->client->mmsMessages->getList(array('offset' => 100, 'limit' => 30)); + + $this->assertAttributeEquals(0, 'offset', $ResultMessages); + $this->assertAttributeEquals(1, 'count', $ResultMessages); + $this->assertAttributeEquals(2, 'totalCount', $ResultMessages); + + $this->assertEquals(2, count($ResultMessages->items)); + $this->assertMessagesAreEqual($dummyMessage, $ResultMessages->items[0], 'message_id'); + $this->assertMessagesAreEqual($dummyMessage, $ResultMessages->items[1], 'message_id_2'); + + } + + public function testDeleteMms() + { + $this->mockClient->expects($this->exactly(2)) + ->method('performHttpRequest') + ->with('DELETE', 'mms/message_id', null, null) + ->will($this->onConsecutiveCalls( + array(204, '', ''), + array(404, '', '{"errors":[{"code":20,"description":"message not found","parameter":null}]}') + )); + + $this->client->mmsMessages->delete('message_id'); + + $this->setExpectedException('\MessageBird\Exceptions\RequestException'); + $this->client->mmsMessages->delete('message_id'); + } + + public function testReadMms() + { + $dummyMessage = $this->generateDummyMessage(); + + $this->mockClient->expects($this->exactly(2)) + ->method('performHttpRequest') + ->with('GET', $this->logicalOr('mms/message_id', 'mms/unknown_message_id'), null, null) + ->will($this->onConsecutiveCalls( + array('200', '', $this->generateMmsServerResponse($dummyMessage, 'message_id')), + array('404', '', '{"errors":[{"code":20,"description":"message not found","parameter":null}]}') + )); + + $ResultMmsMessage = $this->client->mmsMessages->read('message_id'); + $this->assertMessagesAreEqual($dummyMessage, $ResultMmsMessage, 'message_id'); + + $this->setExpectedException('\MessageBird\Exceptions\RequestException'); + $this->client->mmsMessages->read('unknown_message_id'); + } + + /** + * @return \MessageBird\Objects\MmsMessage + */ + private function generateDummyMessage() + { + $MmsMessage = new \MessageBird\Objects\MmsMessage(); + $MmsMessage->originator = "MessageBird"; + $MmsMessage->direction = 'ot'; + $MmsMessage->recipients = array(31621938645); + $MmsMessage->body = 'Have you seen this logo?'; + $MmsMessage->mediaUrls = array('https://www.messagebird.com/assets/images/og/messagebird.gif'); + return $MmsMessage; + } + + /** + * Asserts if 2 messages are equal. They are equal if all the attributes have the same value. + * @param \MessageBird\Objects\MmsMessage $MmsMessage + * @param \MessageBird\Objects\MmsMessage $ResultMmsMessage + * @param $expectedId Since the id field cannot be manually set this the id of the message is checked against this expectedId value. + */ + private function assertMessagesAreEqual(\MessageBird\Objects\MmsMessage $MmsMessage, \MessageBird\Objects\MmsMessage $ResultMmsMessage, $expectedId) + { + $this->assertAttributeEquals($expectedId, 'id', $ResultMmsMessage); + $this->assertAttributeEquals("https://rest.messagebird.com/mms/{$expectedId}", 'href', $ResultMmsMessage); + $this->assertAttributeEquals($MmsMessage->direction, 'direction', $ResultMmsMessage); + $this->assertAttributeEquals($MmsMessage->originator, 'originator', $ResultMmsMessage); + $this->assertAttributeEquals($MmsMessage->subject, 'subject', $ResultMmsMessage); + $this->assertAttributeEquals($MmsMessage->body, 'body', $ResultMmsMessage); + $this->assertAttributeEquals($MmsMessage->mediaUrls, 'mediaUrls', $ResultMmsMessage); + $this->assertAttributeEquals($MmsMessage->reference, 'reference', $ResultMmsMessage); + + foreach($ResultMmsMessage->recipients->items as $item) { + $this->assertArraySubset(array($item->recipient), $MmsMessage->recipients); + } + } + + /** + * @return string JSON string containing the generated server response. + */ + private function generateMmsServerResponse(\MessageBird\Objects\MmsMessage $MmsMessage, $messageId) + { + return '{ + "id": "' . $messageId . '", + "href": "https://rest.messagebird.com/mms/' . $messageId . '", + "direction": ' . json_encode($MmsMessage->direction) . ', + "originator": ' . json_encode($MmsMessage->originator) . ', + "subject": ' . json_encode($MmsMessage->subject) . ', + "body": ' . json_encode($MmsMessage->body) . ', + "mediaUrls": ' . json_encode($MmsMessage->mediaUrls) . ', + "reference": ' . json_encode($MmsMessage->reference) . ', + "scheduledDatetime": ' . json_encode($MmsMessage->scheduledDatetime) . ', + "createdDatetime": "2017-09-19T15:08:46+00:00", + "recipients": { + "totalCount": 1, + "totalSentCount": 1, + "totalDeliveredCount": 0, + "totalDeliveryFailedCount": 0, + "items": [ + { + "recipient": ' . json_encode($MmsMessage->recipients[0]) . ', + "status": "sent", + "statusDatetime": "2017-09-19T15:08:46+00:00" + } + ] + } + }'; + } +}