. */ declare(strict_types=1); namespace Tests\integration\Api\Models\Account; use FireflyIII\Enums\AccountTypeEnum; use FireflyIII\Models\Account; use FireflyIII\User; use Illuminate\Foundation\Testing\RefreshDatabase; use Override; use Tests\integration\TestCase; /** * @internal * * @covers \FireflyIII\Api\V1\Controllers\Models\Account\ShowController */ final class ShowControllerTest extends TestCase { use RefreshDatabase; private User $user; #[Override] protected function setUp(): void { parent::setUp(); $this->user = $this->createAuthenticatedUser(); $this->actingAs($this->user); Account::factory() ->for($this->user) ->withType(AccountTypeEnum::ASSET) ->create() ; Account::factory() ->for($this->user) ->withType(AccountTypeEnum::REVENUE) ->create() ; Account::factory() ->for($this->user) ->withType(AccountTypeEnum::EXPENSE) ->create() ; Account::factory() ->for($this->user) ->withType(AccountTypeEnum::DEBT) ->create() ; Account::factory() ->for($this->user) ->withType(AccountTypeEnum::ASSET) ->create() ; } public function testIndex(): void { $this->actingAs($this->user); $response = $this->getJson(route('api.v1.accounts.index')); $response->assertStatus(200); $response->assertJson(['meta' => ['pagination' => ['total' => 5]]]); } public function testIndexFailsOnUnknownAccountType(): void { $this->actingAs($this->user); $response = $this->getJson(route('api.v1.accounts.index').'?type=foobar'); $response->assertStatus(422); $response->assertJson(['errors' => ['type' => ['The selected type is invalid.']]]); } public function testIndexCanFilterOnAccountType(): void { $this->actingAs($this->user); $response = $this->getJson(route('api.v1.accounts.index').'?type=asset'); $response->assertStatus(200); $response->assertJson([ 'data' => [['attributes' => ['type' => 'asset']], ['attributes' => ['type' => 'asset']]], 'meta' => ['pagination' => ['total' => 2]], ]); } }