1
0

BxPostsDbTest.php 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <?php
  2. use PHPUnit\Framework\Attributes\DataProvider;
  3. /**
  4. * Content-module DB helpers via Posts (SQL construction, no row writes).
  5. */
  6. class BxPostsDbTest extends BxPostsTestCase
  7. {
  8. #[DataProvider('providerForEbsiLike')]
  9. public function testGetEbsiLike($sIn, $sNeedle)
  10. {
  11. $s = $this->bxCallProtected($this->_oModule->_oDb, '_getEbsiLike', $sIn);
  12. $this->assertStringContainsString($sNeedle, $s);
  13. }
  14. static public function providerForEbsiLike()
  15. {
  16. return [
  17. ['hello', '%hello%'],
  18. ['hello world', '%hello%world%'],
  19. ['a b', '%a%b%'],
  20. ];
  21. }
  22. public function testSearchByIdsAddsActiveStatusAndOperators()
  23. {
  24. $oDb = $this->_oModule->_oDb;
  25. $aParams = [
  26. 'search_params' => [
  27. 'title' => ['operator' => 'like', 'value' => 'hello world'],
  28. 'author' => ['operator' => 'in', 'value' => [10, 11]],
  29. 'cat' => ['operator' => '=', 'value' => 3],
  30. ],
  31. 'per_page' => 5,
  32. 'start' => 10,
  33. 'show_all_content' => true,
  34. ];
  35. $aMethod = ['name' => 'getAll', 'params' => [0 => 'query']];
  36. $sSelect = $sJoin = $sWhere = $sOrder = $sLimit = '';
  37. $aArgs = [$aParams, &$aMethod, &$sSelect, &$sJoin, &$sWhere, &$sOrder, &$sLimit];
  38. $this->bxCallProtectedArgs($oDb, '_getEntriesBySearchIds', $aArgs);
  39. $this->assertSame('getColumn', $aMethod['name']);
  40. $this->assertStringContainsString('`bx_posts_posts`.`status`=\'active\'', $sWhere);
  41. $this->assertStringContainsString('`bx_posts_posts`.`status_admin`=\'active\'', $sWhere);
  42. $this->assertStringContainsString('LIKE', $sWhere);
  43. $this->assertStringContainsString('%hello%world%', $sWhere);
  44. $this->assertStringContainsString(' IN (', $sWhere);
  45. $this->assertStringContainsString('`cat` =', $sWhere);
  46. $this->assertSame(3, $aMethod['params'][1]['cat']);
  47. $this->assertNotEmpty($sLimit);
  48. $this->assertStringNotContainsString('INNER JOIN `sys_profiles`', $sJoin);
  49. }
  50. public function testSearchByIdsLikeArrayAndInvalidOperator()
  51. {
  52. $oDb = $this->_oModule->_oDb;
  53. $aParams = [
  54. 'search_params' => [
  55. 'title' => ['operator' => 'like', 'value' => ['one', 'two']],
  56. 'cf' => ['operator' => 'and', 'value' => [1, 3]],
  57. ],
  58. 'show_all_content' => true,
  59. ];
  60. $aMethod = ['name' => 'getAll', 'params' => [0 => 'query']];
  61. $sSelect = $sJoin = $sWhere = $sOrder = $sLimit = '';
  62. $aArgs = [$aParams, &$aMethod, &$sSelect, &$sJoin, &$sWhere, &$sOrder, &$sLimit];
  63. $this->bxCallProtectedArgs($oDb, '_getEntriesBySearchIds', $aArgs);
  64. $this->assertStringContainsString(' OR ', $sWhere);
  65. $this->assertStringContainsString(' & ', $sWhere);
  66. $this->expectException(Exception::class);
  67. $aParamsBad = [
  68. 'search_params' => [
  69. 'title' => ['operator' => 'OR 1=1', 'value' => 'x'],
  70. ],
  71. 'show_all_content' => true,
  72. ];
  73. $aArgsBad = [$aParamsBad, &$aMethod, &$sSelect, &$sJoin, &$sWhere, &$sOrder, &$sLimit];
  74. $this->bxCallProtectedArgs($oDb, '_getEntriesBySearchIds', $aArgsBad);
  75. }
  76. public function testUpdateEntriesByRejectsEmpty()
  77. {
  78. $this->assertFalse($this->_oModule->_oDb->updateEntriesBy([], ['id' => 1]));
  79. $this->assertFalse($this->_oModule->_oDb->updateEntriesBy(['status' => 'hidden'], []));
  80. }
  81. public function testLinksHelpersWhenAttachEnabled()
  82. {
  83. $this->assertTrue($this->_oModule->_oConfig->isAttachLinks());
  84. $this->assertIsArray($this->_oModule->_oDb->getLinks(0));
  85. $this->assertIsArray($this->_oModule->_oDb->getUnusedLinks(0));
  86. }
  87. }