ArticleControllerTest.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. <?php
  2. namespace internship\controller;
  3. use PHPUnit\Framework\TestCase;
  4. use n2n\test\TestEnv;
  5. use internship\test\ArticleTestEnv;
  6. use util\GeneralTestEnv;
  7. use n2n\web\http\PageNotFoundException;
  8. use internship\bo\Article;
  9. use n2n\web\http\BadRequestException;
  10. class ArticleControllerTest extends TestCase {
  11. private int $article1Id;
  12. private int $article2Id;
  13. private int $article3Id;
  14. function setUp(): void {
  15. GeneralTestEnv::tearDown();
  16. $tx = TestEnv::createTransaction();
  17. $article1 = ArticleTestEnv::setUpArticle('Title 1', 'Loren ipsum 1', 'news');
  18. $article2 = ArticleTestEnv::setUpArticle('Title 2', 'Loren ipsum 2', 'teaser');
  19. $article3 = ArticleTestEnv::setUpArticle('Title 3', 'Loren ipsum 3', 'news');
  20. $tx->commit();
  21. $this->article1Id = $article1->getId();
  22. $this->article2Id = $article2->getId();
  23. $this->article3Id = $article3->getId();
  24. }
  25. function testGetDoArticles() {
  26. $response = TestEnv::http()->newRequest()
  27. ->get(['api', 'articles'])
  28. ->exec();
  29. $articleStruct = $response->parseJson();
  30. $this->assertCount(3, $articleStruct);
  31. $this->assertEquals('Title 3', $articleStruct[0]['title']);
  32. $this->assertEquals('Title 2', $articleStruct[1]['title']);
  33. $this->assertEquals('Title 1', $articleStruct[2]['title']);
  34. }
  35. function testGetDoArticlesWithCategory() {
  36. $response = TestEnv::http()->newRequest()
  37. ->get(['api', 'articles', 'teaser'])
  38. ->exec();
  39. $articleStruct = $response->parseJson();
  40. $this->assertCount(1, $articleStruct);
  41. $this->assertEquals('Title 2', $articleStruct[0]['title']);
  42. }
  43. function testGetDoArticlesWithCategory2() {
  44. $response = TestEnv::http()->newRequest()
  45. ->get(['api', 'articles', 'news'])
  46. ->exec();
  47. $articleStruct = $response->parseJson();
  48. $this->assertCount(2, $articleStruct);
  49. $this->assertEquals('Title 3', $articleStruct[0]['title']);
  50. $this->assertEquals('Title 1', $articleStruct[1]['title']);
  51. }
  52. function testGetDoArticlesExpectExceptionBecauseCategoryNotFound() {
  53. $this->expectException(PageNotFoundException::class);
  54. $this->expectExceptionMessage('Category abc not found');
  55. TestEnv::http()->newRequest()
  56. ->get(['api', 'articles', 'abc'])
  57. ->exec();
  58. }
  59. function testGetDoArticle() {
  60. $response = TestEnv::http()->newRequest()
  61. ->get(['api', 'article', $this->article1Id])
  62. ->exec();
  63. $articleStruct = $response->parseJson();
  64. $this->assertCount(4, $articleStruct);
  65. $this->assertEquals('Title 1', $articleStruct['title']);
  66. $this->assertEquals('Loren ipsum 1', $articleStruct['text']);
  67. $this->assertEquals('news', $articleStruct['categoryName']);
  68. }
  69. function testGetDoArticleExpectExceptionBecauseArticleNotFound() {
  70. $this->expectException(PageNotFoundException::class);
  71. $this->expectExceptionMessage('Article not found with ID:25436857');
  72. TestEnv::http()->newRequest()
  73. ->get(['api', 'article', 25436857])
  74. ->exec();
  75. }
  76. function testPostDoArticle() {
  77. $response = TestEnv::http()->newRequest()
  78. ->post(['api', 'article'])
  79. ->bodyJson([
  80. 'title' => 'title1',
  81. 'categoryName' => 'sport',
  82. 'text' => 'text1'
  83. ])
  84. ->exec();
  85. $articleStruct = $response->parseJson();
  86. $this->assertEquals(4,TestEnv::emUtil()->count(Article::class));
  87. $this->assertCount(4, $articleStruct);
  88. $this->assertEquals('title1', $articleStruct['title']);
  89. $this->assertEquals('text1', $articleStruct['text']);
  90. $this->assertEquals('sport', $articleStruct['categoryName']);
  91. }
  92. function testPostDoArticleExpectExceptionBecauseCategoryNotFound() {
  93. $this->expectException(BadRequestException::class);
  94. $this->expectExceptionMessage('The Category must be international, national or sport');
  95. TestEnv::http()->newRequest()
  96. ->post(['api', 'article'])
  97. ->bodyJson([
  98. 'title' => 'title1',
  99. 'categoryName' => 'abc',
  100. 'text' => 'text1'
  101. ])
  102. ->exec();
  103. }
  104. function testPutDoArticle() {
  105. $response = TestEnv::http()->newRequest()
  106. ->put(['api', 'article',$this->article1Id])
  107. ->bodyJson([
  108. 'title' => 'title1',
  109. 'categoryName' => 'sport',
  110. 'text' => 'text1'
  111. ])
  112. ->exec();
  113. $articleStruct = $response->parseJson();
  114. $this->assertCount(4, $articleStruct);
  115. $this->assertEquals('title1', $articleStruct['title']);
  116. $this->assertEquals('text1', $articleStruct['text']);
  117. $this->assertEquals('sport', $articleStruct['categoryName']);
  118. }
  119. function testPutDoArticle1() {
  120. $response = TestEnv::http()->newRequest()
  121. ->put(['api', 'article',$this->article1Id])
  122. ->bodyJson([
  123. 'title' => 'title1',
  124. ])
  125. ->exec();
  126. $articleStruct = $response->parseJson();
  127. $this->assertCount(4, $articleStruct);
  128. $this->assertEquals('title1', $articleStruct['title']);
  129. $this->assertEquals('Loren ipsum 1', $articleStruct['text']);
  130. $this->assertEquals('news', $articleStruct['categoryName']);
  131. }
  132. function testPutDoArticle2() {
  133. $response = TestEnv::http()->newRequest()
  134. ->put(['api', 'article',$this->article1Id])
  135. ->bodyJson([
  136. 'categoryName' => 'sport',
  137. ])
  138. ->exec();
  139. $articleStruct = $response->parseJson();
  140. $this->assertCount(4, $articleStruct);
  141. $this->assertEquals('Title 1', $articleStruct['title']);
  142. $this->assertEquals('Loren ipsum 1', $articleStruct['text']);
  143. $this->assertEquals('sport', $articleStruct['categoryName']);
  144. }
  145. function testPutDoArticle3() {
  146. $response = TestEnv::http()->newRequest()
  147. ->put(['api', 'article',$this->article1Id])
  148. ->bodyJson([
  149. 'text' => 'text1',
  150. ])
  151. ->exec();
  152. $articleStruct = $response->parseJson();
  153. $this->assertCount(4, $articleStruct);
  154. $this->assertEquals('Title 1', $articleStruct['title']);
  155. $this->assertEquals('text1', $articleStruct['text']);
  156. $this->assertEquals('news', $articleStruct['categoryName']);
  157. }
  158. function testPutDoArticleExpectExceptionBecauseCategoryNotFound() {
  159. $this->expectException(BadRequestException::class);
  160. $this->expectExceptionMessage('The Category must be international, national or sport');
  161. TestEnv::http()->newRequest()
  162. ->put(['api', 'article',$this->article1Id])
  163. ->bodyJson([
  164. 'title' => 'title1',
  165. 'categoryName' => 'abc',
  166. 'text' => 'text1'
  167. ])
  168. ->exec();
  169. }
  170. function testPutDoArticleExpectExceptionBecauseArticleNotFound() {
  171. $this->expectException(PageNotFoundException::class);
  172. $this->expectExceptionMessage('Article not found');
  173. TestEnv::http()->newRequest()
  174. ->put(['api', 'article', 25436857])
  175. ->bodyJson([
  176. 'title' => 'title1',
  177. 'categoryName' => 'abc',
  178. 'text' => 'text1'
  179. ])
  180. ->exec();
  181. }
  182. function testDeleteDoArticle() {
  183. $response = TestEnv::http()->newRequest()
  184. ->delete(['api', 'article',$this->article1Id])
  185. ->exec();
  186. $tx = TestEnv::createTransaction();
  187. $this->assertEquals(2,TestEnv::temUtil()->count(Article::class));
  188. $tx->commit();
  189. }
  190. }