fedi-feed-router/backend/tests/Unit/Models/LanguageTest.php

152 lines
6.6 KiB
PHP
Raw Normal View History

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
}