create(['can_create_channel' => true]); $category = Category::factory()->create(); $response = $this->actingAs($user)->post(route('creator.channel.store'), [ 'display_name' => 'Nyone Live', 'slug' => 'nyone-live', 'description' => 'Live builds and demos.', 'category_id' => $category->id, ]); $response ->assertRedirect(route('dashboard', absolute: false)) ->assertSessionHas('plain_stream_key'); $this->assertDatabaseHas(Channel::class, [ 'user_id' => $user->id, 'slug' => 'nyone-live', 'display_name' => 'Nyone Live', 'category_id' => $category->id, ]); $this->assertDatabaseCount(StreamKey::class, 1); } public function test_user_without_creator_access_cannot_create_channel(): void { $user = User::factory()->create(); $response = $this->actingAs($user)->post(route('creator.channel.store'), [ 'display_name' => 'Nyone Live', 'slug' => 'nyone-live', ]); $response->assertForbidden(); $this->assertDatabaseMissing(Channel::class, [ 'user_id' => $user->id, ]); } public function test_channel_creation_can_be_opened_by_default(): void { PlatformSetting::current()->forceFill([ 'channel_creation_open' => true, ])->save(); $user = User::factory()->create(); $response = $this->actingAs($user)->post(route('creator.channel.store'), [ 'display_name' => 'Nyone Live', 'slug' => 'nyone-live', ]); $response ->assertRedirect(route('dashboard', absolute: false)) ->assertSessionHas('plain_stream_key'); $this->assertDatabaseHas(Channel::class, [ 'user_id' => $user->id, 'slug' => 'nyone-live', ]); } public function test_user_cannot_create_more_than_one_channel(): void { $user = User::factory()->create(['can_create_channel' => true]); Channel::factory()->for($user)->create(); $response = $this->actingAs($user)->post(route('creator.channel.store'), [ 'display_name' => 'Second Channel', 'slug' => 'second-channel', ]); $response->assertUnprocessable(); } }