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']));
|
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');
|
$dominio = $request->validated('dominio');
|
||||||
|
|
||||||
return TenantResource::make(
|
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),
|
'header_logo' => $this->headerLogo?->getTemporaryUrl(1440),
|
||||||
'footer_logo' => $this->footerLogo?->getTemporaryUrl(1440 ),
|
'footer_logo' => $this->footerLogo?->getTemporaryUrl(1440 ),
|
||||||
'selected_bank_account_id' => $this->selected_bank_account_id,
|
'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::apiResource('tenants', TenantController::class);
|
||||||
|
|
||||||
Route::prefix('tenants/{tenant:codigo}')->group(function (): void {
|
Route::prefix('tenants/{tenant:codigo}')->group(function (): void {
|
||||||
Route::post('bank-accounts/{bank_account}/select', [\App\Domains\Tenant\Controllers\BankAccountController::class, 'select']);
|
Route::middleware('auth:sanctum')->group(function (): void {
|
||||||
Route::apiResource('bank-accounts', \App\Domains\Tenant\Controllers\BankAccountController::class)
|
Route::get('bank-accounts/selected', [\App\Domains\Tenant\Controllers\BankAccountController::class, 'selected']);
|
||||||
->parameters(['bank-accounts' => 'bank_account']);
|
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\BankAccount;
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
use App\Domains\Tenant\Models\Tenant;
|
||||||
|
use App\Domains\Auth\Models\User;
|
||||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||||
use Tests\TestCase;
|
use Tests\TestCase;
|
||||||
|
|
||||||
@@ -12,6 +13,7 @@ class BankAccountControllerTest extends TestCase
|
|||||||
use RefreshDatabase;
|
use RefreshDatabase;
|
||||||
|
|
||||||
private Tenant $tenant;
|
private Tenant $tenant;
|
||||||
|
private User $user;
|
||||||
|
|
||||||
protected function setUp(): void
|
protected function setUp(): void
|
||||||
{
|
{
|
||||||
@@ -48,6 +50,9 @@ class BankAccountControllerTest extends TestCase
|
|||||||
'header_logo_id' => $headerAttachment->id,
|
'header_logo_id' => $headerAttachment->id,
|
||||||
'footer_logo_id' => $footerAttachment->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
|
public function test_it_lists_bank_accounts_for_a_tenant(): void
|
||||||
@@ -195,4 +200,43 @@ class BankAccountControllerTest extends TestCase
|
|||||||
$this->tenant->refresh();
|
$this->tenant->refresh();
|
||||||
$this->assertNull($this->tenant->selected_bank_account_id);
|
$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