create(); $feed1 = Feed::factory()->create(); $feed2 = Feed::factory()->create(); $channel1 = PlatformChannel::factory()->create(['language_id' => $language->id]); $channel2 = PlatformChannel::factory()->create(['language_id' => $language->id]); $route1 = Route::create([ 'feed_id' => $feed1->id, 'platform_channel_id' => $channel1->id, 'language_id' => $language->id, 'is_active' => true, 'priority' => 50 ]); $route2 = Route::create([ 'feed_id' => $feed2->id, 'platform_channel_id' => $channel2->id, 'language_id' => $language->id, 'is_active' => false, 'priority' => 60 ]); $routes = $language->routes; $this->assertCount(2, $routes); $this->assertTrue($routes->contains('id', $route1->id)); $this->assertTrue($routes->contains('id', $route2->id)); } public function test_available_for_routes_scope(): void { // Create languages $language1 = Language::factory()->create(['is_active' => true]); $language2 = Language::factory()->create(['is_active' => true]); $language3 = Language::factory()->create(['is_active' => false]); // inactive language // Create feeds and channels $feed1 = Feed::factory()->create(['is_active' => true]); $feed2 = Feed::factory()->create(['is_active' => false]); // inactive feed $channel1 = PlatformChannel::factory()->create(['language_id' => $language1->id, 'is_active' => true]); $channel2 = PlatformChannel::factory()->create(['language_id' => $language2->id, 'is_active' => false]); // inactive channel // Attach languages to feeds $feed1->languages()->attach($language1->id, ['url' => $feed1->url, 'is_active' => true, 'is_primary' => true]); $feed2->languages()->attach($language2->id, ['url' => $feed2->url, 'is_active' => true, 'is_primary' => true]); $feed1->languages()->attach($language3->id, ['url' => $feed1->url, 'is_active' => true, 'is_primary' => false]); $availableLanguages = Language::availableForRoutes()->get(); // Only language1 should be available (has active feed and active channel) $this->assertCount(1, $availableLanguages); $this->assertEquals($language1->id, $availableLanguages->first()->id); } public function test_with_active_feeds_scope(): void { $language1 = Language::factory()->create(['is_active' => true]); $language2 = Language::factory()->create(['is_active' => true]); $activeFeed = Feed::factory()->create(['is_active' => true]); $inactiveFeed = Feed::factory()->create(['is_active' => false]); // Attach languages to feeds $activeFeed->languages()->attach($language1->id, ['url' => $activeFeed->url, 'is_active' => true, 'is_primary' => true]); $inactiveFeed->languages()->attach($language2->id, ['url' => $inactiveFeed->url, 'is_active' => true, 'is_primary' => true]); $languagesWithActiveFeeds = Language::withActiveFeeds()->get(); $this->assertCount(1, $languagesWithActiveFeeds); $this->assertEquals($language1->id, $languagesWithActiveFeeds->first()->id); } public function test_with_active_channels_scope(): void { $language1 = Language::factory()->create(['is_active' => true]); $language2 = Language::factory()->create(['is_active' => true]); PlatformChannel::factory()->create(['language_id' => $language1->id, 'is_active' => true]); PlatformChannel::factory()->create(['language_id' => $language2->id, 'is_active' => false]); $languagesWithActiveChannels = Language::withActiveChannels()->get(); $this->assertCount(1, $languagesWithActiveChannels); $this->assertEquals($language1->id, $languagesWithActiveChannels->first()->id); } public function test_can_be_used_for_routes_method(): void { $language = Language::factory()->create(['is_active' => true]); $feed = Feed::factory()->create(['is_active' => true]); $channel = PlatformChannel::factory()->create(['language_id' => $language->id, 'is_active' => true]); // Attach language to feed $feed->languages()->attach($language->id, ['url' => $feed->url, 'is_active' => true, 'is_primary' => true]); $this->assertTrue($language->canBeUsedForRoutes()); } public function test_can_be_used_for_routes_method_returns_false_when_language_inactive(): void { $language = Language::factory()->create(['is_active' => false]); $feed = Feed::factory()->create(['is_active' => true]); $channel = PlatformChannel::factory()->create(['language_id' => $language->id, 'is_active' => true]); // Attach language to feed $feed->languages()->attach($language->id, ['url' => $feed->url, 'is_active' => true, 'is_primary' => true]); $this->assertFalse($language->canBeUsedForRoutes()); } public function test_can_be_used_for_routes_method_returns_false_when_no_active_feeds(): void { $language = Language::factory()->create(['is_active' => true]); $feed = Feed::factory()->create(['is_active' => false]); // inactive feed $channel = PlatformChannel::factory()->create(['language_id' => $language->id, 'is_active' => true]); // Attach language to inactive feed $feed->languages()->attach($language->id, ['url' => $feed->url, 'is_active' => true, 'is_primary' => true]); $this->assertFalse($language->canBeUsedForRoutes()); } public function test_can_be_used_for_routes_method_returns_false_when_no_active_channels(): void { $language = Language::factory()->create(['is_active' => true]); $feed = Feed::factory()->create(['is_active' => true]); $channel = PlatformChannel::factory()->create(['language_id' => $language->id, 'is_active' => false]); // inactive channel // Attach language to feed $feed->languages()->attach($language->id, ['url' => $feed->url, 'is_active' => true, 'is_primary' => true]); $this->assertFalse($language->canBeUsedForRoutes()); } }