diff --git a/app/Http/Controllers/EncryptionController.php b/app/Http/Controllers/EncryptionController.php index 0619c9d5..311aedb7 100644 --- a/app/Http/Controllers/EncryptionController.php +++ b/app/Http/Controllers/EncryptionController.php @@ -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', - ]); - } } diff --git a/app/Http/Controllers/Settings/BankSearchController.php b/app/Http/Controllers/Settings/BankSearchController.php deleted file mode 100644 index 2578bddf..00000000 --- a/app/Http/Controllers/Settings/BankSearchController.php +++ /dev/null @@ -1,44 +0,0 @@ -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, - ]); - } -} diff --git a/routes/settings.php b/routes/settings.php index db0940f5..93a84c83 100644 --- a/routes/settings.php +++ b/routes/settings.php @@ -1,7 +1,6 @@ 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'); diff --git a/routes/web.php b/routes/web.php index 7c3c7d19..92a73744 100644 --- a/routes/web.php +++ b/routes/web.php @@ -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']); diff --git a/tests/Feature/EncryptionTest.php b/tests/Feature/EncryptionTest.php index 5f52df23..7cda8709 100644 --- a/tests/Feature/EncryptionTest.php +++ b/tests/Feature/EncryptionTest.php @@ -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]); diff --git a/tests/Feature/Settings/AccountTest.php b/tests/Feature/Settings/AccountTest.php index 9a908951..2b16594c 100644 --- a/tests/Feature/Settings/AccountTest.php +++ b/tests/Feature/Settings/AccountTest.php @@ -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]))); -}); diff --git a/tests/Feature/Settings/BankSearchTest.php b/tests/Feature/Settings/BankSearchTest.php deleted file mode 100644 index 6644d7ab..00000000 --- a/tests/Feature/Settings/BankSearchTest.php +++ /dev/null @@ -1,109 +0,0 @@ -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'); -});