create([ 'title' => "Новость {$number}", 'body' => "Полный текст новости {$number}.", 'sort_order' => 0, 'is_published' => true, ]); } News::query()->create([ 'title' => 'Скрытый черновик', 'body' => 'Не должен попасть в список.', 'sort_order' => 0, 'is_published' => false, ]); $this->get(route('news.index')) ->assertOk() ->assertInertia(fn (Assert $page) => $page ->component('News/Index', false) ->has('articles.data', 9) ->where('articles.data.0.title', 'Новость 10') ->where('articles.total', 10) ->where('articles.last_page', 2) ->where('urls.news', route('news.index')) ->etc() ); } public function test_published_news_has_public_inertia_page(): void { $news = News::query()->create([ 'title' => 'Открытие новой эпохи', 'body' => "Герои завершили путь в Классике.\n\nТеперь открыты врата Запределья.", 'sort_order' => 1, 'is_published' => true, ]); $this->get(route('news.show', $news)) ->assertOk() ->assertInertia(fn (Assert $page) => $page ->component('News/Show', false) ->where('article.id', $news->id) ->where('article.title', 'Открытие новой эпохи') ->where('article.body', $news->body) ->where('article.url', route('news.show', $news)) ->where('article.canonical_url', route('news.show', $news)) ->where('article.back_url', route('news.index')) ->etc() ); } public function test_unpublished_news_is_not_publicly_available(): void { $news = News::query()->create([ 'title' => 'Черновик', 'body' => 'Эта новость ещё не опубликована.', 'sort_order' => 1, 'is_published' => false, ]); $this->get(route('news.show', $news))->assertNotFound(); } public function test_landing_news_card_links_to_full_article(): void { $news = collect(range(1, 4))->map(fn (int $number): News => News::query()->create([ 'title' => "Обновление {$number}", 'body' => "Полный текст обновления {$number}.", 'sort_order' => 10 - $number, 'is_published' => true, ])); $this->get(route('landing.index')) ->assertOk() ->assertInertia(fn (Assert $page) => $page ->component('Landing/Main', false) ->has('posts', 3) ->where('posts.0.id', $news[3]->id) ->where('posts.0.url', route('news.show', $news[3])) ->where('posts.2.id', $news[1]->id) ->where('newsIndexUrl', route('news.index')) ->etc() ); } }