Accounting::getTransactions returns sorted full history of issued and received transactions
This commit is contained in:
@@ -165,6 +165,20 @@ class Accounting
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getTransactions(): Collection
|
||||
{
|
||||
$transactions = [
|
||||
...$this->getTransactionsIssued()->toArray(),
|
||||
...$this->getTransactionsReceived()->toArray()
|
||||
];
|
||||
|
||||
\usort($transactions, function ($a, $b) {
|
||||
return $a->getId() - $b->getId();
|
||||
});
|
||||
|
||||
return new ArrayCollection($transactions);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Collection<int, AccountingTransaction>
|
||||
*/
|
||||
|
||||
@@ -8,9 +8,12 @@ use App\Entity\Money;
|
||||
use App\Entity\Tipjar;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
|
||||
use Zenstruck\Foundry\Test\ResetDatabase;
|
||||
|
||||
class AccountingTest extends KernelTestCase
|
||||
{
|
||||
use ResetDatabase;
|
||||
|
||||
private EntityManagerInterface $entityManager;
|
||||
|
||||
public function setUp(): void
|
||||
@@ -56,13 +59,77 @@ class AccountingTest extends KernelTestCase
|
||||
$this->assertNotNull($accA->getId());
|
||||
$this->assertNotNull($accB->getId());
|
||||
|
||||
$this->assertCount(1, $accA->getTransactionsIssued());
|
||||
$this->assertCount(1, $accB->getTransactionsReceived());
|
||||
$this->assertCount(1, $accA->getTransactions());
|
||||
$this->assertCount(1, $accB->getTransactions());
|
||||
|
||||
$this->assertEquals(120, $accA->getTransactionsIssued()[0]->getMoney()->amount);
|
||||
$this->assertEquals('EUR', $accA->getTransactionsIssued()[0]->getMoney()->currency);
|
||||
$this->assertEquals(120, $accA->getTransactions()[0]->getMoney()->amount);
|
||||
$this->assertEquals('EUR', $accA->getTransactions()[0]->getMoney()->currency);
|
||||
|
||||
$this->assertEquals(120, $accB->getTransactionsReceived()[0]->getMoney()->amount);
|
||||
$this->assertEquals('EUR', $accB->getTransactionsReceived()[0]->getMoney()->currency);
|
||||
$this->assertEquals(120, $accB->getTransactions()[0]->getMoney()->amount);
|
||||
$this->assertEquals('EUR', $accB->getTransactions()[0]->getMoney()->currency);
|
||||
}
|
||||
|
||||
public function testAccountingSortsMixedTransactions()
|
||||
{
|
||||
$tipjarA = new Tipjar();
|
||||
$tipjarA->setName('TEST_TIPJAR_A');
|
||||
|
||||
$accA = new Accounting();
|
||||
$accA->setTipjar($tipjarA);
|
||||
|
||||
|
||||
$tipjarB = new Tipjar();
|
||||
$tipjarB->setName('TEST_TIPJAR_B');
|
||||
|
||||
$accB = new Accounting();
|
||||
$accB->setTipjar($tipjarB);
|
||||
|
||||
$trx1 = new AccountingTransaction();
|
||||
$trx1->setMoney(new Money(1, 'EUR'));
|
||||
$trx1->setOrigin($accA);
|
||||
$trx1->setTarget($accB);
|
||||
|
||||
$trx2 = new AccountingTransaction();
|
||||
$trx2->setMoney(new Money(2, 'USD'));
|
||||
$trx2->setOrigin($accB);
|
||||
$trx2->setTarget($accA);
|
||||
|
||||
$this->entityManager->persist($trx1);
|
||||
$this->entityManager->persist($trx2);
|
||||
$this->entityManager->flush();
|
||||
|
||||
/** @var Accounting */
|
||||
$accA = $this->entityManager->getRepository(Tipjar::class)
|
||||
->findOneBy(['name' => 'TEST_TIPJAR_A'])
|
||||
->getAccounting();
|
||||
|
||||
/** @var Accounting */
|
||||
$accB = $this->entityManager->getRepository(Tipjar::class)
|
||||
->findOneBy(['name' => 'TEST_TIPJAR_B'])
|
||||
->getAccounting();
|
||||
|
||||
$this->assertNotNull($accA->getId());
|
||||
$this->assertNotNull($accB->getId());
|
||||
|
||||
$this->assertCount(2, $accA->getTransactions());
|
||||
$this->assertCount(2, $accB->getTransactions());
|
||||
|
||||
$this->assertEquals(1, $accA->getTransactions()[0]->getMoney()->amount);
|
||||
$this->assertEquals('EUR', $accA->getTransactions()[0]->getMoney()->currency);
|
||||
|
||||
$this->assertEquals(1, $accB->getTransactions()[0]->getMoney()->amount);
|
||||
$this->assertEquals('EUR', $accB->getTransactions()[0]->getMoney()->currency);
|
||||
|
||||
$this->assertEquals(2, $accA->getTransactions()[1]->getMoney()->amount);
|
||||
$this->assertEquals('USD', $accA->getTransactions()[1]->getMoney()->currency);
|
||||
|
||||
$this->assertEquals(2, $accB->getTransactions()[1]->getMoney()->amount);
|
||||
$this->assertEquals('USD', $accB->getTransactions()[1]->getMoney()->currency);
|
||||
|
||||
$this->assertEquals($accA, $accA->getTransactions()[0]->getOrigin());
|
||||
$this->assertEquals($accA, $accA->getTransactions()[1]->getTarget());
|
||||
|
||||
$this->assertEquals($accB, $accB->getTransactions()[1]->getOrigin());
|
||||
$this->assertEquals($accB, $accB->getTransactions()[0]->getTarget());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user