Improve recordings list sorting and live show-page status updates.
Add sortable columns with a fixed status width, and keep the show page in sync via Echo, polling, and Alpine hydrate while transcription runs.
This commit is contained in:
@@ -125,8 +125,8 @@ class IndexTest extends TestCase
|
||||
|
||||
Livewire::test(Index::class)
|
||||
->assertSee('wire:poll', false)
|
||||
->assertSee('Transcribing locally…')
|
||||
->assertSee('40%')
|
||||
->assertSee('Transcribing')
|
||||
->assertDontSee('Transcribing locally…')
|
||||
->assertSeeHtml('bg-amber-400');
|
||||
}
|
||||
|
||||
@@ -151,7 +151,7 @@ class IndexTest extends TestCase
|
||||
Livewire::test(Index::class)
|
||||
->assertSee('Waiting in line')
|
||||
->assertSee('Queued')
|
||||
->assertSee('Queued — waiting to start…')
|
||||
->assertDontSee('Queued — waiting to start…')
|
||||
->assertDontSee('5%')
|
||||
->assertSeeHtml('bg-zinc-400/15')
|
||||
->assertDontSeeHtml('bg-amber-400');
|
||||
@@ -282,4 +282,59 @@ class IndexTest extends TestCase
|
||||
|
||||
$this->assertDatabaseHas('recordings', ['id' => $recording->id]);
|
||||
}
|
||||
|
||||
public function test_recordings_can_be_sorted_by_title(): void
|
||||
{
|
||||
$user = User::factory()->create();
|
||||
$this->actingAs($user);
|
||||
|
||||
Recording::query()->create([
|
||||
'user_id' => $user->id,
|
||||
'title' => 'Zebra',
|
||||
'original_filename' => 'z.mp3',
|
||||
'file_path' => 'recordings/z.mp3',
|
||||
'file_size_bytes' => 100,
|
||||
'transcription_status' => 'done',
|
||||
'created_at' => now()->subDay(),
|
||||
]);
|
||||
|
||||
Recording::query()->create([
|
||||
'user_id' => $user->id,
|
||||
'title' => 'Alpha',
|
||||
'original_filename' => 'a.mp3',
|
||||
'file_path' => 'recordings/a.mp3',
|
||||
'file_size_bytes' => 100,
|
||||
'transcription_status' => 'done',
|
||||
'created_at' => now(),
|
||||
]);
|
||||
|
||||
Livewire::test(Index::class)
|
||||
->call('sort', 'title')
|
||||
->assertSet('sortBy', 'title')
|
||||
->assertSet('sortDirection', 'asc')
|
||||
->assertSeeInOrder(['Alpha', 'Zebra'])
|
||||
->call('sort', 'title')
|
||||
->assertSet('sortDirection', 'desc')
|
||||
->assertSeeInOrder(['Zebra', 'Alpha']);
|
||||
}
|
||||
|
||||
public function test_invalid_sort_column_is_ignored(): void
|
||||
{
|
||||
$user = User::factory()->create();
|
||||
$this->actingAs($user);
|
||||
|
||||
Recording::query()->create([
|
||||
'user_id' => $user->id,
|
||||
'title' => 'Only one',
|
||||
'original_filename' => 'one.mp3',
|
||||
'file_path' => 'recordings/one.mp3',
|
||||
'file_size_bytes' => 100,
|
||||
'transcription_status' => 'done',
|
||||
]);
|
||||
|
||||
Livewire::test(Index::class)
|
||||
->call('sort', 'not_a_column')
|
||||
->assertSet('sortBy', 'uploaded')
|
||||
->assertSet('sortDirection', 'desc');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user