From bab2557e85377af37b51e1862fe6d5050375cadc Mon Sep 17 00:00:00 2001 From: myrmidex Date: Wed, 18 Mar 2026 17:51:35 +0100 Subject: [PATCH] 97 - Add auto_approve toggle to Route edit modal --- app/Livewire/Routes.php | 14 +- resources/views/livewire/routes.blade.php | 27 ++++ .../Livewire/RoutesAutoApproveTest.php | 130 ++++++++++++++++++ 3 files changed, 170 insertions(+), 1 deletion(-) create mode 100644 tests/Feature/Livewire/RoutesAutoApproveTest.php diff --git a/app/Livewire/Routes.php b/app/Livewire/Routes.php index 485a06b..1578e43 100644 --- a/app/Livewire/Routes.php +++ b/app/Livewire/Routes.php @@ -26,6 +26,8 @@ class Routes extends Component // Edit form public int $editPriority = 50; + public string $editAutoApprove = ''; + // Keyword management public string $newKeyword = ''; @@ -81,6 +83,7 @@ public function openEditModal(int $feedId, int $channelId): void $this->editingFeedId = $feedId; $this->editingChannelId = $channelId; $this->editPriority = $route->priority; + $this->editAutoApprove = $route->auto_approve === null ? '' : ($route->auto_approve ? '1' : '0'); $this->newKeyword = ''; $this->showKeywordInput = false; } @@ -101,9 +104,18 @@ public function updateRoute(): void 'editPriority' => 'required|integer|min:0', ]); + $autoApprove = match ($this->editAutoApprove) { + '1' => true, + '0' => false, + default => null, + }; + Route::where('feed_id', $this->editingFeedId) ->where('platform_channel_id', $this->editingChannelId) - ->update(['priority' => $this->editPriority]); + ->update([ + 'priority' => $this->editPriority, + 'auto_approve' => $autoApprove, + ]); $this->closeEditModal(); } diff --git a/resources/views/livewire/routes.blade.php b/resources/views/livewire/routes.blade.php index 63ef1ec..5ab5cc2 100644 --- a/resources/views/livewire/routes.blade.php +++ b/resources/views/livewire/routes.blade.php @@ -50,6 +50,13 @@ class="inline-flex items-center px-4 py-2 border border-transparent text-sm font {{ $route->platformChannel?->platformInstance?->platform?->channelLabel() ?? 'Channel' }}: {{ $route->platformChannel?->display_name ?? $route->platformChannel?->name }} Created: {{ $route->created_at->format('M d, Y') }} + @if ($route->auto_approve === true) + + Auto-approve: On + @elseif ($route->auto_approve === false) + + Auto-approve: Off + @endif @if ($route->platformChannel?->description)

@@ -265,6 +272,26 @@ class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none foc

Higher priority routes are processed first

+ +
+ +
+ + + +
+

Override global approval setting for this route

+
+
diff --git a/tests/Feature/Livewire/RoutesAutoApproveTest.php b/tests/Feature/Livewire/RoutesAutoApproveTest.php new file mode 100644 index 0000000..b23ced8 --- /dev/null +++ b/tests/Feature/Livewire/RoutesAutoApproveTest.php @@ -0,0 +1,130 @@ +create(); + $channel = PlatformChannel::factory()->create(); + + return Route::create([ + 'feed_id' => $feed->id, + 'platform_channel_id' => $channel->id, + 'is_active' => true, + 'priority' => 50, + 'auto_approve' => $autoApprove, + ]); + } + + public function test_edit_modal_loads_auto_approve_null(): void + { + $route = $this->createRoute(null); + + Livewire::test(Routes::class) + ->call('openEditModal', $route->feed_id, $route->platform_channel_id) + ->assertSet('editAutoApprove', ''); + } + + public function test_edit_modal_loads_auto_approve_true(): void + { + $route = $this->createRoute(true); + + Livewire::test(Routes::class) + ->call('openEditModal', $route->feed_id, $route->platform_channel_id) + ->assertSet('editAutoApprove', '1'); + } + + public function test_edit_modal_loads_auto_approve_false(): void + { + $route = $this->createRoute(false); + + Livewire::test(Routes::class) + ->call('openEditModal', $route->feed_id, $route->platform_channel_id) + ->assertSet('editAutoApprove', '0'); + } + + public function test_update_route_sets_auto_approve_to_true(): void + { + $route = $this->createRoute(null); + + Livewire::test(Routes::class) + ->call('openEditModal', $route->feed_id, $route->platform_channel_id) + ->set('editAutoApprove', '1') + ->call('updateRoute'); + + $updated = Route::where('feed_id', $route->feed_id) + ->where('platform_channel_id', $route->platform_channel_id) + ->first(); + + $this->assertTrue($updated->auto_approve); + } + + public function test_update_route_sets_auto_approve_to_false(): void + { + $route = $this->createRoute(null); + + Livewire::test(Routes::class) + ->call('openEditModal', $route->feed_id, $route->platform_channel_id) + ->set('editAutoApprove', '0') + ->call('updateRoute'); + + $updated = Route::where('feed_id', $route->feed_id) + ->where('platform_channel_id', $route->platform_channel_id) + ->first(); + + $this->assertFalse($updated->auto_approve); + } + + public function test_update_route_sets_auto_approve_to_null(): void + { + $route = $this->createRoute(true); + + Livewire::test(Routes::class) + ->call('openEditModal', $route->feed_id, $route->platform_channel_id) + ->set('editAutoApprove', '') + ->call('updateRoute'); + + $updated = Route::where('feed_id', $route->feed_id) + ->where('platform_channel_id', $route->platform_channel_id) + ->first(); + + $this->assertNull($updated->auto_approve); + } + + public function test_route_card_shows_auto_approve_on_badge(): void + { + $this->createRoute(true); + + Livewire::test(Routes::class) + ->assertSee('Auto-approve: On'); + } + + public function test_route_card_shows_auto_approve_off_badge(): void + { + $this->createRoute(false); + + Livewire::test(Routes::class) + ->assertSee('Auto-approve: Off'); + } + + public function test_route_card_hides_badge_when_using_global_setting(): void + { + $this->createRoute(null); + + Livewire::test(Routes::class) + ->assertDontSee('Auto-approve: On') + ->assertDontSee('Auto-approve: Off'); + } +}