70 lines
2.5 KiB
PHP
70 lines
2.5 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
namespace Esun\CustomerMessage\Test\Unit\Plugin\Adminhtml;
|
|
|
|
use Esun\CustomerMessage\Plugin\Adminhtml\OrderViewMessagesButton;
|
|
use Magento\Backend\Model\UrlInterface;
|
|
use Magento\Framework\View\LayoutInterface;
|
|
use Magento\Sales\Block\Adminhtml\Order\View;
|
|
use Magento\Sales\Model\Order;
|
|
use PHPUnit\Framework\MockObject\MockObject;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class OrderViewMessagesButtonTest extends TestCase
|
|
{
|
|
private UrlInterface&MockObject $url;
|
|
private OrderViewMessagesButton $plugin;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
$this->url = $this->createMock(UrlInterface::class);
|
|
$this->plugin = new OrderViewMessagesButton($this->url);
|
|
}
|
|
|
|
public function testAddsMessagesButtonAndPreservesLayoutArgument(): void
|
|
{
|
|
$layout = $this->createMock(LayoutInterface::class);
|
|
$order = $this->createMock(Order::class);
|
|
$order->method('getCustomerId')->willReturn(3);
|
|
$order->method('getId')->willReturn(16);
|
|
|
|
$view = $this->getMockBuilder(View::class)
|
|
->disableOriginalConstructor()
|
|
->onlyMethods(['getOrder', 'addButton'])
|
|
->getMock();
|
|
$view->method('getOrder')->willReturn($order);
|
|
$this->url->expects(self::once())
|
|
->method('getUrl')
|
|
->with('esun_customer_message/message/index', ['order_id' => 16])
|
|
->willReturn('https://esun3d.test/admin/messages/order/16');
|
|
$view->expects(self::once())
|
|
->method('addButton')
|
|
->with(
|
|
'esun_order_messages',
|
|
self::callback(static fn(array $button): bool =>
|
|
(string)$button['label'] === 'Messages'
|
|
&& str_contains($button['onclick'], '/messages/order/16')
|
|
)
|
|
);
|
|
|
|
self::assertSame([$layout], $this->plugin->beforeSetLayout($view, $layout));
|
|
}
|
|
|
|
public function testPreservesLayoutWithoutAddingButtonForGuestOrder(): void
|
|
{
|
|
$layout = $this->createMock(LayoutInterface::class);
|
|
$order = $this->createMock(Order::class);
|
|
$order->method('getCustomerId')->willReturn(null);
|
|
|
|
$view = $this->getMockBuilder(View::class)
|
|
->disableOriginalConstructor()
|
|
->onlyMethods(['getOrder', 'addButton'])
|
|
->getMock();
|
|
$view->method('getOrder')->willReturn($order);
|
|
$view->expects(self::never())->method('addButton');
|
|
|
|
self::assertSame([$layout], $this->plugin->beforeSetLayout($view, $layout));
|
|
}
|
|
}
|