2026-07-18 17:07:48 +03:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
use App\Models\Post;
|
|
|
|
|
use App\Models\Site;
|
|
|
|
|
use App\Models\SocialAccount;
|
|
|
|
|
|
|
|
|
|
test('a post can be created with required fields only', function () {
|
|
|
|
|
$site = Site::factory()->create();
|
|
|
|
|
|
|
|
|
|
$post = Post::create([
|
|
|
|
|
'site_id' => $site->id,
|
|
|
|
|
'type' => 'blog',
|
|
|
|
|
'body' => 'Hello world',
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
$fresh = $post->fresh();
|
|
|
|
|
|
|
|
|
|
expect($fresh)
|
|
|
|
|
->site_id->toBe($site->id)
|
|
|
|
|
->type->toBe('blog')
|
|
|
|
|
->body->toBe('Hello world')
|
|
|
|
|
->status->toBe('draft')
|
|
|
|
|
->social_account_id->toBeNull()
|
|
|
|
|
->title->toBeNull()
|
|
|
|
|
->scheduled_at->toBeNull();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('a post can be created with an account, title, status, and schedule', function () {
|
|
|
|
|
$site = Site::factory()->create();
|
|
|
|
|
$account = SocialAccount::factory()->create();
|
|
|
|
|
|
|
|
|
|
$post = Post::create([
|
|
|
|
|
'site_id' => $site->id,
|
|
|
|
|
'social_account_id' => $account->id,
|
|
|
|
|
'type' => 'twitter',
|
|
|
|
|
'title' => 'Launch day',
|
|
|
|
|
'body' => 'We just launched!',
|
|
|
|
|
'status' => 'scheduled',
|
|
|
|
|
'scheduled_at' => '2026-08-01 09:00:00',
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
$fresh = $post->fresh();
|
|
|
|
|
|
|
|
|
|
expect($fresh)
|
|
|
|
|
->social_account_id->toBe($account->id)
|
|
|
|
|
->title->toBe('Launch day')
|
|
|
|
|
->status->toBe('scheduled')
|
|
|
|
|
->scheduled_at->not->toBeNull();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('a post belongs to a site', function () {
|
|
|
|
|
$site = Site::factory()->create();
|
|
|
|
|
$post = Post::factory()->create(['site_id' => $site->id]);
|
|
|
|
|
|
|
|
|
|
expect($post->site)->toBeInstanceOf(Site::class);
|
|
|
|
|
expect($post->site->id)->toBe($site->id);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('a post can belong to a social account', function () {
|
|
|
|
|
$account = SocialAccount::factory()->create();
|
|
|
|
|
$post = Post::factory()->create(['social_account_id' => $account->id]);
|
|
|
|
|
|
|
|
|
|
expect($post->socialAccount)->toBeInstanceOf(SocialAccount::class);
|
|
|
|
|
expect($post->socialAccount->id)->toBe($account->id);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('deleting a site cascades and deletes its posts', function () {
|
|
|
|
|
$site = Site::factory()->create();
|
|
|
|
|
$post = Post::factory()->create(['site_id' => $site->id]);
|
|
|
|
|
|
|
|
|
|
$site->delete();
|
|
|
|
|
|
|
|
|
|
expect(Post::find($post->id))->toBeNull();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('deleting a social account nulls out the post link but keeps the post', function () {
|
|
|
|
|
$account = SocialAccount::factory()->create();
|
|
|
|
|
$post = Post::factory()->create(['social_account_id' => $account->id]);
|
|
|
|
|
|
|
|
|
|
$account->delete();
|
|
|
|
|
|
|
|
|
|
expect($post->fresh())
|
|
|
|
|
->not->toBeNull()
|
|
|
|
|
->social_account_id->toBeNull();
|
|
|
|
|
});
|
2026-07-19 16:48:03 +03:00
|
|
|
|
|
|
|
|
test('a post can store a published_url', function () {
|
|
|
|
|
$post = Post::factory()->create(['published_url' => null]);
|
|
|
|
|
|
|
|
|
|
$post->update(['published_url' => 'https://example.com/2026/07/my-post']);
|
|
|
|
|
|
|
|
|
|
expect($post->fresh()->published_url)->toBe('https://example.com/2026/07/my-post');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('published_url defaults to null', function () {
|
|
|
|
|
$post = Post::factory()->create();
|
|
|
|
|
|
|
|
|
|
expect($post->fresh()->published_url)->toBeNull();
|
|
|
|
|
});
|