53 | {{ $article->title }} 54 |
55 | @if($article->excerpt) 56 |{{ $article->excerpt }}
57 | @endif 58 |Article content here
', 69 | 'category_id' => $category->id, 70 | 'is_published' => true, 71 | 'published_at' => now(), 72 | ]); 73 | 74 | $response = $this->get('/article/my-test-article'); 75 | 76 | $response->assertStatus(200); 77 | $response->assertSee('My Test Article'); 78 | $response->assertSee('Article content here'); 79 | } 80 | 81 | public function test_article_view_records_view(): void 82 | { 83 | $article = Article::create([ 84 | 'title' => 'View Test Article', 85 | 'slug' => 'view-test-article', 86 | 'content' => 'Content', 87 | 'is_published' => true, 88 | 'published_at' => now(), 89 | ]); 90 | 91 | $this->assertEquals(0, $article->views()->count()); 92 | 93 | $this->get('/article/view-test-article'); 94 | 95 | $this->assertEquals(1, $article->views()->count()); 96 | 97 | $this->get('/article/view-test-article'); 98 | 99 | $this->assertEquals(2, $article->views()->count()); 100 | } 101 | 102 | public function test_unpublished_article_returns_404(): void 103 | { 104 | $article = Article::create([ 105 | 'title' => 'Draft Article', 106 | 'slug' => 'draft-article', 107 | 'content' => 'Content', 108 | 'is_published' => false, 109 | ]); 110 | 111 | $response = $this->get('/article/draft-article'); 112 | 113 | $response->assertStatus(404); 114 | } 115 | 116 | public function test_category_page_loads(): void 117 | { 118 | $category = Category::create([ 119 | 'title' => 'Design', 120 | 'slug' => 'design', 121 | 'is_active' => true, 122 | ]); 123 | 124 | $article = Article::create([ 125 | 'title' => 'Design Article', 126 | 'slug' => 'design-article', 127 | 'content' => 'Content', 128 | 'category_id' => $category->id, 129 | 'is_published' => true, 130 | 'published_at' => now(), 131 | ]); 132 | 133 | $response = $this->get('/category/design'); 134 | 135 | $response->assertStatus(200); 136 | $response->assertSee('Design'); 137 | $response->assertSee('Design Article'); 138 | } 139 | 140 | public function test_page_show_loads(): void 141 | { 142 | $page = Page::create([ 143 | 'title' => 'About Us', 144 | 'slug' => 'about-us', 145 | 'content' => 'About us content
', 146 | 'is_published' => true, 147 | ]); 148 | 149 | $response = $this->get('/page/about-us'); 150 | 151 | $response->assertStatus(200); 152 | $response->assertSee('About Us'); 153 | $response->assertSee('About us content'); 154 | } 155 | 156 | public function test_unpublished_page_returns_404(): void 157 | { 158 | $page = Page::create([ 159 | 'title' => 'Draft Page', 160 | 'slug' => 'draft-page', 161 | 'content' => 'Content', 162 | 'is_published' => false, 163 | ]); 164 | 165 | $response = $this->get('/page/draft-page'); 166 | 167 | $response->assertStatus(404); 168 | } 169 | 170 | public function test_nonexistent_article_returns_404(): void 171 | { 172 | $response = $this->get('/article/does-not-exist'); 173 | 174 | $response->assertStatus(404); 175 | } 176 | 177 | public function test_navigation_shows_published_pages(): void 178 | { 179 | $contactPage = Page::create([ 180 | 'title' => 'Contact', 181 | 'slug' => 'contact', 182 | 'content' => 'Contact us', 183 | 'is_published' => true, 184 | ]); 185 | 186 | $response = $this->get('/'); 187 | 188 | $response->assertStatus(200); 189 | $response->assertSee('Contact'); 190 | } 191 | } 192 | -------------------------------------------------------------------------------- /resources/views/frontend/articles/index.blade.php: -------------------------------------------------------------------------------- 1 |9 | {{ __('frontend.articles.description') }} 10 |
11 |{{ $article->excerpt }}
57 | @endif 58 |{{ __('frontend.empty.check_back') }}
98 |28 | {{ $page->excerpt }} 29 |
30 | @endif 31 |84 | {{ __('frontend.pages.last_updated', ['date' => $page->updated_at->format('F d, Y')]) }} 85 |
86 |{{ $child->excerpt }}
110 | @endif 111 |38 | {{ $article->excerpt }} 39 |
40 | @endif 41 |