get('/blog');
$response->assertViewIs('articles.index');
}
#[Test]
public function single_article_page_loads()
{
$article = Article::factory()->create();
$response = $this->get($article->link);
$response->assertViewIs('articles.show');
}
#[Test]
public function articles_page_does_not_list_drafts(): void
{
Article::factory()->create(['title' => 'Published Article']);
Article::factory()->create(['title' => 'Draft Article', 'published' => 0]);
$this->get('/blog')
->assertSee('Published Article')
->assertDontSee('Draft Article');
}
#[Test]
public function draft_article_is_viewable_and_marked_as_draft(): void
{
$article = Article::factory()->create(['published' => 0]);
$this->get($article->link)
->assertOk()
->assertSee('draft-notice', false)
->assertSee('', false)
->assertSee('
[Draft] ', false);
}
#[Test]
public function published_article_is_not_marked_as_draft(): void
{
$article = Article::factory()->create();
$this->get($article->link)
->assertDontSee('draft-notice', false)
->assertDontSee('noindex', false);
}
#[Test]
public function wrong_date_in_url_redirects_to_correct_date()
{
$article = Article::factory()->create();
$response = $this->get('/blog/1900/01/'.$article->titleurl);
$response->assertRedirect('/blog/'.date('Y').'/'.date('m').'/'.$article->titleurl);
}
#[Test]
public function old_urls_with_id_are_redirected()
{
$article = Article::factory()->create();
$num60Id = resolve(Numbers::class)->numto60($article->id);
$response = $this->get('/blog/s/'.$num60Id);
$response->assertRedirect($article->link);
}
#[Test]
public function unknown_slug_gets_not_found_response()
{
$response = $this->get('/blog/'.date('Y').'/'.date('m').'/unknown-slug');
$response->assertNotFound();
}
#[Test]
public function unknown_article_id_gets_not_found_response()
{
$response = $this->get('/blog/s/22');
$response->assertNotFound();
}
#[Test]
public function some_urls_do_not_parse_correctly(): void
{
$response = $this->get('/blog/feed.js');
$response->assertNotFound();
}
}