accountingService = static::getContainer()->get(AccountingService::class); $this->entityManager = static::getContainer()->get(EntityManagerInterface::class); } public function getBalancedAccountings(): array { $tipjars = []; for ($i = 0; $i < 10; ++$i) { $tipjar = new Tipjar(); $tipjar->setName(\sprintf('TEST_TIPJAR_%d', $i)); $this->entityManager->persist($tipjar); $tipjars[] = $tipjar; } $this->entityManager->flush(); for ($i = 0; $i < \count($tipjars) * 5; ++$i) { $origin = $i % 2 ? $tipjars[\random_int(0, 5)] : $tipjars[\random_int(5, 9)]; $target = $i % 2 ? $tipjars[\random_int(5, 9)] : $tipjars[\random_int(0, 5)]; $trx = new Transaction(); $trx->setMoney(new Money(random_int(100, 999), 'EUR')); $trx->setOrigin($origin->getAccounting()); $trx->setTarget($target->getAccounting()); $this->entityManager->persist($trx); } $this->entityManager->flush(); return \array_map(function (Tipjar $tipjar) { return $tipjar->getAccounting(); }, $tipjars); } public function testBalanceSerieNotOverLength() { $accountings = $this->getBalancedAccountings(); foreach ($accountings as $accounting) { $serie = $this->accountingService->calcBalanceSerie($accounting, maxLength: 3); $this->assertLessThanOrEqual(3, \count($serie)); foreach ($serie as $dataPoint) { $this->assertInstanceOf(Money::class, $dataPoint); $this->assertGreaterThan(0, $dataPoint->amount); } } } }