fedi-feed-router/tests/Unit/Actions/CreateChannelActionTest.php

87 lines
2.9 KiB
PHP
Raw Normal View History

<?php
namespace Tests\Unit\Actions;
use App\Actions\CreateChannelAction;
use App\Models\Language;
use App\Models\PlatformAccount;
use App\Models\PlatformChannel;
use App\Models\PlatformInstance;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class CreateChannelActionTest extends TestCase
{
use RefreshDatabase;
private CreateChannelAction $action;
protected function setUp(): void
{
parent::setUp();
$this->action = new CreateChannelAction;
}
public function test_creates_channel_and_attaches_account(): void
{
$instance = PlatformInstance::factory()->create(['url' => 'https://lemmy.world']);
$account = PlatformAccount::factory()->create([
'instance_url' => 'https://lemmy.world',
'is_active' => true,
]);
$language = Language::factory()->create();
$channel = $this->action->execute('test_community', $instance->id, $language->id, 'A description');
$this->assertInstanceOf(PlatformChannel::class, $channel);
$this->assertEquals('test_community', $channel->name);
$this->assertEquals('test_community', $channel->channel_id);
$this->assertEquals('Test_community', $channel->display_name);
$this->assertEquals($instance->id, $channel->platform_instance_id);
$this->assertEquals($language->id, $channel->language_id);
$this->assertEquals('A description', $channel->description);
$this->assertTrue($channel->is_active);
// Verify account is attached
$this->assertTrue($channel->platformAccounts->contains($account));
$this->assertEquals(1, $channel->platformAccounts->first()->pivot->priority);
}
public function test_creates_channel_without_language(): void
{
$instance = PlatformInstance::factory()->create(['url' => 'https://lemmy.world']);
PlatformAccount::factory()->create([
'instance_url' => 'https://lemmy.world',
'is_active' => true,
]);
$channel = $this->action->execute('test_community', $instance->id);
$this->assertNull($channel->language_id);
}
public function test_fails_when_no_active_accounts(): void
{
$instance = PlatformInstance::factory()->create(['url' => 'https://lemmy.world']);
// Create inactive account
PlatformAccount::factory()->create([
'instance_url' => 'https://lemmy.world',
'is_active' => false,
]);
$this->expectException(\RuntimeException::class);
$this->expectExceptionMessage('No active platform accounts found for this instance');
$this->action->execute('test_community', $instance->id);
}
public function test_fails_when_no_accounts_at_all(): void
{
$instance = PlatformInstance::factory()->create();
$this->expectException(\RuntimeException::class);
$this->action->execute('test_community', $instance->id);
}
}