Files
esun3d/app/code/Esun/CustomerMessage/Test/Unit/Plugin/Adminhtml/OrderViewMessagesButtonTest.php
T
2026-09-15 10:35:56 +08:00

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));
}
}