. */ namespace Tests\Api\Models\Attachment; 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 * * @ data Provider storeDataProvider * @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.attachments.store'; $this->storeAndCompare($route, $submission); } /** * @return array */ public function emptyDataProvider(): array { return [[[]]]; } /** * @return array */ public function storeDataProvider(): array { $minimalSets = $this->minimalSets(); $optionalSets = $this->optionalSets(); $regenConfig = []; return $this->genericDataProvider($minimalSets, $optionalSets, $regenConfig); } /** * @return array */ private function minimalSets(): array { $faker = Factory::create(); $types = [ 'Account', 'Budget', 'Bill', 'TransactionJournal', 'PiggyBank', 'Tag', ]; $type = $types[rand(0, count($types) - 1)]; return [ 'default_file' => [ 'parameters' => [], 'fields' => [ 'filename' => join(' ', $faker->words(3)), 'attachable_type' => $type, 'attachable_id' => '1', ], ], ]; } /** * @return \array[][] */ private function optionalSets(): array { $faker = Factory::create(); return [ 'title' => [ 'fields' => [ 'title' => join(' ', $faker->words(3)), ], ], 'notes' => [ 'fields' => [ 'notes' => join(' ', $faker->words(5)), ], ], ]; } }