Files
muninn/tests/Feature/Livewire/SocialAccountsTest.php
T
m105andClaude Sonnet 5 9278d2e8a0 Add a Publisher abstraction and queued job to publish from the UI
Introduce Publisher/PublisherManager (WordPress + Reddit implementations)
so publishing logic is shared between the CLI, the queue, and future
network integrations. Add a "Publish" button on the Posts page that
dispatches PublishPostJob instead of blocking the request — Reddit's
publisher shells out to the existing Playwright sidecar and can take
tens of seconds, so it can't run synchronously in a web request.

Adds a `target` field (e.g. subreddit) and `publishing` status to Post,
plus a `publish_error` field so failures surface in the UI. Refactors
posts:publish to delegate to WordPressPublisher without changing its
CLI output contract (existing tests pass unchanged).

Also fixes two bugs found along the way: UpdatePostRequest was silently
dropping `published_url` from PATCH requests (never in its validation
rules, despite AI_API.md documenting it), and three Livewire index-page
tests were broken by the earlier auth change (never re-run after adding
the `auth` middleware) since they hit routes via HTTP without a logged-in
user.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-21 14:04:45 +03:00

70 lines
2.1 KiB
PHP

<?php
use App\Livewire\SocialAccounts\Index;
use App\Models\SocialAccount;
use App\Models\User;
use Livewire\Livewire;
test('social accounts index page lists existing accounts', function () {
SocialAccount::factory()->create(['username' => 'example_user']);
$this->actingAs(User::factory()->create())
->get(route('social-accounts.index'))
->assertOk()
->assertSee('example_user');
});
test('a new social account can be created', function () {
Livewire::test(Index::class)
->set('network', 'twitter')
->set('username', 'new_user')
->set('email', 'new_user@example.com')
->set('password', 'secret123')
->set('type', 'post')
->call('save');
expect(SocialAccount::where('username', 'new_user')->exists())->toBeTrue();
});
test('network, username, email, and password are required', function () {
Livewire::test(Index::class)
->set('network', '')
->set('username', '')
->set('email', '')
->set('password', '')
->call('save')
->assertHasErrors(['network', 'username', 'email', 'password']);
});
test('type can be left null', function () {
Livewire::test(Index::class)
->set('network', 'reddit')
->set('username', 'no_type_user')
->set('email', 'no_type@example.com')
->set('password', 'secret123')
->set('type', null)
->call('save');
$account = SocialAccount::where('username', 'no_type_user')->first();
expect($account->type)->toBeNull();
});
test('an existing account can be edited', function () {
$account = SocialAccount::factory()->create(['username' => 'old_name']);
Livewire::test(Index::class)
->call('edit', $account->id)
->set('username', 'new_name')
->call('save');
expect($account->fresh()->username)->toBe('new_name');
});
test('an account can be deleted', function () {
$account = SocialAccount::factory()->create();
Livewire::test(Index::class)->call('delete', $account->id);
expect(SocialAccount::find($account->id))->toBeNull();
});