diff --git a/storage/media-library/temp/B4fdCTEKyBRjAlE5sDLLsPx7FZqvuxA3/XnH97GFyZ0MSw6lbA6OjQxpPLLuoHTv4thumb.jpg b/storage/media-library/temp/B4fdCTEKyBRjAlE5sDLLsPx7FZqvuxA3/XnH97GFyZ0MSw6lbA6OjQxpPLLuoHTv4thumb.jpg new file mode 100644 index 0000000..7e754f4 --- /dev/null +++ b/storage/media-library/temp/B4fdCTEKyBRjAlE5sDLLsPx7FZqvuxA3/XnH97GFyZ0MSw6lbA6OjQxpPLLuoHTv4thumb.jpg @@ -0,0 +1 @@ +fake-jpg \ No newline at end of file diff --git a/storage/media-library/temp/B4fdCTEKyBRjAlE5sDLLsPx7FZqvuxA3/cauUUHrmEwEViQE6IUftmoQYul3HqxDo.jpg b/storage/media-library/temp/B4fdCTEKyBRjAlE5sDLLsPx7FZqvuxA3/cauUUHrmEwEViQE6IUftmoQYul3HqxDo.jpg new file mode 100644 index 0000000..7e754f4 --- /dev/null +++ b/storage/media-library/temp/B4fdCTEKyBRjAlE5sDLLsPx7FZqvuxA3/cauUUHrmEwEViQE6IUftmoQYul3HqxDo.jpg @@ -0,0 +1 @@ +fake-jpg \ No newline at end of file diff --git a/storage/media-library/temp/MZ3tDucZkXehh8RVMK0nUEKheuxfplLZ/QeiJzoZK4ivr9yzJcxYHvFnY2IFHVoufthumb.jpg b/storage/media-library/temp/MZ3tDucZkXehh8RVMK0nUEKheuxfplLZ/QeiJzoZK4ivr9yzJcxYHvFnY2IFHVoufthumb.jpg new file mode 100644 index 0000000..7e754f4 --- /dev/null +++ b/storage/media-library/temp/MZ3tDucZkXehh8RVMK0nUEKheuxfplLZ/QeiJzoZK4ivr9yzJcxYHvFnY2IFHVoufthumb.jpg @@ -0,0 +1 @@ +fake-jpg \ No newline at end of file diff --git a/storage/media-library/temp/MZ3tDucZkXehh8RVMK0nUEKheuxfplLZ/ukHlzPyTHTq2Dzhze7NmFVRijLWdfGuN.jpg b/storage/media-library/temp/MZ3tDucZkXehh8RVMK0nUEKheuxfplLZ/ukHlzPyTHTq2Dzhze7NmFVRijLWdfGuN.jpg new file mode 100644 index 0000000..7e754f4 --- /dev/null +++ b/storage/media-library/temp/MZ3tDucZkXehh8RVMK0nUEKheuxfplLZ/ukHlzPyTHTq2Dzhze7NmFVRijLWdfGuN.jpg @@ -0,0 +1 @@ +fake-jpg \ No newline at end of file diff --git a/storage/media-library/temp/Qi3BIODih9GALfMafqPtOkQVkDj1X9jJ/MeJSuvp0OczoQ03fhbMBSgAH3s63RoBwthumb.jpg b/storage/media-library/temp/Qi3BIODih9GALfMafqPtOkQVkDj1X9jJ/MeJSuvp0OczoQ03fhbMBSgAH3s63RoBwthumb.jpg new file mode 100644 index 0000000..7e754f4 --- /dev/null +++ b/storage/media-library/temp/Qi3BIODih9GALfMafqPtOkQVkDj1X9jJ/MeJSuvp0OczoQ03fhbMBSgAH3s63RoBwthumb.jpg @@ -0,0 +1 @@ +fake-jpg \ No newline at end of file diff --git a/storage/media-library/temp/Qi3BIODih9GALfMafqPtOkQVkDj1X9jJ/m2qHIZGiabagsRws5zBxmLZ7YOTdhxp3.jpg b/storage/media-library/temp/Qi3BIODih9GALfMafqPtOkQVkDj1X9jJ/m2qHIZGiabagsRws5zBxmLZ7YOTdhxp3.jpg new file mode 100644 index 0000000..7e754f4 --- /dev/null +++ b/storage/media-library/temp/Qi3BIODih9GALfMafqPtOkQVkDj1X9jJ/m2qHIZGiabagsRws5zBxmLZ7YOTdhxp3.jpg @@ -0,0 +1 @@ +fake-jpg \ No newline at end of file diff --git a/storage/media-library/temp/Tz5HrPMmwFztj65AmIyqm91pnysG1Ot7/XZUOOxf8lNMMVoAH6XnxEp7a8JHjxXHo.jpg b/storage/media-library/temp/Tz5HrPMmwFztj65AmIyqm91pnysG1Ot7/XZUOOxf8lNMMVoAH6XnxEp7a8JHjxXHo.jpg new file mode 100644 index 0000000..7e754f4 --- /dev/null +++ b/storage/media-library/temp/Tz5HrPMmwFztj65AmIyqm91pnysG1Ot7/XZUOOxf8lNMMVoAH6XnxEp7a8JHjxXHo.jpg @@ -0,0 +1 @@ +fake-jpg \ No newline at end of file diff --git a/storage/media-library/temp/Tz5HrPMmwFztj65AmIyqm91pnysG1Ot7/ki5vuWxFNceC7maU14J01xJQlRZNRd3Lthumb.jpg b/storage/media-library/temp/Tz5HrPMmwFztj65AmIyqm91pnysG1Ot7/ki5vuWxFNceC7maU14J01xJQlRZNRd3Lthumb.jpg new file mode 100644 index 0000000..7e754f4 --- /dev/null +++ b/storage/media-library/temp/Tz5HrPMmwFztj65AmIyqm91pnysG1Ot7/ki5vuWxFNceC7maU14J01xJQlRZNRd3Lthumb.jpg @@ -0,0 +1 @@ +fake-jpg \ No newline at end of file diff --git a/storage/media-library/temp/ZGukOGUzplGr5Tt7k1HjJskCENdb4Ylf/Pu9L4dVelmURZ5HnZEGQirxBTrAufnnC.jpg b/storage/media-library/temp/ZGukOGUzplGr5Tt7k1HjJskCENdb4Ylf/Pu9L4dVelmURZ5HnZEGQirxBTrAufnnC.jpg new file mode 100644 index 0000000..7e754f4 --- /dev/null +++ b/storage/media-library/temp/ZGukOGUzplGr5Tt7k1HjJskCENdb4Ylf/Pu9L4dVelmURZ5HnZEGQirxBTrAufnnC.jpg @@ -0,0 +1 @@ +fake-jpg \ No newline at end of file diff --git a/storage/media-library/temp/ZGukOGUzplGr5Tt7k1HjJskCENdb4Ylf/kIMrqaRVDVfuHAJJbqNflyApINg0f1nHthumb.jpg b/storage/media-library/temp/ZGukOGUzplGr5Tt7k1HjJskCENdb4Ylf/kIMrqaRVDVfuHAJJbqNflyApINg0f1nHthumb.jpg new file mode 100644 index 0000000..7e754f4 --- /dev/null +++ b/storage/media-library/temp/ZGukOGUzplGr5Tt7k1HjJskCENdb4Ylf/kIMrqaRVDVfuHAJJbqNflyApINg0f1nHthumb.jpg @@ -0,0 +1 @@ +fake-jpg \ No newline at end of file diff --git a/storage/media-library/temp/ZfSIDN4lwpokQczDbUXB2Rj5BaVf2kJc/8YL2T70ScmqUAdFrailJr2pFZumbkynZthumb.jpg b/storage/media-library/temp/ZfSIDN4lwpokQczDbUXB2Rj5BaVf2kJc/8YL2T70ScmqUAdFrailJr2pFZumbkynZthumb.jpg new file mode 100644 index 0000000..7e754f4 --- /dev/null +++ b/storage/media-library/temp/ZfSIDN4lwpokQczDbUXB2Rj5BaVf2kJc/8YL2T70ScmqUAdFrailJr2pFZumbkynZthumb.jpg @@ -0,0 +1 @@ +fake-jpg \ No newline at end of file diff --git a/storage/media-library/temp/ZfSIDN4lwpokQczDbUXB2Rj5BaVf2kJc/ufeSYNiI4Eusczwbq1BSvRc8NGDwMySM.jpg b/storage/media-library/temp/ZfSIDN4lwpokQczDbUXB2Rj5BaVf2kJc/ufeSYNiI4Eusczwbq1BSvRc8NGDwMySM.jpg new file mode 100644 index 0000000..7e754f4 --- /dev/null +++ b/storage/media-library/temp/ZfSIDN4lwpokQczDbUXB2Rj5BaVf2kJc/ufeSYNiI4Eusczwbq1BSvRc8NGDwMySM.jpg @@ -0,0 +1 @@ +fake-jpg \ No newline at end of file diff --git a/storage/media-library/temp/fnusN7cigYEaD6ny7lVhyZZf1aWJE5mf/Ip4dCIMcNHq13Lfg6OvlWn5Qk9CIcBT2thumb.jpg b/storage/media-library/temp/fnusN7cigYEaD6ny7lVhyZZf1aWJE5mf/Ip4dCIMcNHq13Lfg6OvlWn5Qk9CIcBT2thumb.jpg new file mode 100644 index 0000000..7e754f4 --- /dev/null +++ b/storage/media-library/temp/fnusN7cigYEaD6ny7lVhyZZf1aWJE5mf/Ip4dCIMcNHq13Lfg6OvlWn5Qk9CIcBT2thumb.jpg @@ -0,0 +1 @@ +fake-jpg \ No newline at end of file diff --git a/storage/media-library/temp/fnusN7cigYEaD6ny7lVhyZZf1aWJE5mf/SXPLBHmR6eS3aIFl3LV7gD0BNgP2w3KR.jpg b/storage/media-library/temp/fnusN7cigYEaD6ny7lVhyZZf1aWJE5mf/SXPLBHmR6eS3aIFl3LV7gD0BNgP2w3KR.jpg new file mode 100644 index 0000000..7e754f4 --- /dev/null +++ b/storage/media-library/temp/fnusN7cigYEaD6ny7lVhyZZf1aWJE5mf/SXPLBHmR6eS3aIFl3LV7gD0BNgP2w3KR.jpg @@ -0,0 +1 @@ +fake-jpg \ No newline at end of file diff --git a/storage/media-library/temp/hNYJX4O0Z4Tn9VqjZMbyHPt17XOIG8Eu/Dm7xDjloseSy8y08DeaYh5T1wbJYAgL5.jpg b/storage/media-library/temp/hNYJX4O0Z4Tn9VqjZMbyHPt17XOIG8Eu/Dm7xDjloseSy8y08DeaYh5T1wbJYAgL5.jpg new file mode 100644 index 0000000..7e754f4 --- /dev/null +++ b/storage/media-library/temp/hNYJX4O0Z4Tn9VqjZMbyHPt17XOIG8Eu/Dm7xDjloseSy8y08DeaYh5T1wbJYAgL5.jpg @@ -0,0 +1 @@ +fake-jpg \ No newline at end of file diff --git a/storage/media-library/temp/hNYJX4O0Z4Tn9VqjZMbyHPt17XOIG8Eu/PFUUFPu7u7GbV4cHqTZc5HVWUdfgIVYzthumb.jpg b/storage/media-library/temp/hNYJX4O0Z4Tn9VqjZMbyHPt17XOIG8Eu/PFUUFPu7u7GbV4cHqTZc5HVWUdfgIVYzthumb.jpg new file mode 100644 index 0000000..7e754f4 --- /dev/null +++ b/storage/media-library/temp/hNYJX4O0Z4Tn9VqjZMbyHPt17XOIG8Eu/PFUUFPu7u7GbV4cHqTZc5HVWUdfgIVYzthumb.jpg @@ -0,0 +1 @@ +fake-jpg \ No newline at end of file diff --git a/storage/media-library/temp/pmSWpm5VLYxfmhR2TsmYV6c2uNA1kfWs/DJxXYaESwEbv2roJcrbOFFK0pBzX1aPHthumb.jpg b/storage/media-library/temp/pmSWpm5VLYxfmhR2TsmYV6c2uNA1kfWs/DJxXYaESwEbv2roJcrbOFFK0pBzX1aPHthumb.jpg new file mode 100644 index 0000000..7e754f4 --- /dev/null +++ b/storage/media-library/temp/pmSWpm5VLYxfmhR2TsmYV6c2uNA1kfWs/DJxXYaESwEbv2roJcrbOFFK0pBzX1aPHthumb.jpg @@ -0,0 +1 @@ +fake-jpg \ No newline at end of file diff --git a/storage/media-library/temp/pmSWpm5VLYxfmhR2TsmYV6c2uNA1kfWs/N8lIDgZQIOy21GzGhE0aWPl0OSgexFE8.jpg b/storage/media-library/temp/pmSWpm5VLYxfmhR2TsmYV6c2uNA1kfWs/N8lIDgZQIOy21GzGhE0aWPl0OSgexFE8.jpg new file mode 100644 index 0000000..7e754f4 --- /dev/null +++ b/storage/media-library/temp/pmSWpm5VLYxfmhR2TsmYV6c2uNA1kfWs/N8lIDgZQIOy21GzGhE0aWPl0OSgexFE8.jpg @@ -0,0 +1 @@ +fake-jpg \ No newline at end of file diff --git a/storage/media-library/temp/sf0nQXO0f5ZaRQNH48dKFJwJFFbJ8T5D/Idjwf1T5XD9sAcuRd0cpAEzj5gG1g0sWthumb.jpg b/storage/media-library/temp/sf0nQXO0f5ZaRQNH48dKFJwJFFbJ8T5D/Idjwf1T5XD9sAcuRd0cpAEzj5gG1g0sWthumb.jpg new file mode 100644 index 0000000..7e754f4 --- /dev/null +++ b/storage/media-library/temp/sf0nQXO0f5ZaRQNH48dKFJwJFFbJ8T5D/Idjwf1T5XD9sAcuRd0cpAEzj5gG1g0sWthumb.jpg @@ -0,0 +1 @@ +fake-jpg \ No newline at end of file diff --git a/storage/media-library/temp/sf0nQXO0f5ZaRQNH48dKFJwJFFbJ8T5D/NGH1aqFAVQzqvZ1yYs1FYQPIRSC2Watj.jpg b/storage/media-library/temp/sf0nQXO0f5ZaRQNH48dKFJwJFFbJ8T5D/NGH1aqFAVQzqvZ1yYs1FYQPIRSC2Watj.jpg new file mode 100644 index 0000000..7e754f4 --- /dev/null +++ b/storage/media-library/temp/sf0nQXO0f5ZaRQNH48dKFJwJFFbJ8T5D/NGH1aqFAVQzqvZ1yYs1FYQPIRSC2Watj.jpg @@ -0,0 +1 @@ +fake-jpg \ No newline at end of file diff --git a/tests/Feature/ChineseContentTest.php b/tests/Feature/ChineseContentTest.php new file mode 100644 index 0000000..8dadc46 --- /dev/null +++ b/tests/Feature/ChineseContentTest.php @@ -0,0 +1,82 @@ +seed(); + + $user = User::create(['name' => '作者', 'email' => 'cn@test.com', 'password' => bcrypt('x')]); + + // 中文分类 + $category = Category::create(['name' => '生活随笔', 'slug' => 'shenghuo-suibi']); + + // 中文标题文章(slug 为空时回退 id) + Post::create([ + 'user_id' => $user->id, + 'category_id' => $category->id, + 'title' => '第一篇中文文章', + 'slug' => null, + 'content' => '中文内容', + 'content_format' => 'markdown', + 'status' => 'published', + 'published_at' => now(), + ]); + + // 中文标签(spatie 中文 slug 为空,链接回退标签名) + Tag::create(['name' => '随笔', 'type' => 'post']); + } + + public function test_chinese_tag_page_is_accessible(): void + { + $tag = Tag::findFromString('随笔', 'post'); + $post = Post::first(); + $post->attachTag($tag); + + $this->get('/tags/'.rawurlencode('随笔').'.shtml')->assertOk()->assertSee('第一篇中文文章'); + // 无后缀版本 301 到 .shtml + $this->get('/tags/'.rawurlencode('随笔'))->assertRedirect('/tags/%E9%9A%8F%E7%AC%94.shtml'); + } + + public function test_chinese_tag_from_sidebar_link(): void + { + $tag = Tag::findFromString('随笔', 'post'); + $post = Post::first(); + $post->attachTag($tag); + + // 首页侧边栏/文章页生成的链接应可访问 + $this->get('/')->assertOk()->assertSee('/tags/%E9%9A%8F%E7%AC%94.shtml'); + $this->get('/posts/'.$post->id.'.shtml')->assertOk()->assertSee('/tags/%E9%9A%8F%E7%AC%94.shtml'); + } + + public function test_post_without_slug_uses_id(): void + { + $post = Post::first(); + $this->assertNull($post->slug); + + $this->get('/posts/'.$post->id.'.shtml')->assertOk()->assertSee('第一篇中文文章'); + $this->get('/posts/'.$post->id)->assertRedirect('/posts/'.$post->id.'.shtml'); + } + + public function test_category_slug_route(): void + { + $this->get('/category/shenghuo-suibi.shtml')->assertOk()->assertSee('第一篇中文文章'); + } +}