Remove unused controllers and routes (#11)

This commit is contained in:
Víctor Falcón 2025-12-04 08:48:17 +01:00 committed by GitHub
parent 571f0159e1
commit de1ecf3b8c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 0 additions and 222 deletions

View File

@ -48,28 +48,4 @@ class EncryptionController extends Controller
'salt' => $user->encryption_salt,
]);
}
public function updateMessage(Request $request): JsonResponse
{
$validated = $request->validate([
'encrypted_content' => ['required', 'string'],
'iv' => ['required', 'string', 'size:16'],
]);
$user = $request->user();
$message = $user->encryptedMessage;
if (! $message) {
return response()->json([
'message' => 'No encrypted message found',
], 404);
}
$message->update($validated);
return response()->json([
'message' => 'Encrypted message updated successfully',
]);
}
}

View File

@ -1,44 +0,0 @@
<?php
namespace App\Http\Controllers\Settings;
use App\Http\Controllers\Controller;
use App\Models\Bank;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class BankSearchController extends Controller
{
public function __invoke(Request $request): JsonResponse
{
$query = $request->input('query', '');
if (strlen($query) < 3) {
return response()->json([
'banks' => [],
'message' => 'Type at least 3 characters to search',
]);
}
$banks = Bank::query()
->where(function ($q) use ($request) {
$q->where('user_id', $request->user()->id)
->orWhereNull('user_id');
})
->where('name', 'like', '%'.$query.'%')
->orderByRaw('
CASE
WHEN LOWER(name) = LOWER(?) THEN 1
WHEN LOWER(name) LIKE LOWER(?) THEN 2
ELSE 3
END,
name
', [$query, $query.'%'])
->limit(100)
->get(['id', 'name', 'logo']);
return response()->json([
'banks' => $banks,
]);
}
}

View File

@ -1,7 +1,6 @@
<?php
use App\Http\Controllers\Settings\AccountController;
use App\Http\Controllers\Settings\BankSearchController;
use App\Http\Controllers\Settings\CategoryController;
use App\Http\Controllers\Settings\PasswordController;
use App\Http\Controllers\Settings\ProfileController;
@ -27,7 +26,6 @@ Route::middleware('auth')->group(function () {
Route::post('settings/accounts', [AccountController::class, 'store'])->name('accounts.store');
Route::patch('settings/accounts/{account}', [AccountController::class, 'update'])->name('accounts.update');
Route::delete('settings/accounts/{account}', [AccountController::class, 'destroy'])->name('accounts.destroy');
Route::get('settings/banks/search', BankSearchController::class)->name('banks.search');
Route::get('settings/categories', [CategoryController::class, 'index'])->name('categories.index');
Route::post('settings/categories', [CategoryController::class, 'store'])->name('categories.store');

View File

@ -52,7 +52,6 @@ Route::middleware(['auth'])->group(function () {
Route::post('api/encryption/setup', [EncryptionController::class, 'setup']);
Route::get('api/encryption/message', [EncryptionController::class, 'getMessage']);
Route::put('api/encryption/message', [EncryptionController::class, 'updateMessage']);
Route::get('api/sync/categories', [CategorySyncController::class, 'index']);
Route::get('api/sync/accounts', [AccountSyncController::class, 'index']);

View File

@ -93,30 +93,6 @@ test('user without encrypted message receives 404', function () {
$response->assertNotFound();
});
test('user can update encrypted message', function () {
$user = User::factory()->create([
'encryption_salt' => str_repeat('a', 24),
]);
$message = EncryptedMessage::query()->create([
'user_id' => $user->id,
'encrypted_content' => 'old_encrypted_content',
'iv' => str_repeat('b', 16),
]);
$response = actingAs($user)->putJson('/api/encryption/message', [
'encrypted_content' => 'new_encrypted_content',
'iv' => str_repeat('c', 16),
]);
$response->assertSuccessful();
$message->refresh();
expect($message->encrypted_content)->toBe('new_encrypted_content');
expect($message->iv)->toBe(str_repeat('c', 16));
});
test('user without encryption salt is redirected to setup', function () {
$user = User::factory()->create(['encryption_salt' => null]);

View File

@ -212,21 +212,3 @@ it('prevents deleting another users account', function () {
$response->assertForbidden();
assertDatabaseHas('accounts', ['id' => $account->id]);
});
it('only shows banks owned by user or global banks via search', function () {
Bank::query()->delete();
actingAs($this->user);
$userBank = Bank::factory()->create(['user_id' => $this->user->id, 'name' => 'Test User Bank']);
$globalBank = Bank::factory()->create(['user_id' => null, 'name' => 'Test Global Bank']);
$otherUserBank = Bank::factory()->create(['user_id' => User::factory()->create()->id, 'name' => 'Test Other Bank']);
$response = $this->get(route('banks.search', ['query' => 'Test']));
$response->assertSuccessful();
$response->assertJson(fn ($json) => $json
->has('banks', 2)
->where('banks.0.id', fn ($id) => in_array($id, [$userBank->id, $globalBank->id]))
->where('banks.1.id', fn ($id) => in_array($id, [$userBank->id, $globalBank->id])));
});

View File

@ -1,109 +0,0 @@
<?php
use App\Models\Bank;
use App\Models\User;
use function Pest\Laravel\actingAs;
beforeEach(function () {
$this->user = User::factory()->create();
actingAs($this->user);
});
it('requires at least 3 characters to search', function () {
$response = $this->getJson(route('banks.search', ['query' => 'ab']));
$response->assertSuccessful()
->assertJson([
'banks' => [],
'message' => 'Type at least 3 characters to search',
]);
});
it('prioritizes exact matches first', function () {
Bank::factory()->create(['name' => 'ABC Banking']);
Bank::factory()->create(['name' => 'ING']);
Bank::factory()->create(['name' => 'Test ING Bank']);
Bank::factory()->create(['name' => 'Other Company']);
$response = $this->getJson(route('banks.search', ['query' => 'ING']));
$response->assertSuccessful();
$banks = $response->json('banks');
expect($banks)->toHaveCount(3);
expect($banks[0]['name'])->toBe('ING');
});
it('prioritizes names starting with query second', function () {
Bank::factory()->create(['name' => 'ABC Bank']);
Bank::factory()->create(['name' => 'Test Bank']);
Bank::factory()->create(['name' => 'Bank of America']);
Bank::factory()->create(['name' => 'Banking Solutions']);
$response = $this->getJson(route('banks.search', ['query' => 'Bank']));
$response->assertSuccessful();
$banks = $response->json('banks');
expect($banks)->toHaveCount(4);
expect($banks[0]['name'])->toBe('Bank of America');
expect($banks[1]['name'])->toBe('Banking Solutions');
expect($banks[2]['name'])->toBe('ABC Bank');
expect($banks[3]['name'])->toBe('Test Bank');
});
it('sorts results alphabetically within priority groups', function () {
Bank::factory()->create(['name' => 'Zebra ING Bank']);
Bank::factory()->create(['name' => 'ING Direct']);
Bank::factory()->create(['name' => 'ING']);
Bank::factory()->create(['name' => 'Alpha ING Bank']);
Bank::factory()->create(['name' => 'ING Bank']);
$response = $this->getJson(route('banks.search', ['query' => 'ING']));
$response->assertSuccessful();
$banks = $response->json('banks');
expect($banks)->toHaveCount(5);
expect($banks[0]['name'])->toBe('ING');
expect($banks[1]['name'])->toBe('ING Bank');
expect($banks[2]['name'])->toBe('ING Direct');
expect($banks[3]['name'])->toBe('Alpha ING Bank');
expect($banks[4]['name'])->toBe('Zebra ING Bank');
});
it('is case insensitive', function () {
Bank::factory()->create(['name' => 'ING']);
Bank::factory()->create(['name' => 'ing direct']);
Bank::factory()->create(['name' => 'Test ing Bank']);
$response = $this->getJson(route('banks.search', ['query' => 'ing']));
$response->assertSuccessful();
$banks = $response->json('banks');
expect($banks)->toHaveCount(3);
expect($banks[0]['name'])->toBe('ING');
});
it('includes both user banks and global banks', function () {
Bank::factory()->create(['name' => 'User Bank', 'user_id' => $this->user->id]);
Bank::factory()->create(['name' => 'Global Bank', 'user_id' => null]);
Bank::factory()->create(['name' => 'Other User Bank', 'user_id' => User::factory()->create()->id]);
$response = $this->getJson(route('banks.search', ['query' => 'Bank']));
$response->assertSuccessful();
$banks = $response->json('banks');
$bankNames = array_column($banks, 'name');
expect($banks)->toHaveCount(2);
expect($bankNames)->toContain('User Bank');
expect($bankNames)->toContain('Global Bank');
});