Add unit test for currency endpoint

This commit is contained in:
Constantin Graf
2025-05-12 16:08:52 +02:00
committed by Gregor Vostrak
parent 411fc6ea5e
commit 284d8cd786
3 changed files with 38 additions and 2 deletions
@@ -6,6 +6,7 @@ namespace App\Http\Controllers\Api\V1;
use App\Http\Controllers\Controller;
use App\Service\CurrencyService;
use Brick\Money\Currency;
use Brick\Money\ISOCurrencyProvider;
use Illuminate\Http\JsonResponse;
@@ -23,7 +24,7 @@ class CurrencyController extends Controller
$currencyService = app(CurrencyService::class);
$currencies = array_values(array_map(
fn ($currency) => [
fn (Currency $currency): array => [
'code' => $currency->getCurrencyCode(),
'name' => $currency->getName(),
'symbol' => $currencyService->getCurrencySymbol($currency->getCurrencyCode()),
+2 -1
View File
@@ -5,6 +5,7 @@ declare(strict_types=1);
use App\Http\Controllers\Api\V1\ApiTokenController;
use App\Http\Controllers\Api\V1\ChartController;
use App\Http\Controllers\Api\V1\ClientController;
use App\Http\Controllers\Api\V1\CurrencyController;
use App\Http\Controllers\Api\V1\ExportController;
use App\Http\Controllers\Api\V1\ImportController;
use App\Http\Controllers\Api\V1\InvitationController;
@@ -173,7 +174,7 @@ Route::prefix('v1')->name('v1.')->group(static function (): void {
});
});
Route::get('/currencies', [\App\Http\Controllers\Api\V1\CurrencyController::class, 'index'])->name('currencies.index');
Route::get('/currencies', [CurrencyController::class, 'index'])->name('currencies.index');
// Public routes
Route::name('public.')->prefix('/public')->group(static function (): void {
@@ -0,0 +1,34 @@
<?php
declare(strict_types=1);
namespace Tests\Unit\Endpoint\Api\V1;
use App\Http\Controllers\Api\V1\CurrencyController;
use App\Service\CurrencyService;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\UsesClass;
#[CoversClass(CurrencyController::class)]
#[CoversClass(CurrencyService::class)]
#[UsesClass(CurrencyController::class)]
class CurrencyEndpointTest extends ApiEndpointTestAbstract
{
public function test_index_return_list_of_available_currencies_incl_symbol(): void
{
// Arrange
// Act
$response = $this->getJson(route('api.v1.currencies.index'));
// Assert
$response->assertOk();
$response->assertJsonCount(166);
$responseObj = collect($response->json());
$this->assertSame([
'code' => 'EUR',
'name' => 'Euro',
'symbol' => '€',
], $responseObj->firstWhere('code', '=', 'EUR'));
}
}