feat: add endpoint to retrieve selected bank account for a tenant and update routes with authentication
This commit is contained in:
@@ -64,4 +64,13 @@ class BankAccountController extends Controller
|
||||
|
||||
return TenantResource::make($tenant->loadMissing(['headerLogo', 'footerLogo', 'selectedBankAccount']));
|
||||
}
|
||||
|
||||
public function selected(Tenant $tenant): JsonResponse
|
||||
{
|
||||
$account = $tenant->selectedBankAccount;
|
||||
|
||||
abort_if(!$account, 404, 'No bank account is currently selected for this tenant.');
|
||||
|
||||
return BankAccountResource::make($account)->response();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ class BootstrapTenantController extends Controller
|
||||
$dominio = $request->validated('dominio');
|
||||
|
||||
return TenantResource::make(
|
||||
Tenant::query()->with(['headerLogo', 'footerLogo', 'selectedBankAccount'])->where('dominio', $dominio)->firstOrFail()
|
||||
Tenant::query()->with(['headerLogo', 'footerLogo'])->where('dominio', $dominio)->firstOrFail()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,6 @@ class TenantResource extends JsonResource
|
||||
'header_logo' => $this->headerLogo?->getTemporaryUrl(1440),
|
||||
'footer_logo' => $this->footerLogo?->getTemporaryUrl(1440 ),
|
||||
'selected_bank_account_id' => $this->selected_bank_account_id,
|
||||
'selected_bank_account' => BankAccountResource::make($this->whenLoaded('selectedBankAccount')),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,10 @@ Route::get('tenants/bootstrap/{dominio}', BootstrapTenantController::class)
|
||||
Route::apiResource('tenants', TenantController::class);
|
||||
|
||||
Route::prefix('tenants/{tenant:codigo}')->group(function (): void {
|
||||
Route::middleware('auth:sanctum')->group(function (): void {
|
||||
Route::get('bank-accounts/selected', [\App\Domains\Tenant\Controllers\BankAccountController::class, 'selected']);
|
||||
Route::post('bank-accounts/{bank_account}/select', [\App\Domains\Tenant\Controllers\BankAccountController::class, 'select']);
|
||||
Route::apiResource('bank-accounts', \App\Domains\Tenant\Controllers\BankAccountController::class)
|
||||
->parameters(['bank-accounts' => 'bank_account']);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace Tests\Feature\Tenant;
|
||||
|
||||
use App\Domains\Tenant\Models\BankAccount;
|
||||
use App\Domains\Tenant\Models\Tenant;
|
||||
use App\Domains\Auth\Models\User;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Tests\TestCase;
|
||||
|
||||
@@ -12,6 +13,7 @@ class BankAccountControllerTest extends TestCase
|
||||
use RefreshDatabase;
|
||||
|
||||
private Tenant $tenant;
|
||||
private User $user;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
@@ -48,6 +50,9 @@ class BankAccountControllerTest extends TestCase
|
||||
'header_logo_id' => $headerAttachment->id,
|
||||
'footer_logo_id' => $footerAttachment->id,
|
||||
]);
|
||||
|
||||
$this->user = User::factory()->create();
|
||||
$this->actingAs($this->user, 'sanctum');
|
||||
}
|
||||
|
||||
public function test_it_lists_bank_accounts_for_a_tenant(): void
|
||||
@@ -195,4 +200,43 @@ class BankAccountControllerTest extends TestCase
|
||||
$this->tenant->refresh();
|
||||
$this->assertNull($this->tenant->selected_bank_account_id);
|
||||
}
|
||||
|
||||
public function test_it_gets_the_selected_bank_account_for_a_tenant(): void
|
||||
{
|
||||
$account = BankAccount::query()->create([
|
||||
'tenant_code' => 'acme',
|
||||
'titular' => 'John Doe',
|
||||
'entidad' => 'Banco Galicia',
|
||||
'alias' => 'john.doe.galicia',
|
||||
'cvu' => '1234567890123456789012',
|
||||
]);
|
||||
|
||||
// When no bank account is selected
|
||||
$response = $this->getJson("/api/tenants/acme/bank-accounts/selected");
|
||||
$response->assertNotFound();
|
||||
|
||||
// Select the bank account
|
||||
$this->tenant->selected_bank_account_id = $account->id;
|
||||
$this->tenant->save();
|
||||
|
||||
// Get selected bank account
|
||||
$response = $this->getJson("/api/tenants/acme/bank-accounts/selected");
|
||||
$response->assertOk()
|
||||
->assertJsonPath('data.id', $account->id)
|
||||
->assertJsonPath('data.titular', 'John Doe');
|
||||
}
|
||||
|
||||
public function test_it_rejects_unauthenticated_requests(): void
|
||||
{
|
||||
$this->app['auth']->forgetGuards();
|
||||
|
||||
$response = $this->getJson("/api/tenants/acme/bank-accounts/selected");
|
||||
$response->assertStatus(401);
|
||||
|
||||
$response2 = $this->getJson("/api/tenants/acme/bank-accounts");
|
||||
$response2->assertStatus(401);
|
||||
|
||||
$response3 = $this->postJson("/api/tenants/acme/bank-accounts", []);
|
||||
$response3->assertStatus(401);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user