97 - Add auto_approve toggle to Route edit modal
This commit is contained in:
parent
9430158051
commit
bab2557e85
3 changed files with 170 additions and 1 deletions
|
|
@ -26,6 +26,8 @@ class Routes extends Component
|
||||||
// Edit form
|
// Edit form
|
||||||
public int $editPriority = 50;
|
public int $editPriority = 50;
|
||||||
|
|
||||||
|
public string $editAutoApprove = '';
|
||||||
|
|
||||||
// Keyword management
|
// Keyword management
|
||||||
public string $newKeyword = '';
|
public string $newKeyword = '';
|
||||||
|
|
||||||
|
|
@ -81,6 +83,7 @@ public function openEditModal(int $feedId, int $channelId): void
|
||||||
$this->editingFeedId = $feedId;
|
$this->editingFeedId = $feedId;
|
||||||
$this->editingChannelId = $channelId;
|
$this->editingChannelId = $channelId;
|
||||||
$this->editPriority = $route->priority;
|
$this->editPriority = $route->priority;
|
||||||
|
$this->editAutoApprove = $route->auto_approve === null ? '' : ($route->auto_approve ? '1' : '0');
|
||||||
$this->newKeyword = '';
|
$this->newKeyword = '';
|
||||||
$this->showKeywordInput = false;
|
$this->showKeywordInput = false;
|
||||||
}
|
}
|
||||||
|
|
@ -101,9 +104,18 @@ public function updateRoute(): void
|
||||||
'editPriority' => 'required|integer|min:0',
|
'editPriority' => 'required|integer|min:0',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$autoApprove = match ($this->editAutoApprove) {
|
||||||
|
'1' => true,
|
||||||
|
'0' => false,
|
||||||
|
default => null,
|
||||||
|
};
|
||||||
|
|
||||||
Route::where('feed_id', $this->editingFeedId)
|
Route::where('feed_id', $this->editingFeedId)
|
||||||
->where('platform_channel_id', $this->editingChannelId)
|
->where('platform_channel_id', $this->editingChannelId)
|
||||||
->update(['priority' => $this->editPriority]);
|
->update([
|
||||||
|
'priority' => $this->editPriority,
|
||||||
|
'auto_approve' => $autoApprove,
|
||||||
|
]);
|
||||||
|
|
||||||
$this->closeEditModal();
|
$this->closeEditModal();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,13 @@ class="inline-flex items-center px-4 py-2 border border-transparent text-sm font
|
||||||
<span>{{ $route->platformChannel?->platformInstance?->platform?->channelLabel() ?? 'Channel' }}: {{ $route->platformChannel?->display_name ?? $route->platformChannel?->name }}</span>
|
<span>{{ $route->platformChannel?->platformInstance?->platform?->channelLabel() ?? 'Channel' }}: {{ $route->platformChannel?->display_name ?? $route->platformChannel?->name }}</span>
|
||||||
<span>•</span>
|
<span>•</span>
|
||||||
<span>Created: {{ $route->created_at->format('M d, Y') }}</span>
|
<span>Created: {{ $route->created_at->format('M d, Y') }}</span>
|
||||||
|
@if ($route->auto_approve === true)
|
||||||
|
<span>•</span>
|
||||||
|
<span class="text-green-600">Auto-approve: On</span>
|
||||||
|
@elseif ($route->auto_approve === false)
|
||||||
|
<span>•</span>
|
||||||
|
<span class="text-red-600">Auto-approve: Off</span>
|
||||||
|
@endif
|
||||||
</div>
|
</div>
|
||||||
@if ($route->platformChannel?->description)
|
@if ($route->platformChannel?->description)
|
||||||
<p class="mt-2 text-sm text-gray-500">
|
<p class="mt-2 text-sm text-gray-500">
|
||||||
|
|
@ -265,6 +272,26 @@ class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none foc
|
||||||
<p class="text-sm text-gray-500 mt-1">Higher priority routes are processed first</p>
|
<p class="text-sm text-gray-500 mt-1">Higher priority routes are processed first</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Auto-approve -->
|
||||||
|
<div>
|
||||||
|
<label class="block text-sm font-medium text-gray-700 mb-2">Auto-approve</label>
|
||||||
|
<div class="flex items-center space-x-4">
|
||||||
|
<label class="inline-flex items-center">
|
||||||
|
<input type="radio" wire:model="editAutoApprove" name="editAutoApprove" value="" class="text-blue-600 focus:ring-blue-500">
|
||||||
|
<span class="ml-2 text-sm text-gray-700">Use global setting</span>
|
||||||
|
</label>
|
||||||
|
<label class="inline-flex items-center">
|
||||||
|
<input type="radio" wire:model="editAutoApprove" name="editAutoApprove" value="1" class="text-blue-600 focus:ring-blue-500">
|
||||||
|
<span class="ml-2 text-sm text-gray-700">On</span>
|
||||||
|
</label>
|
||||||
|
<label class="inline-flex items-center">
|
||||||
|
<input type="radio" wire:model="editAutoApprove" name="editAutoApprove" value="0" class="text-blue-600 focus:ring-blue-500">
|
||||||
|
<span class="ml-2 text-sm text-gray-700">Off</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<p class="text-sm text-gray-500 mt-1">Override global approval setting for this route</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Keyword Management -->
|
<!-- Keyword Management -->
|
||||||
<div class="border-t pt-4">
|
<div class="border-t pt-4">
|
||||||
<div class="flex items-center space-x-2 mb-3">
|
<div class="flex items-center space-x-2 mb-3">
|
||||||
|
|
|
||||||
130
tests/Feature/Livewire/RoutesAutoApproveTest.php
Normal file
130
tests/Feature/Livewire/RoutesAutoApproveTest.php
Normal file
|
|
@ -0,0 +1,130 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Feature\Livewire;
|
||||||
|
|
||||||
|
use App\Livewire\Routes;
|
||||||
|
use App\Models\Feed;
|
||||||
|
use App\Models\PlatformChannel;
|
||||||
|
use App\Models\Route;
|
||||||
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||||
|
use Livewire\Livewire;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
class RoutesAutoApproveTest extends TestCase
|
||||||
|
{
|
||||||
|
use RefreshDatabase;
|
||||||
|
|
||||||
|
private function createRoute(?bool $autoApprove = null): Route
|
||||||
|
{
|
||||||
|
$feed = Feed::factory()->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');
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue