2025-08-10 21:18:20 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace Tests\Unit\Models;
|
|
|
|
|
|
2025-08-15 16:39:18 +02:00
|
|
|
use Domains\Feed\Models\Feed;
|
2025-08-16 10:09:38 +02:00
|
|
|
use Domains\Feed\Models\Route;
|
2025-08-15 16:39:18 +02:00
|
|
|
use Domains\Platform\Models\PlatformChannel;
|
2025-08-16 10:09:38 +02:00
|
|
|
use Domains\Settings\Models\Language;
|
2025-08-10 21:18:20 +02:00
|
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
|
|
|
use Tests\TestCase;
|
|
|
|
|
|
|
|
|
|
class LanguageTest extends TestCase
|
|
|
|
|
{
|
|
|
|
|
use RefreshDatabase;
|
|
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
public function test_routes_relationship(): void
|
2025-08-10 21:18:20 +02:00
|
|
|
{
|
|
|
|
|
$language = Language::factory()->create();
|
2025-08-15 21:54:44 +02:00
|
|
|
$feed1 = Feed::factory()->create();
|
|
|
|
|
$feed2 = Feed::factory()->create();
|
2025-08-16 10:09:38 +02:00
|
|
|
$channel1 = PlatformChannel::factory()->create(['language_id' => $language->id]);
|
|
|
|
|
$channel2 = PlatformChannel::factory()->create(['language_id' => $language->id]);
|
2025-08-15 21:54:44 +02:00
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
$route1 = Route::create([
|
|
|
|
|
'feed_id' => $feed1->id,
|
|
|
|
|
'platform_channel_id' => $channel1->id,
|
|
|
|
|
'language_id' => $language->id,
|
2025-08-15 21:54:44 +02:00
|
|
|
'is_active' => true,
|
2025-08-16 10:09:38 +02:00
|
|
|
'priority' => 50
|
2025-08-15 21:54:44 +02:00
|
|
|
]);
|
2025-08-10 21:18:20 +02:00
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
$route2 = Route::create([
|
|
|
|
|
'feed_id' => $feed2->id,
|
|
|
|
|
'platform_channel_id' => $channel2->id,
|
|
|
|
|
'language_id' => $language->id,
|
|
|
|
|
'is_active' => false,
|
|
|
|
|
'priority' => 60
|
2025-08-10 21:18:20 +02:00
|
|
|
]);
|
|
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
$routes = $language->routes;
|
2025-08-10 21:18:20 +02:00
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
$this->assertCount(2, $routes);
|
|
|
|
|
$this->assertTrue($routes->contains('id', $route1->id));
|
|
|
|
|
$this->assertTrue($routes->contains('id', $route2->id));
|
2025-08-10 21:18:20 +02:00
|
|
|
}
|
|
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
public function test_available_for_routes_scope(): void
|
2025-08-10 21:18:20 +02:00
|
|
|
{
|
2025-08-16 10:09:38 +02:00
|
|
|
// 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
|
2025-08-10 21:18:20 +02:00
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
// 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
|
2025-08-10 21:18:20 +02:00
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
// 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]);
|
2025-08-10 21:18:20 +02:00
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
$availableLanguages = Language::availableForRoutes()->get();
|
2025-08-10 21:18:20 +02:00
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
// Only language1 should be available (has active feed and active channel)
|
|
|
|
|
$this->assertCount(1, $availableLanguages);
|
|
|
|
|
$this->assertEquals($language1->id, $availableLanguages->first()->id);
|
2025-08-10 21:18:20 +02:00
|
|
|
}
|
|
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
public function test_with_active_feeds_scope(): void
|
2025-08-10 21:18:20 +02:00
|
|
|
{
|
2025-08-16 10:09:38 +02:00
|
|
|
$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]);
|
2025-08-10 21:18:20 +02:00
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
// 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]);
|
2025-08-10 21:18:20 +02:00
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
$languagesWithActiveFeeds = Language::withActiveFeeds()->get();
|
2025-08-10 21:18:20 +02:00
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
$this->assertCount(1, $languagesWithActiveFeeds);
|
|
|
|
|
$this->assertEquals($language1->id, $languagesWithActiveFeeds->first()->id);
|
2025-08-10 21:18:20 +02:00
|
|
|
}
|
|
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
public function test_with_active_channels_scope(): void
|
2025-08-10 21:18:20 +02:00
|
|
|
{
|
2025-08-16 10:09:38 +02:00
|
|
|
$language1 = Language::factory()->create(['is_active' => true]);
|
|
|
|
|
$language2 = Language::factory()->create(['is_active' => true]);
|
2025-08-10 21:18:20 +02:00
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
PlatformChannel::factory()->create(['language_id' => $language1->id, 'is_active' => true]);
|
|
|
|
|
PlatformChannel::factory()->create(['language_id' => $language2->id, 'is_active' => false]);
|
2025-08-10 21:18:20 +02:00
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
$languagesWithActiveChannels = Language::withActiveChannels()->get();
|
2025-08-10 21:18:20 +02:00
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
$this->assertCount(1, $languagesWithActiveChannels);
|
|
|
|
|
$this->assertEquals($language1->id, $languagesWithActiveChannels->first()->id);
|
2025-08-10 21:18:20 +02:00
|
|
|
}
|
|
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
public function test_can_be_used_for_routes_method(): void
|
2025-08-10 21:18:20 +02:00
|
|
|
{
|
2025-08-16 10:09:38 +02:00
|
|
|
$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]);
|
2025-08-10 21:18:20 +02:00
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
// Attach language to feed
|
|
|
|
|
$feed->languages()->attach($language->id, ['url' => $feed->url, 'is_active' => true, 'is_primary' => true]);
|
2025-08-10 21:18:20 +02:00
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
$this->assertTrue($language->canBeUsedForRoutes());
|
2025-08-10 21:18:20 +02:00
|
|
|
}
|
|
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
public function test_can_be_used_for_routes_method_returns_false_when_language_inactive(): void
|
2025-08-10 21:18:20 +02:00
|
|
|
{
|
2025-08-16 10:09:38 +02:00
|
|
|
$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]);
|
2025-08-10 21:18:20 +02:00
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
// Attach language to feed
|
|
|
|
|
$feed->languages()->attach($language->id, ['url' => $feed->url, 'is_active' => true, 'is_primary' => true]);
|
2025-08-10 21:18:20 +02:00
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
$this->assertFalse($language->canBeUsedForRoutes());
|
2025-08-10 21:18:20 +02:00
|
|
|
}
|
|
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
public function test_can_be_used_for_routes_method_returns_false_when_no_active_feeds(): void
|
2025-08-10 21:18:20 +02:00
|
|
|
{
|
2025-08-16 10:09:38 +02:00
|
|
|
$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]);
|
2025-08-10 21:18:20 +02:00
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
// Attach language to inactive feed
|
|
|
|
|
$feed->languages()->attach($language->id, ['url' => $feed->url, 'is_active' => true, 'is_primary' => true]);
|
2025-08-10 21:18:20 +02:00
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
$this->assertFalse($language->canBeUsedForRoutes());
|
2025-08-10 21:18:20 +02:00
|
|
|
}
|
|
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
public function test_can_be_used_for_routes_method_returns_false_when_no_active_channels(): void
|
2025-08-10 21:18:20 +02:00
|
|
|
{
|
2025-08-16 10:09:38 +02:00
|
|
|
$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
|
2025-08-10 21:18:20 +02:00
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
// Attach language to feed
|
|
|
|
|
$feed->languages()->attach($language->id, ['url' => $feed->url, 'is_active' => true, 'is_primary' => true]);
|
2025-08-10 21:18:20 +02:00
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
$this->assertFalse($language->canBeUsedForRoutes());
|
2025-08-10 21:18:20 +02:00
|
|
|
}
|
2025-08-16 10:09:38 +02:00
|
|
|
}
|