. */ namespace Tests\Api\Models\Account; use Faker\Factory; use Laravel\Passport\Passport; use Log; use Tests\TestCase; use Tests\Traits\CollectsValues; use Tests\Traits\RandomValues; use Tests\Traits\TestHelpers; /** * Class StoreControllerTest */ class StoreControllerTest extends TestCase { use RandomValues, TestHelpers, CollectsValues; /** * */ public function setUp(): void { parent::setUp(); Passport::actingAs($this->user()); Log::info(sprintf('Now in %s.', get_class($this))); } /** * @param array $submission * * X data Provider storeAccountDataProvider * * @dataProvider emptyDataProvider */ public function testStore(array $submission): void { if ([] === $submission) { $this->markTestSkipped('Empty data provider'); } // run account store with a minimal data set: $route = 'api.v1.accounts.store'; $this->submitAndCompare($route, $submission); } /** * @return array */ public function emptyDataProvider(): array { return [[[]]]; } /** * @return array */ public function storeAccountDataProvider(): array { $minimalSets = $this->minimalSets(); $optionalSets = $this->optionalSets(); $regenConfig = [ 'name' => function () { $faker = Factory::create(); return $faker->name; }, 'iban' => function () { $faker = Factory::create(); return $faker->iban(); }, 'account_number' => function () { $faker = Factory::create(); return $faker->iban(); }, ]; return $this->genericDataProvider($minimalSets, $optionalSets, $regenConfig); } /** * @return \array[][] */ private function optionalSets(): array { $faker = Factory::create(); $currencies = [ 1 => 'EUR', 2 => 'HUF', 3 => 'GBP', 4 => 'UAH', ]; $rand = rand(1, 4); return [ 'active' => [ 'fields' => [ 'active' => $faker->boolean, ], ], // 'iban' => [ // 'fields' => [ // 'iban' => $faker->iban(), // ], // ], // 'bic' => [ // 'fields' => [ // 'bic' => $faker->swiftBicNumber, // ], // ], // 'account_number' => [ // 'fields' => [ // 'account_number' => $faker->iban(), // ], // ], // 'ob' => [ // 'fields' => [ // 'opening_balance' => $this->getRandomAmount(), // 'opening_balance_date' => $this->getRandomDateString(), // ], // ], // 'virtual_balance' => [ // 'fields' => [ // 'virtual_balance' => $this->getRandomAmount(), // ], // ], // 'currency_id' => [ // 'fields' => [ // 'currency_id' => $rand, // ], // ], // 'currency_code' => [ // 'fields' => [ // 'currency_code' => $currencies[$rand], // ], // ], // 'order' => [ // 'fields' => [ // 'order' => $faker->numberBetween(1, 5), // ], // ], // 'include_net_worth' => [ // 'fields' => [ // 'include_net_worth' => $faker->boolean, // ], // ], // 'notes' => [ // 'fields' => [ // 'notes' => join(' ', $faker->words(5)), // ], // ], // 'location' => [ // 'fields' => [ // 'latitude' => $faker->latitude, // 'longitude' => $faker->longitude, // 'zoom_level' => $faker->numberBetween(1, 10), // ], // ], ]; } /** * @return array */ private function minimalSets(): array { $faker = Factory::create(); return [ 'asset' => [ 'fields' => [ 'name' => $faker->name . join(' ', $faker->words(2)), 'type' => 'asset', 'account_role' => $this->randomAccountRole(), ], ], 'expense' => [ 'fields' => [ 'name' => $faker->name, 'type' => 'expense', ], ], 'liability' => [ 'fields' => [ 'name' => $faker->name, 'type' => 'liabilities', 'liability_type' => $this->randomLiabilityType(), 'liability_amount' => $this->getRandomAmount(), 'liability_start_date' => $this->getRandomDateString(), 'interest' => $this->getRandomPercentage(), 'interest_period' => $this->getRandomInterestPeriod(), ], ], 'cc' => [ 'fields' => [ 'name' => $faker->name, 'type' => 'asset', 'account_role' => 'ccAsset', 'credit_card_type' => 'monthlyFull', 'monthly_payment_date' => $this->getRandomDateString(), ], ], ]; } /** * @param string $area * @param string $left * @param string $right * * @return bool */ private function ignoreCombination(string $area, string $left, string $right): bool { Log::debug(sprintf('Must ignore %s: %s vs %s?', $area, $left, $right)); if ('store-account' === $area) { if ('expense' === $left && in_array($right, ['virtual_balance', 'opening_balance', 'opening_balance_date'])) { Log::debug('Yes'); return true; } } Log::debug('NO'); return false; } }