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
+
+
+
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');
+ }
+}