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(); });