diff --git a/routes/web.php b/routes/web.php index 8e8a7bc10..dd6edde65 100644 --- a/routes/web.php +++ b/routes/web.php @@ -501,7 +501,9 @@ Route::put('settings/remotes', [UserRemotesController::class, 'update'])->name('user-remotes.update'); // User Live... - Route::put('settings/live', [UserLiveController::class, 'update'])->name('user-live.update'); + Route::put('settings/live', [UserLiveController::class, 'update']) + ->middleware(PreventPostingInTimeout::class) + ->name('user-live.update'); Route::delete('settings/live', [UserLiveController::class, 'destroy'])->name('user-live.destroy'); // Appearance... diff --git a/tests/Feature/Controllers/UserTimeoutControllerTest.php b/tests/Feature/Controllers/UserTimeoutControllerTest.php index 04160a79e..c630913b2 100644 --- a/tests/Feature/Controllers/UserTimeoutControllerTest.php +++ b/tests/Feature/Controllers/UserTimeoutControllerTest.php @@ -174,6 +174,26 @@ ->assertJsonPath('timeout.reason', 'Spam or self-promotion'); }); +it('stops a user in timeout from going live, but lets them end a stream', function (): void { + $user = User::factory()->create([ + 'live_platform' => 'youtube', + 'live_url' => 'https://www.youtube.com/watch?v=dQw4w9WgXcQ', + 'live_ends_at' => now()->addHour(), + ]); + UserTimeout::factory()->for($user)->create(); + + $this->actingAs($user) + ->putJson(route('user-live.update'), ['url' => 'https://www.twitch.tv/buymycourse', 'hours' => 12]) + ->assertForbidden() + ->assertJsonPath('timeout.reason', 'Spam or self-promotion'); + + expect($user->refresh()->live_url)->toBe('https://www.youtube.com/watch?v=dQw4w9WgXcQ'); + + $this->delete(route('user-live.destroy'))->assertRedirect(); + + expect($user->refresh()->live_url)->toBeNull(); +}); + it('stops a user in timeout from starting, renaming, or growing orgs, and from messaging or pinning in them', function (): void { $user = User::factory()->create(); [$member, $newcomer] = followersOf($user, 2);