Skip to content

Commit bb70659

Browse files
author
Dmytro Voskoboinikov
committed
MAGETWO-35621: Implement configuration settings
1 parent dcd6c1f commit bb70659

File tree

4 files changed

+145
-0
lines changed

4 files changed

+145
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Sales\Model\Config\Backend\Email;
7+
8+
/**
9+
* Backend model for global configuration value
10+
* 'sales_email/general/async_sending'.
11+
*/
12+
class AsyncSending extends \Magento\Framework\App\Config\Value
13+
{
14+
/**
15+
* Dispatches corresponding event after saving of configuration
16+
* value if it was changed.
17+
*
18+
* Dispatches next events:
19+
*
20+
* - config_data_sales_email_general_async_sending_enabled
21+
* - config_data_sales_email_general_async_sending_disabled
22+
*
23+
* @return $this
24+
*/
25+
public function afterSave()
26+
{
27+
if ($this->isValueChanged()) {
28+
$state = $this->getValue() ? 'enabled' : 'disabled';
29+
30+
$this->_eventManager->dispatch(
31+
$this->_eventPrefix . '_sales_email_general_async_sending_' . $state,
32+
$this->_getEventData()
33+
);
34+
}
35+
36+
return $this;
37+
}
38+
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Sales\Test\Unit\Model\Config\Backend\Email;
7+
8+
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
9+
10+
/**
11+
* Unit test of backend model for global configuration value
12+
* 'sales_email/general/async_sending'.
13+
*/
14+
class AsyncSendingTest extends \PHPUnit_Framework_TestCase
15+
{
16+
/**
17+
* @var \Magento\Sales\Model\Config\Backend\Email\AsyncSending
18+
*/
19+
protected $object;
20+
21+
/**
22+
* @var \Magento\Framework\App\Config|\PHPUnit_Framework_MockObject_MockObject
23+
*/
24+
protected $config;
25+
26+
/**
27+
* @var \Magento\Framework\Model\Context|\PHPUnit_Framework_MockObject_MockObject
28+
*/
29+
protected $context;
30+
31+
/**
32+
* @var \Magento\Framework\Event\Manager\Proxy|\PHPUnit_Framework_MockObject_MockObject
33+
*/
34+
protected $eventManager;
35+
36+
protected function setUp()
37+
{
38+
$objectManager = new ObjectManager($this);
39+
40+
$this->config = $this->getMock('Magento\Framework\App\Config', [], [], '', false);
41+
42+
$this->eventManager = $this->getMock('Magento\Framework\Event\Manager\Proxy', [], [], '', false);
43+
44+
$this->context = $this->getMock('Magento\Framework\Model\Context', ['getEventDispatcher'], [], '', false);
45+
$this->context->expects($this->any())->method('getEventDispatcher')->willReturn($this->eventManager);
46+
47+
$this->object = $objectManager->getObject(
48+
'\Magento\Sales\Model\Config\Backend\Email\AsyncSending',
49+
[
50+
'config' => $this->config,
51+
'context' => $this->context
52+
]
53+
);
54+
}
55+
56+
/**
57+
* @param int $value
58+
* @param int $oldValue
59+
* @param string $eventName
60+
* @dataProvider afterSaveDataProvider
61+
* @return void
62+
*/
63+
public function testAfterSave($value, $oldValue, $eventName)
64+
{
65+
$path = 'sales_email/general/async_sending';
66+
$scope = \Magento\Framework\App\ScopeInterface::SCOPE_DEFAULT;
67+
68+
$this->object->setData(['value' => $value, 'path' => $path, 'scope' => $scope]);
69+
70+
$this->config->expects($this->once())->method('getValue')->with($path, $scope)->willReturn($oldValue);
71+
72+
if ($value == $oldValue) {
73+
$this->eventManager->expects($this->never())->method('dispatch');
74+
} else {
75+
$this->eventManager->expects($this->once())->method('dispatch')->with($eventName);
76+
}
77+
78+
$this->object->afterSave();
79+
}
80+
81+
/**
82+
* @return array
83+
*/
84+
public function afterSaveDataProvider()
85+
{
86+
return [
87+
[0, 0, null],
88+
[1, 1, null],
89+
[0, 1, 'config_data_sales_email_general_async_sending_disabled'],
90+
[1, 0, 'config_data_sales_email_general_async_sending_enabled']
91+
];
92+
}
93+
}

app/code/Magento/Sales/etc/adminhtml/system.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,14 @@
119119
<label>Sales Emails</label>
120120
<tab>sales</tab>
121121
<resource>Magento_Sales::sales_email</resource>
122+
<group id="general" type="text" sortOrder="0" showInDefault="1" showInWebsite="0" showInStore="0">
123+
<label>General Settings</label>
124+
<field id="async_sending" translate="label" type="select" sortOrder="1" showInDefault="1" showInWebsite="0" showInStore="0">
125+
<label>Asynchronous sending</label>
126+
<source_model>Magento\Config\Model\Config\Source\Enabledisable</source_model>
127+
<backend_model>Magento\Sales\Model\Config\Backend\Email\AsyncSending</backend_model>
128+
</field>
129+
</group>
122130
<group id="order" translate="label" type="text" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="1">
123131
<label>Order</label>
124132
<field id="enabled" translate="label" type="select" sortOrder="0" showInDefault="1" showInWebsite="1" showInStore="1">

app/code/Magento/Sales/etc/events.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,10 @@
3939
<observer name="sales_grid_order_shipment_async_insert" instance="Magento\Sales\Model\Observer\Order\Shipment\IndexGrid" method="asyncInsert" />
4040
<observer name="sales_grid_order_creditmemo_async_insert" instance="Magento\Sales\Model\Observer\Order\Creditmemo\IndexGrid" method="asyncInsert" />
4141
</event>
42+
<event name="config_data_sales_email_general_async_sending_disabled">
43+
<observer name="sales_send_order_emails" instance="Magento\Sales\Model\Observer\Order\SendEmails" method="execute" />
44+
<observer name="sales_send_order_invoice_emails" instance="Magento\Sales\Model\Observer\Order\Invoice\SendEmails" method="execute" />
45+
<observer name="sales_send_order_shipment_emails" instance="Magento\Sales\Model\Observer\Order\Shipment\SendEmails" method="execute" />
46+
<observer name="sales_send_order_creditmemo_emails" instance="Magento\Sales\Model\Observer\Order\Creditmemo\SendEmails" method="execute" />
47+
</event>
4248
</config>

0 commit comments

Comments
 (0)