QuestionDetailPageUnitTest.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <?php
  2. namespace Tests\Unit;
  3. use App\Filament\Pages\QuestionDetailPage;
  4. use Tests\TestCase;
  5. class QuestionDetailPageUnitTest extends TestCase
  6. {
  7. /**
  8. * 测试难度等级计算
  9. * Test Case ID: TC-QD-UNIT-001
  10. */
  11. public function test_get_difficulty_label(): void
  12. {
  13. $page = new QuestionDetailPage();
  14. // 测试不同难度值对应的标签
  15. $testCases = [
  16. ['difficulty' => 0.2, 'expected' => '简单'],
  17. ['difficulty' => 0.3, 'expected' => '简单'],
  18. ['difficulty' => 0.4, 'expected' => '中等'],
  19. ['difficulty' => 0.5, 'expected' => '中等'],
  20. ['difficulty' => 0.6, 'expected' => '中等'],
  21. ['difficulty' => 0.7, 'expected' => '困难'],
  22. ['difficulty' => 0.8, 'expected' => '困难'],
  23. ['difficulty' => 0.9, 'expected' => '困难'],
  24. ];
  25. foreach ($testCases as $case) {
  26. $page->questionData = ['difficulty' => $case['difficulty']];
  27. $this->assertEquals($case['expected'], $page->getDifficultyLabel());
  28. }
  29. }
  30. /**
  31. * 测试难度颜色类
  32. * Test Case ID: TC-QD-UNIT-002
  33. */
  34. public function test_get_difficulty_color(): void
  35. {
  36. $page = new QuestionDetailPage();
  37. // 测试不同难度值对应的颜色类
  38. $testCases = [
  39. ['difficulty' => 0.2, 'expected' => 'bg-green-100 text-green-700'],
  40. ['difficulty' => 0.3, 'expected' => 'bg-green-100 text-green-700'],
  41. ['difficulty' => 0.4, 'expected' => 'bg-yellow-100 text-yellow-700'],
  42. ['difficulty' => 0.5, 'expected' => 'bg-yellow-100 text-yellow-700'],
  43. ['difficulty' => 0.6, 'expected' => 'bg-yellow-100 text-yellow-700'],
  44. ['difficulty' => 0.7, 'expected' => 'bg-red-100 text-red-700'],
  45. ['difficulty' => 0.8, 'expected' => 'bg-red-100 text-red-700'],
  46. ['difficulty' => 0.9, 'expected' => 'bg-red-100 text-red-700'],
  47. ];
  48. foreach ($testCases as $case) {
  49. $page->questionData = ['difficulty' => $case['difficulty']];
  50. $this->assertEquals($case['expected'], $page->getDifficultyColor());
  51. }
  52. }
  53. /**
  54. * 测试默认难度值
  55. * Test Case ID: TC-QD-UNIT-003
  56. */
  57. public function test_default_difficulty(): void
  58. {
  59. $page = new QuestionDetailPage();
  60. // 测试没有难度数据时的默认值
  61. $page->questionData = [];
  62. $this->assertEquals('中等', $page->getDifficultyLabel());
  63. $this->assertEquals('bg-yellow-100 text-yellow-700', $page->getDifficultyColor());
  64. }
  65. /**
  66. * 测试题库模式标题生成
  67. * Test Case ID: TC-QD-UNIT-004
  68. */
  69. public function test_get_title_for_bank_question(): void
  70. {
  71. $page = new QuestionDetailPage();
  72. $page->sourceType = 'bank';
  73. $page->questionData = [
  74. 'stem' => '这是一道用于测试的数学题目,它比较长,需要截断显示'
  75. ];
  76. $title = $page->getTitle();
  77. $this->assertStringContainsString('题库详情', $title);
  78. $this->assertStringContainsString('...', $title);
  79. }
  80. /**
  81. * 测试错题模式标题生成
  82. * Test Case ID: TC-QD-UNIT-005
  83. */
  84. public function test_get_title_for_mistake(): void
  85. {
  86. $page = new QuestionDetailPage();
  87. $page->sourceType = 'mistake';
  88. $page->mistakeData = [
  89. 'question' => [
  90. 'question_number' => '第5题'
  91. ]
  92. ];
  93. $page->mistakeId = 'test-mid-123';
  94. $title = $page->getTitle();
  95. $this->assertStringContainsString('错题分析', $title);
  96. $this->assertStringContainsString('第5题', $title);
  97. }
  98. /**
  99. * 测试默认标题
  100. * Test Case ID: TC-QD-UNIT-006
  101. */
  102. public function test_get_default_title(): void
  103. {
  104. $page = new QuestionDetailPage();
  105. $page->sourceType = 'unknown';
  106. $title = $page->getTitle();
  107. $this->assertEquals('题目详情', $title);
  108. }
  109. /**
  110. * 测试题库模式的面包屑导航
  111. * Test Case ID: TC-QD-UNIT-007
  112. */
  113. public function test_get_breadcrumbs_for_bank(): void
  114. {
  115. $page = new QuestionDetailPage();
  116. $page->sourceType = 'bank';
  117. $breadcrumbs = $page->getBreadcrumbs();
  118. $this->assertCount(3, $breadcrumbs);
  119. $this->assertEquals('首页', $breadcrumbs[0]['name']);
  120. $this->assertEquals('题库管理', $breadcrumbs[1]['name']);
  121. $this->assertEquals(url('/admin'), $breadcrumbs[0]['url']);
  122. $this->assertEquals(url('/admin/question-management'), $breadcrumbs[1]['url']);
  123. $this->assertEmpty($breadcrumbs[2]['url']);
  124. }
  125. /**
  126. * 测试错题模式的面包屑导航
  127. * Test Case ID: TC-QD-UNIT-008
  128. */
  129. public function test_get_breadcrumbs_for_mistake(): void
  130. {
  131. $page = new QuestionDetailPage();
  132. $page->sourceType = 'mistake';
  133. $breadcrumbs = $page->getBreadcrumbs();
  134. $this->assertCount(3, $breadcrumbs);
  135. $this->assertEquals('首页', $breadcrumbs[0]['name']);
  136. $this->assertEquals('错题本', $breadcrumbs[1]['name']);
  137. $this->assertEquals(url('/admin'), $breadcrumbs[0]['url']);
  138. $this->assertEquals(url('/admin/mistake-book'), $breadcrumbs[1]['url']);
  139. $this->assertEmpty($breadcrumbs[2]['url']);
  140. }
  141. /**
  142. * 测试知识点名称返回(当数据为空时)
  143. * Test Case ID: TC-QD-UNIT-009
  144. */
  145. public function test_get_knowledge_point_name_empty(): void
  146. {
  147. $page = new QuestionDetailPage();
  148. $page->questionData = [];
  149. $page->mistakeData = [];
  150. $name = $page->getKnowledgePointName();
  151. $this->assertEquals('未知知识点', $name);
  152. }
  153. /**
  154. * 测试从题库数据获取知识点名称
  155. * Test Case ID: TC-QD-UNIT-010
  156. */
  157. public function test_get_knowledge_point_name_from_question_data(): void
  158. {
  159. $page = new QuestionDetailPage();
  160. $page->questionData = ['kp_code' => 'P01'];
  161. $name = $page->getKnowledgePointName();
  162. // 知识点代码应该被转换为实际名称
  163. $this->assertEquals('整式的概念', $name);
  164. }
  165. /**
  166. * 测试从错题数据获取知识点名称
  167. * Test Case ID: TC-QD-UNIT-011
  168. */
  169. public function test_get_knowledge_point_name_from_mistake_data(): void
  170. {
  171. $page = new QuestionDetailPage();
  172. $page->mistakeData = [
  173. 'question' => ['kp_code' => 'P02']
  174. ];
  175. $name = $page->getKnowledgePointName();
  176. $this->assertEquals('同类项合并', $name);
  177. }
  178. /**
  179. * 测试题库数据优先级高于错题数据
  180. * Test Case ID: TC-QD-UNIT-012
  181. */
  182. public function test_question_data_priority_over_mistake_data(): void
  183. {
  184. $page = new QuestionDetailPage();
  185. $page->questionData = ['kp_code' => 'P01'];
  186. $page->mistakeData = [
  187. 'question' => ['kp_code' => 'P02']
  188. ];
  189. $name = $page->getKnowledgePointName();
  190. // 题库数据优先级更高
  191. $this->assertEquals('整式的概念', $name);
  192. }
  193. }