View source
<?php
namespace Drupal\Tests\uc_order\Functional;
use Drupal\rules\Context\ContextConfig;
class OrderRulesEventsTest extends OrderRulesTestBase {
public function testRulesEvents() {
$rule_data = [
1 => [
'uc_order_status_update',
'An order status has been changed',
],
2 => [
'uc_order_comment_added',
'An order comment is added',
],
3 => [
'uc_order_status_email_update',
'An Email notification of order status change was requested',
],
4 => [
'uc_order_delete',
'An order is being deleted',
],
];
foreach ($rule_data as $i => list($event_name, $description)) {
$rule[$i] = $this->expressionManager
->createRule();
$message[$i] = 'RULES message ' . $i . ': ' . $description;
$rule[$i]
->addAction('rules_system_message', ContextConfig::create()
->setValue('message', $message[$i])
->setValue('type', 'status'));
$config_entity = $this->rulesStorage
->create([
'id' => 'rule' . $i,
'events' => [
[
'event_name' => $event_name,
],
],
'expression' => $rule[$i]
->getConfiguration(),
]);
$config_entity
->save();
}
$assert = $this
->assertSession();
$order = $this
->createOrder();
$edit = [
'status' => 'processing',
];
$this
->drupalGet('admin/store/orders/' . $order
->id());
$this
->submitForm($edit, 'Update');
$assert
->pageTextContains('Order updated.');
$assert
->pageTextContains($message[1], '"' . $message[1] . '" IS shown');
$assert
->pageTextContains($message[2], '"' . $message[2] . '" IS shown');
$assert
->pageTextNotContains($message[3], '"' . $message[3] . '" is not shown');
$assert
->pageTextNotContains($message[4], '"' . $message[4] . '" is not shown');
$edit = [
'order_comment' => $this
->randomString(30),
];
$this
->drupalGet('admin/store/orders/' . $order
->id());
$this
->submitForm($edit, 'Update');
$assert
->pageTextContains('Order updated.');
$assert
->pageTextNotContains($message[1], '"' . $message[1] . '" is not shown');
$assert
->pageTextContains($message[2], '"' . $message[2] . '" IS shown');
$assert
->pageTextNotContains($message[3], '"' . $message[3] . '" is not shown');
$assert
->pageTextNotContains($message[4], '"' . $message[4] . '" is not shown');
$edit = [
'admin_comment' => $this
->randomString(30),
];
$this
->drupalGet('admin/store/orders/' . $order
->id());
$this
->submitForm($edit, 'Update');
$assert
->pageTextContains('Order updated.');
$assert
->pageTextNotContains($message[1], '"' . $message[1] . '" is not shown');
$assert
->pageTextContains($message[2], '"' . $message[2] . '" IS shown');
$assert
->pageTextNotContains($message[3], '"' . $message[3] . '" is not shown');
$assert
->pageTextNotContains($message[4], '"' . $message[4] . '" is not shown');
$edit = [
'status' => 'completed',
'notify' => 1,
];
$this
->drupalGet('admin/store/orders/' . $order
->id());
$this
->submitForm($edit, 'Update');
$assert
->pageTextContains('Order updated.');
$assert
->pageTextContains($message[1], '"' . $message[1] . '" IS shown');
$assert
->pageTextContains($message[2], '"' . $message[2] . '" IS shown');
$assert
->pageTextContains($message[3], '"' . $message[3] . '" IS shown');
$assert
->pageTextNotContains($message[4], '"' . $message[4] . '" is not shown');
$this
->drupalGet('admin/store/orders/view');
$this
->clickLink('Delete');
$assert
->addressEquals('admin/store/orders/' . $order
->id() . '/delete');
$assert
->pageTextContains('Are you sure you want to delete order ' . $order
->id() . '?');
$this
->submitForm([], 'Delete');
$assert
->pageTextContains('Order ' . $order
->id() . ' completely removed from the database.');
$assert
->pageTextNotContains($message[1], '"' . $message[1] . '" is not shown');
$assert
->pageTextNotContains($message[2], '"' . $message[2] . '" is not shown');
$assert
->pageTextNotContains($message[3], '"' . $message[3] . '" is not shown');
$assert
->pageTextContains($message[4], '"' . $message[4] . '" IS shown');
}
}