diff --git a/src/EventListener/AccountingTransactionsListener.php b/src/EventListener/AccountingTransactionsListener.php new file mode 100644 index 0000000..48c309c --- /dev/null +++ b/src/EventListener/AccountingTransactionsListener.php @@ -0,0 +1,34 @@ +getOrigin(); + $origin->addTransactionsIssued($transaction); + + $this->entityManager->persist($origin); + + $target = $transaction->getTarget(); + $target->addTransactionsReceived($transaction); + + $this->entityManager->persist($target); + + $this->entityManager->flush(); + } +} diff --git a/tests/Entity/AccountingTest.php b/tests/Entity/AccountingTest.php index df69e3b..29fde8c 100644 --- a/tests/Entity/AccountingTest.php +++ b/tests/Entity/AccountingTest.php @@ -3,6 +3,8 @@ namespace App\Tests\Entity; use App\Entity\Accounting; +use App\Entity\AccountingTransaction; +use App\Entity\Money; use App\Entity\Tipjar; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; @@ -59,4 +61,49 @@ class AccountingTest extends KernelTestCase $this->assertEquals(Tipjar::class, $accountingB->getOwnerClass()); $this->assertEquals('TEST_TIPJAR_B', $accountingB->getTipjar()->getName()); } + + public function testAccountingGetsUpdatedByTransactions() + { + $tipjarA = new Tipjar(); + $tipjarA->setName('TEST_TIPJAR_A'); + + $accountingA = new Accounting(); + $accountingA->setTipjar($tipjarA); + + $tipjarB = new Tipjar(); + $tipjarB->setName('TEST_TIPJAR_B'); + + $accountingB = new Accounting(); + $accountingB->setTipjar($tipjarB); + + $transaction = new AccountingTransaction(); + $transaction->setMoney(new Money(120, 'EUR')); + $transaction->setOrigin($accountingA); + $transaction->setTarget($accountingB); + + $this->entityManager->persist($transaction); + $this->entityManager->flush(); + + $accountingA = $this->entityManager + ->getRepository(Tipjar::class) + ->findOneBy(['name' => 'TEST_TIPJAR_A']) + ->getAccounting(); + + $accountingB = $this->entityManager + ->getRepository(Tipjar::class) + ->findOneBy(['name' => 'TEST_TIPJAR_B']) + ->getAccounting(); + + $this->assertCount(1, $accountingA->getTransactionsIssued()); + $this->assertCount(0, $accountingA->getTransactionsReceived()); + + $this->assertCount(0, $accountingB->getTransactionsIssued()); + $this->assertCount(1, $accountingB->getTransactionsReceived()); + + $this->assertEquals(120, $accountingA->getTransactionsIssued()[0]->getMoney()->amount); + $this->assertEquals('EUR', $accountingA->getTransactionsIssued()[0]->getMoney()->currency); + + $this->assertEquals(120, $accountingB->getTransactionsReceived()[0]->getMoney()->amount); + $this->assertEquals('EUR', $accountingB->getTransactionsReceived()[0]->getMoney()->currency); + } }