Skip to content

Commit

Permalink
fix: Element instead of ListElement
Browse files Browse the repository at this point in the history
Generic template support setDefaultAction

Fix #80
  • Loading branch information
CasperLaiTW committed Aug 9, 2017
1 parent d2aba29 commit dee5367
Show file tree
Hide file tree
Showing 9 changed files with 62 additions and 179 deletions.
7 changes: 4 additions & 3 deletions src/Collections/ElementCollection.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,14 @@ public function __construct(array $elements = [])
* @param $title
* @param $description
* @param string $image
* @param string $url
*
* @return Element
* @internal param string $url
*
*/
public function addElement($title, $description, $image = '', $url = '')
public function addElement($title, $description, $image = '')
{
$element = new Element($title, $description, $image, $url);
$element = new Element($title, $description, $image);
$this->add($element);

return $element;
Expand Down
64 changes: 0 additions & 64 deletions src/Collections/ListElementCollection.php

This file was deleted.

46 changes: 38 additions & 8 deletions src/Messages/Element.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
namespace Casperlaitw\LaravelFbMessenger\Messages;

use Casperlaitw\LaravelFbMessenger\Collections\ButtonCollection;
use Casperlaitw\LaravelFbMessenger\Exceptions\DefaultActionInvalidTypeException;
use pimax\Messages\MessageElement;

/**
Expand Down Expand Up @@ -41,20 +42,27 @@ class Element
*/
private $buttons;

/**
* Default action
*
* @var UrlButton
*/
private $defaultAction;

/**
* Element constructor.
*
* @param $title
* @param $description
* @param $image
* @param $url
* @param $title
* @param $description
* @param string $image
*
* @internal param $url
*/
public function __construct($title, $description, $image = '', $url = '')
public function __construct($title, $description, $image = '')
{
$this->title = $title;
$this->description = $description;
$this->image = $image;
$this->url = $url;
$this->buttons = new ButtonCollection;
}

Expand All @@ -68,6 +76,20 @@ public function buttons()
return $this->buttons;
}

/**
* Set default action button
*
* @param UrlButton $button
* @return $this
* @throws DefaultActionInvalidTypeException
*/
public function setDefaultAction(UrlButton $button)
{
$this->defaultAction = $button;

return $this;
}

/**
* To array for send api
*
Expand All @@ -76,11 +98,19 @@ public function buttons()
public function toData()
{
$button = $this->buttons()->isEmpty() ? [] : ['buttons' => $this->buttons->toData()];
return array_merge([

$data = array_merge([
'title' => $this->title,
'subtitle' => $this->description,
'item_url' => $this->url,
'image_url' => $this->image,
], $button);

if ($this->defaultAction) {
$defaultActionData = $this->defaultAction->toData();
unset($defaultActionData['title']);
$data['default_action'] = $defaultActionData;
}

return $data;
}
}
51 changes: 1 addition & 50 deletions src/Messages/ListElement.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,61 +8,12 @@

namespace Casperlaitw\LaravelFbMessenger\Messages;

use Casperlaitw\LaravelFbMessenger\Exceptions\DefaultActionInvalidTypeException;

/**
* Class ListElement
* @package Casperlaitw\LaravelFbMessenger\Messages
* @deprecated Replace use Casperlaitw\LaravelFbMessenger\Messages\Element
*/
class ListElement extends Element
{
/**
* Default action
*
* @var Button
*/
private $defaultAction;

/**
* ListElement constructor.
* @param $title
* @param $description
* @param string $image
*/
public function __construct($title, $description, $image)
{
parent::__construct($title, $description, $image, null);
}

/**
* Set default action button
*
* @param UrlButton $button
* @return $this
* @throws DefaultActionInvalidTypeException
*/
public function setDefaultAction(UrlButton $button)
{
$this->defaultAction = $button;

return $this;
}

/**
* To array for send api
*
* @return array
*/
public function toData()
{
$data = parent::toData();

if ($this->defaultAction) {
$defaultActionData = $this->defaultAction->toData();
unset($defaultActionData['title'], $data['item_url']);
$data['default_action'] = $defaultActionData;
}

return $data;
}
}
4 changes: 2 additions & 2 deletions src/Messages/ListTemplate.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

namespace Casperlaitw\LaravelFbMessenger\Messages;

use Casperlaitw\LaravelFbMessenger\Collections\ListElementCollection;
use Casperlaitw\LaravelFbMessenger\Collections\ElementCollection;
use Casperlaitw\LaravelFbMessenger\Contracts\Messages\Template;
use Casperlaitw\LaravelFbMessenger\Exceptions\ListElementCountException;
use Casperlaitw\LaravelFbMessenger\Transformers\ListTransformer;
Expand Down Expand Up @@ -73,7 +73,7 @@ public function toData()
*/
protected function collection()
{
return ListElementCollection::class;
return ElementCollection::class;
}

/**
Expand Down
34 changes: 0 additions & 34 deletions tests/Collections/ListElementCollectionTest.php

This file was deleted.

10 changes: 4 additions & 6 deletions tests/Messages/ListElementTest.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
<?php
use Casperlaitw\LaravelFbMessenger\Exceptions\DefaultActionInvalidTypeException;
use Casperlaitw\LaravelFbMessenger\Messages\Button;
use Casperlaitw\LaravelFbMessenger\Messages\ListElement;
use Casperlaitw\LaravelFbMessenger\Messages\Element;
use Casperlaitw\LaravelFbMessenger\Messages\UrlButton;

/**
Expand All @@ -16,10 +14,10 @@ public function test_set_default_action()
{
$button = new UrlButton('title', 'http://www.google.com');

$list = new ListElement('title', 'description', 'image');
$list = new Element('title', 'description', 'image');
$list->setDefaultAction($button);

$actual = $this->getPrivateProperty(ListElement::class, 'defaultAction')->getValue($list);
$actual = $this->getPrivateProperty(Element::class, 'defaultAction')->getValue($list);

$this->assertEquals($button, $actual);
}
Expand All @@ -28,7 +26,7 @@ public function test_to_data()
{
$button = new UrlButton('title', 'http://www.google.com');

$list = new ListElement('title', 'description', 'image');
$list = new Element('title', 'description', 'image');
$list->setDefaultAction($button);

$expected = [
Expand Down
6 changes: 3 additions & 3 deletions tests/Messages/ListTemplateTest.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?php
use Casperlaitw\LaravelFbMessenger\Exceptions\ListElementCountException;
use Casperlaitw\LaravelFbMessenger\Messages\Button;
use Casperlaitw\LaravelFbMessenger\Messages\ListElement;
use Casperlaitw\LaravelFbMessenger\Messages\Element;
use Casperlaitw\LaravelFbMessenger\Messages\ListTemplate;

/**
Expand All @@ -20,8 +20,8 @@ public function setUp()
{
$this->sender = str_random();
$this->case = [
new ListElement('title1', 'description1', 'image1'),
new ListElement('title2', 'description2', 'image2'),
new Element('title1', 'description1', 'image1'),
new Element('title2', 'description2', 'image2'),
];
$this->button = new Button(Button::TYPE_POSTBACK, 'GET_MORE');
}
Expand Down
19 changes: 10 additions & 9 deletions tests/Transformers/ListTransformerTest.php
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
<?php
use Casperlaitw\LaravelFbMessenger\Collections\ListElementCollection;

use Casperlaitw\LaravelFbMessenger\Collections\ElementCollection;
use Casperlaitw\LaravelFbMessenger\Contracts\Messages\Template;
use Casperlaitw\LaravelFbMessenger\Messages\Button;
use Casperlaitw\LaravelFbMessenger\Messages\ListElement;
use Casperlaitw\LaravelFbMessenger\Messages\Element;
use Casperlaitw\LaravelFbMessenger\Transformers\ListTransformer;
use Mockery as m;

Expand All @@ -19,9 +20,9 @@ public function test_transform()
{
$testSender = str_random();
$testCase = [
new ListElement('title1', 'description2', 'image_url'),
new ListElement('title2', 'description2', 'image_url'),
new ListElement('title2', 'description2', 'image_url'),
new Element('title1', 'description2', 'image_url'),
new Element('title2', 'description2', 'image_url'),
new Element('title2', 'description2', 'image_url'),
];

$testButton = new Button(Button::TYPE_WEB, 'title', 'http://www.google.com');
Expand Down Expand Up @@ -49,9 +50,9 @@ public function test_transform_without_buttons()
{
$testSender = str_random();
$testCase = [
new ListElement('title1', 'description2', 'image_url'),
new ListElement('title2', 'description2', 'image_url'),
new ListElement('title2', 'description2', 'image_url'),
new Element('title1', 'description2', 'image_url'),
new Element('title2', 'description2', 'image_url'),
new Element('title2', 'description2', 'image_url'),
];

$expectedCase = [];
Expand All @@ -74,7 +75,7 @@ public function test_transform_without_buttons()

private function createMessageMock($testCase, $testSender, $testButton)
{
$elements = new ListElementCollection($testCase);
$elements = new ElementCollection($testCase);

$message = m::mock(Template::class)
->shouldReceive('getSender')->andReturn($testSender)
Expand Down

0 comments on commit dee5367

Please sign in to comment.