diff --git a/app/Api/V1/Requests/DateRangeRequest.php b/app/Api/V1/Requests/DateRangeRequest.php index cb912f5293..bfefb467a6 100644 --- a/app/Api/V1/Requests/DateRangeRequest.php +++ b/app/Api/V1/Requests/DateRangeRequest.php @@ -39,7 +39,7 @@ class DateRangeRequest extends ApiRequest { $validator->after( function (Validator $validator): void { - if (!$validator->valid()) { + if ($validator->failed()) { // set null values $this->attributes->set('start', null); $this->attributes->set('end', null); diff --git a/app/Api/V1/Requests/DateRequest.php b/app/Api/V1/Requests/DateRequest.php index db74d86098..b73970786d 100644 --- a/app/Api/V1/Requests/DateRequest.php +++ b/app/Api/V1/Requests/DateRequest.php @@ -39,8 +39,7 @@ class DateRequest extends ApiRequest { $validator->after( function (Validator $validator): void { - $this->attributes->set('date', null); - if (!$validator->valid()) { + if ($validator->failed()) { return; } $date = $this->getCarbonDate('date')?->endOfDay(); diff --git a/app/Api/V1/Requests/Models/Account/AccountTypeApiRequest.php b/app/Api/V1/Requests/Models/Account/AccountTypeApiRequest.php index e24f6da655..e1e6bc686f 100644 --- a/app/Api/V1/Requests/Models/Account/AccountTypeApiRequest.php +++ b/app/Api/V1/Requests/Models/Account/AccountTypeApiRequest.php @@ -42,7 +42,7 @@ class AccountTypeApiRequest extends ApiRequest { $validator->after( function (Validator $validator): void { - if (!$validator->valid()) { + if ($validator->failed()) { return; } diff --git a/app/Api/V1/Requests/PaginationRequest.php b/app/Api/V1/Requests/PaginationRequest.php index 8fe7cf351f..9b080007dc 100644 --- a/app/Api/V1/Requests/PaginationRequest.php +++ b/app/Api/V1/Requests/PaginationRequest.php @@ -57,7 +57,7 @@ class PaginationRequest extends ApiRequest { $validator->after( function (Validator $validator): void { - if (!$validator->valid()) { + if ($validator->failed()) { return; } diff --git a/database/factories/AccountFactory.php b/database/factories/AccountFactory.php new file mode 100644 index 0000000000..dd2eb4ac04 --- /dev/null +++ b/database/factories/AccountFactory.php @@ -0,0 +1,24 @@ + $this->faker->name(), + 'active' => true, + ]; + } + + public function withType(AccountTypeEnum $type): static + { + return $this->for(AccountType::where('type', $type->value)->first()); + } +} diff --git a/tests/integration/Api/Models/Account/ShowControllerTest.php b/tests/integration/Api/Models/Account/ShowControllerTest.php new file mode 100644 index 0000000000..6975558388 --- /dev/null +++ b/tests/integration/Api/Models/Account/ShowControllerTest.php @@ -0,0 +1,90 @@ +. + */ + +declare(strict_types=1); + +namespace Tests\integration\Api\Models\Account; + +use FireflyIII\Enums\AccountTypeEnum; +use FireflyIII\Models\Account; +use FireflyIII\User; +use Override; +use Illuminate\Foundation\Testing\RefreshDatabase; +use Tests\integration\TestCase; + +/** + * @internal + * + * @covers \FireflyIII\Api\V1\Controllers\Models\Account\ShowController + */ +final class ShowControllerTest extends TestCase +{ + use RefreshDatabase; + private User $user; + + 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]], + ]); + } +}