FunctionsTraitTest.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <?php
  2. /**
  3. *
  4. * PHP Version 5.4
  5. *
  6. * CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
  7. * Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
  8. *
  9. * Licensed under The Open Group Test Suite License
  10. * Redistributions of files must retain the above copyright notice.
  11. *
  12. * @copyright Copyright 2005-2013, Cake Software Foundation, Inc. (http://cakefoundation.org)
  13. * @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
  14. * @since CakePHP(tm) v 3.0
  15. * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
  16. */
  17. namespace Cake\Test\TestCase\Database;
  18. use Cake\Database\FunctionsTrait;
  19. use Cake\Database\ValueBinder;
  20. /**
  21. * Tests FunctionsTrait class
  22. *
  23. **/
  24. class FunctionsTraitTest extends \Cake\TestSuite\TestCase {
  25. /**
  26. * Setups a mock for FunctionsTrait
  27. *
  28. * @return void
  29. */
  30. public function setUp() {
  31. parent::setUp();
  32. $this->functions = $this->getObjectForTrait(
  33. '\Cake\Database\FunctionsTrait'
  34. );
  35. }
  36. /**
  37. * Tests generating a generic function call
  38. *
  39. * @return void
  40. */
  41. public function testFunc() {
  42. $function = $this->functions->func('MyFunc', ['b' => 'literal']);
  43. $this->assertInstanceOf('\Cake\Database\Expression\FunctionExpression', $function);
  44. $this->assertEquals('MyFunc', $function->name());
  45. $this->assertEquals('MyFunc(b)', $function->sql(new ValueBinder));
  46. }
  47. /**
  48. * Tests generating a SUM() function
  49. *
  50. * @return void
  51. */
  52. public function testSum() {
  53. $function = $this->functions->sum('total');
  54. $this->assertInstanceOf('\Cake\Database\Expression\FunctionExpression', $function);
  55. $this->assertEquals('SUM(total)', $function->sql(new ValueBinder));
  56. }
  57. /**
  58. * Tests generating a AVG() function
  59. *
  60. * @return void
  61. */
  62. public function testAvg() {
  63. $function = $this->functions->avg('salary');
  64. $this->assertInstanceOf('\Cake\Database\Expression\FunctionExpression', $function);
  65. $this->assertEquals('AVG(salary)', $function->sql(new ValueBinder));
  66. }
  67. /**
  68. * Tests generating a MAX() function
  69. *
  70. * @return void
  71. */
  72. public function testMAX() {
  73. $function = $this->functions->max('created');
  74. $this->assertInstanceOf('\Cake\Database\Expression\FunctionExpression', $function);
  75. $this->assertEquals('MAX(created)', $function->sql(new ValueBinder));
  76. }
  77. /**
  78. * Tests generating a MIN() function
  79. *
  80. * @return void
  81. */
  82. public function testMin() {
  83. $function = $this->functions->min('created');
  84. $this->assertInstanceOf('\Cake\Database\Expression\FunctionExpression', $function);
  85. $this->assertEquals('MIN(created)', $function->sql(new ValueBinder));
  86. }
  87. /**
  88. * Tests generating a COUNT() function
  89. *
  90. * @return void
  91. */
  92. public function testCount() {
  93. $function = $this->functions->count('*');
  94. $this->assertInstanceOf('\Cake\Database\Expression\FunctionExpression', $function);
  95. $this->assertEquals('COUNT(*)', $function->sql(new ValueBinder));
  96. }
  97. /**
  98. * Tests generating a CONCAT() function
  99. *
  100. * @return void
  101. */
  102. public function testConcat() {
  103. $function = $this->functions->concat(['title' => 'literal', ' is a string']);
  104. $this->assertInstanceOf('\Cake\Database\Expression\FunctionExpression', $function);
  105. $this->assertEquals("CONCAT(title, :c0)", $function->sql(new ValueBinder));
  106. }
  107. /**
  108. * Tests generating a COALESCE() function
  109. *
  110. * @return void
  111. */
  112. public function testCoalesce() {
  113. $function = $this->functions->coalesce(['NULL' => 'literal', '1', '2']);
  114. $this->assertInstanceOf('\Cake\Database\Expression\FunctionExpression', $function);
  115. $this->assertEquals("COALESCE(NULL, :c0, :c1)", $function->sql(new ValueBinder));
  116. }
  117. /**
  118. * Tests generating a NOW(), CURRENT_TIME() and CURRENT_DATE() function
  119. *
  120. * @return void
  121. */
  122. public function testNow() {
  123. $function = $this->functions->now();
  124. $this->assertInstanceOf('\Cake\Database\Expression\FunctionExpression', $function);
  125. $this->assertEquals("NOW()", $function->sql(new ValueBinder));
  126. $function = $this->functions->now('date');
  127. $this->assertInstanceOf('\Cake\Database\Expression\FunctionExpression', $function);
  128. $this->assertEquals("CURRENT_DATE()", $function->sql(new ValueBinder));
  129. $function = $this->functions->now('time');
  130. $this->assertInstanceOf('\Cake\Database\Expression\FunctionExpression', $function);
  131. $this->assertEquals("CURRENT_TIME()", $function->sql(new ValueBinder));
  132. }
  133. }