View source
<?php
namespace Drupal\Tests\transaction\Kernel;
use Drupal\transaction\Entity\TransactionType;
use Drupal\user\Entity\User;
class GenericTransactionTest extends KernelTransactionTestBase {
protected function prepareTransactionType() {
$this->transactionType = TransactionType::create([
'id' => 'test_generic',
'label' => 'Test generic',
'target_entity_type' => 'entity_test',
'transactor' => [
'id' => 'transaction_generic',
'settings' => [
'last_transaction' => 'field_last_transaction',
'log_message' => 'field_log_message',
],
],
]);
$this->transactionType
->save();
$this
->addTransactionLogMessageField();
}
public function testGenericTransactionCreation() {
$transaction = $this->transaction;
$this
->assertEquals($this->targetEntity, $transaction
->getTargetEntity());
$this
->assertEquals('Unsaved transaction (pending)', $transaction
->getDescription());
$this
->assertEquals([
$this->logMessage,
], $transaction
->getDetails());
$this
->assertNull($transaction
->getExecutionTime());
$this
->assertNull($transaction
->getExecutor());
$this
->assertFalse($transaction
->getResultCode());
$this
->assertFalse($transaction
->getResultMessage());
$transaction
->save();
$this
->assertEquals('Transaction 1 (pending)', $transaction
->getDescription());
}
public function testGenericTransactionExecution() {
$transaction = $this->transaction;
$this
->assertTrue($transaction
->execute());
$this
->assertEquals('Transaction 1', $transaction
->getDescription());
$this
->assertNotNull($transaction
->getExecutionTime());
$this
->assertEquals(User::getAnonymousUser()
->id(), $transaction
->getExecutorId());
$this
->assertGreaterThan(0, $transaction
->getResultCode());
$this
->assertEquals('Transaction executed successfully.', $transaction
->getResultMessage());
$this
->assertEquals($transaction
->id(), $this->targetEntity
->get('field_last_transaction')->target_id);
}
public function testGenericTransactionOperation() {
$transaction = $this->transaction;
$transaction
->setOperation($this->transactionOperation)
->execute();
$this
->assertEquals('Test generic #1', $transaction
->getDescription());
$expected_details = [
$this->logMessage,
'Executed by UID: ' . $transaction
->getExecutorId(),
'Transaction UUID: ' . $transaction
->uuid(),
];
$this
->assertEquals($expected_details, $transaction
->getDetails());
}
public function testTransactionExecutionSequence() {
$first_transaction = $this->transaction;
$this
->prepareTransaction();
$second_transaction = $this->transaction;
$first_transaction
->execute();
$second_transaction
->execute();
$this
->assertEquals($first_transaction
->getExecutionTime(), $second_transaction
->getExecutionTime());
$last_transaction = \Drupal::service('transaction')
->getLastExecutedTransaction($this->targetEntity, $this->transactionType);
$this
->assertEquals($second_transaction
->id(), $last_transaction
->id());
}
}