Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #6 from cakephp/2.x
sync with 2.x upstream
  • Loading branch information
bancer committed Feb 5, 2018
2 parents 92caf71 + df9c7fd commit f0abce5
Show file tree
Hide file tree
Showing 22 changed files with 143 additions and 25 deletions.
7 changes: 2 additions & 5 deletions .travis.yml
Expand Up @@ -41,15 +41,13 @@ matrix:

- php: 7.2
env: DB=mysql PHPUNIT=5.7.19
allow_failures:
exclude:
- php: 7.2
env: DB=mysql

- php: 7.2
env: DB=mysql PHPUNIT=5.7.19


before_script:
- if [[ ${TRAVIS_PHP_VERSION:0:3} == "7.2" ]] ; then pear config-set preferred_state snapshot && yes "" | pecl install mcrypt ; fi
- composer require "phpunit/phpunit=$PHPUNIT"
- echo "require_once 'vendors/autoload.php';" >> app/Config/bootstrap.php
- sudo locale-gen de_DE
Expand All @@ -62,7 +60,6 @@ before_script:
- sh -c "if [ '$DB' = 'pgsql' ]; then psql -c 'CREATE SCHEMA test3;' -U postgres -d cakephp_test; fi"
- chmod -R 777 ./app/tmp
- if [[ ${TRAVIS_PHP_VERSION:0:3} == "5.3" ]] ; then pecl install timezonedb ; fi
- if [[ ${TRAVIS_PHP_VERSION:0:3} == "7.2" ]] ; then pecl install mcrypt ; fi
- sh -c "if [ '$PHPCS' = '1' ]; then composer require 'cakephp/cakephp-codesniffer:1.*'; fi"
- sh -c "if [ '$PHPCS' = '1' ]; then vendors/bin/phpcs --config-set installed_paths vendors/cakephp/cakephp-codesniffer; fi"
- echo "extension = memcached.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Expand Up @@ -22,7 +22,7 @@
"ext-mcrypt": "*"
},
"require-dev": {
"phpunit/phpunit": "<6.0.0",
"phpunit/phpunit": "^3.7",
"cakephp/cakephp-codesniffer": "^1.0.0"
},
"config": {
Expand Down
2 changes: 1 addition & 1 deletion lib/Cake/Cache/CacheEngine.php
Expand Up @@ -181,7 +181,7 @@ public function key($key) {

$prefix = '';
if (!empty($this->_groupPrefix)) {
$prefix = vsprintf($this->_groupPrefix, $this->groups());
$prefix = md5(implode('_', $this->groups()));
}

$key = preg_replace('/[\s]+/', '_', strtolower(trim(str_replace(array(DS, '/', '.'), '_', strval($key)))));
Expand Down
6 changes: 6 additions & 0 deletions lib/Cake/Console/Command/Task/ControllerTask.php
Expand Up @@ -331,6 +331,12 @@ public function bakeActions($controllerName, $admin = null, $wannaUseSession = t
public function bake($controllerName, $actions = '', $helpers = null, $components = null) {
$this->out("\n" . __d('cake_console', 'Baking controller class for %s...', $controllerName), 1, Shell::QUIET);

if ($helpers === null) {
$helpers = array();
}
if ($components === null) {
$components = array();
}
$isScaffold = ($actions === 'scaffold') ? true : false;

$this->Template->set(array(
Expand Down
2 changes: 1 addition & 1 deletion lib/Cake/I18n/Multibyte.php
Expand Up @@ -554,7 +554,7 @@ public static function strtolower($string) {

if (!empty($keys)) {
foreach ($keys as $key => $value) {
if ($keys[$key]['upper'] == $char && count($keys[$key]['lower'][0]) === 1) {
if ($keys[$key]['upper'] == $char && count($keys[$key]['lower']) > 0) {
$lowerCase[] = $keys[$key]['lower'][0];
$matched = true;
break 1;
Expand Down
6 changes: 6 additions & 0 deletions lib/Cake/Model/Datasource/CakeSession.php
Expand Up @@ -552,6 +552,12 @@ protected static function _configureSession() {

if (!empty($sessionConfig['handler'])) {
$sessionConfig['ini']['session.save_handler'] = 'user';

// In PHP7.2.0+ session.save_handler can't be set to 'user' by the user.
// https://github.com/php/php-src/commit/a93a51c3bf4ea1638ce0adc4a899cb93531b9f0d
if (version_compare(PHP_VERSION, '7.2.0', '>=')) {
unset($sessionConfig['ini']['session.save_handler']);
}
} elseif (!empty($sessionConfig['session.save_path']) && Configure::read('debug')) {
if (!is_dir($sessionConfig['session.save_path'])) {
mkdir($sessionConfig['session.save_path'], 0775, true);
Expand Down
4 changes: 4 additions & 0 deletions lib/Cake/Model/Datasource/Database/Sqlserver.php
Expand Up @@ -302,6 +302,10 @@ public function fields(Model $model, $alias = null, $fields = array(), $quote =
$prepend = 'DISTINCT ';
$fields[$i] = trim(str_replace('DISTINCT', '', $fields[$i]));
}
if (strpos($fields[$i], 'COUNT(DISTINCT') !== false) {
$prepend = 'COUNT(DISTINCT ';
$fields[$i] = trim(str_replace('COUNT(DISTINCT', '', $this->_quoteFields($fields[$i])));
}

if (!preg_match('/\s+AS\s+/i', $fields[$i])) {
if (substr($fields[$i], -1) === '*') {
Expand Down
2 changes: 1 addition & 1 deletion lib/Cake/Model/Datasource/DboSource.php
Expand Up @@ -470,7 +470,7 @@ protected function _execute($sql, $params = array(), $prepareOptions = array())
$query = $this->_connection->prepare($sql, $prepareOptions);
$query->setFetchMode(PDO::FETCH_LAZY);
if (!$query->execute($params)) {
$this->_results = $query;
$this->_result = $query;
$query->closeCursor();
return false;
}
Expand Down
Expand Up @@ -415,6 +415,7 @@ public function tearDown() {
TestAuthComponent::clearUser();
$this->Auth->Session->delete('Auth');
$this->Auth->Session->delete('Message.auth');
$this->Auth->Session->destroy();
unset($this->Controller, $this->Auth);
}

Expand Down
Expand Up @@ -120,11 +120,11 @@ class ControllerPaginateModel extends CakeTestModel {
/**
* paginate method
*
* @return bool
* @return array
*/
public function paginate($conditions, $fields, $order, $limit, $page, $recursive, $extra) {
$this->extra = $extra;
return true;
return array(true);
}

/**
Expand Down
Expand Up @@ -186,6 +186,7 @@ public function setUp() {
public function tearDown() {
parent::tearDown();
$this->Controller->Session->delete('_Token');
$this->Controller->Session->destroy();
unset($this->Controller->Security);
unset($this->Controller->Component);
unset($this->Controller);
Expand Down
2 changes: 2 additions & 0 deletions lib/Cake/Test/Case/Controller/ScaffoldTest.php
Expand Up @@ -17,6 +17,7 @@
*/

App::uses('Router', 'Routing');
App::uses('CakeSession', 'Model/Datasource');
App::uses('Controller', 'Controller');
App::uses('Scaffold', 'Controller');
App::uses('ScaffoldView', 'View');
Expand Down Expand Up @@ -175,6 +176,7 @@ public function setUp() {
*/
public function tearDown() {
parent::tearDown();
CakeSession::destroy();
unset($this->Controller);
}

Expand Down
1 change: 1 addition & 0 deletions lib/Cake/Test/Case/I18n/I18nTest.php
Expand Up @@ -51,6 +51,7 @@ public function tearDown() {
parent::tearDown();

Cache::delete('object_map', '_cake_core_');
CakeSession::destroy();
App::build();
CakePlugin::unload();
}
Expand Down
4 changes: 2 additions & 2 deletions lib/Cake/Test/Case/Model/ConnectionManagerTest.php
Expand Up @@ -64,7 +64,7 @@ public function testGetDataSource() {

ConnectionManager::create($name, $config);
$connections = ConnectionManager::enumConnectionObjects();
$this->assertTrue((bool)(count(array_keys($connections) >= 1)));
$this->assertTrue(count(array_keys($connections)) >= 1);

$source = ConnectionManager::getDataSource('test_get_datasource');
$this->assertTrue(is_object($source));
Expand Down Expand Up @@ -239,7 +239,7 @@ public function testCreateDataSourceWithIntegrationTests() {
$name = 'test_created_connection';

$connections = ConnectionManager::enumConnectionObjects();
$this->assertTrue((bool)(count(array_keys($connections) >= 1)));
$this->assertTrue(count(array_keys($connections)) >= 1);

$source = ConnectionManager::getDataSource('test');
$this->assertTrue(is_object($source));
Expand Down
Expand Up @@ -383,6 +383,10 @@ public function testDistinctFields() {
$result = $this->db->fields($this->model, null, 'DISTINCT Car.country_code');
$expected = array('DISTINCT [Car].[country_code] AS [Car__country_code]');
$this->assertEquals($expected, $result);

$result = $this->db->fields($this->model, null, 'COUNT(DISTINCT Car.country_code)');
$expected = array('COUNT(DISTINCT [Car].[country_code]) AS [Car__country_code]');
$this->assertEquals($expected, $result);
}

/**
Expand Down
12 changes: 8 additions & 4 deletions lib/Cake/Test/Case/Model/ModelWriteTest.php
Expand Up @@ -3367,7 +3367,9 @@ public function testSaveAllHabtm() {
array(
'comment' => 'Article comment',
'user_id' => 1
)));
)
)
);
$Article = new Article();
$result = $Article->saveAll($data);
$this->assertFalse(empty($result));
Expand All @@ -3376,7 +3378,7 @@ public function testSaveAllHabtm() {
$this->assertEquals(2, count($result['Tag']));
$this->assertEquals('tag1', $result['Tag'][0]['tag']);
$this->assertEquals(1, count($result['Comment']));
$this->assertEquals(1, count($result['Comment'][0]['comment']));
$this->assertEquals('Article comment', $result['Comment'][0]['comment']);
}

/**
Expand Down Expand Up @@ -5647,7 +5649,9 @@ public function testSaveAssociatedHabtm() {
array(
'comment' => 'Article comment',
'user_id' => 1
)));
)
)
);
$Article = new Article();
$result = $Article->saveAssociated($data);
$this->assertFalse(empty($result));
Expand All @@ -5656,7 +5660,7 @@ public function testSaveAssociatedHabtm() {
$this->assertEquals(2, count($result['Tag']));
$this->assertEquals('tag1', $result['Tag'][0]['tag']);
$this->assertEquals(1, count($result['Comment']));
$this->assertEquals(1, count($result['Comment'][0]['comment']));
$this->assertEquals('Article comment', $result['Comment'][0]['comment']);
}

/**
Expand Down
44 changes: 44 additions & 0 deletions lib/Cake/Test/Case/TestSuite/ControllerTestCaseTest.php
Expand Up @@ -79,6 +79,12 @@ class PostsController extends AppController {
public $components = array(
'RequestHandler',
'Email',
'AliasedEmail' => array(
'className' => 'Email',
),
'AliasedPluginEmail' => array(
'className' => 'TestPlugin.TestPluginEmail',
),
'Auth'
);
}
Expand Down Expand Up @@ -270,6 +276,44 @@ public function testGenerateWithPlugin() {
$this->assertFalse($Tests->TestPluginComment->save(array()));
}

/**
* Tests ControllerTestCase::generate() using aliased component
*
* @return void
*/
public function testGenerateWithMockedAliasedComponent() {
$Posts = $this->Case->generate('Posts', array(
'components' => array(
'AliasedEmail' => array('send')
)
));
$Posts->AliasedEmail->expects($this->once())
->method('send')
->will($this->returnValue(true));

$this->assertInstanceOf('EmailComponent', $Posts->AliasedEmail);
$this->assertTrue($Posts->AliasedEmail->send());
}

/**
* Tests ControllerTestCase::generate() using aliased plugin component
*
* @return void
*/
public function testGenerateWithMockedAliasedPluginComponent() {
$Posts = $this->Case->generate('Posts', array(
'components' => array(
'AliasedPluginEmail' => array('send')
)
));
$Posts->AliasedPluginEmail->expects($this->once())
->method('send')
->will($this->returnValue(true));

$this->assertInstanceOf('TestPluginEmailComponent', $Posts->AliasedPluginEmail);
$this->assertTrue($Posts->AliasedPluginEmail->send());
}

/**
* Tests testAction
*
Expand Down
13 changes: 13 additions & 0 deletions lib/Cake/Test/Case/View/Helper/SessionHelperTest.php
Expand Up @@ -87,6 +87,7 @@ public function setUp() {
public function tearDown() {
$_SESSION = array();
unset($this->View, $this->Session);
CakeSession::destroy();
CakePlugin::unload();
parent::tearDown();
}
Expand Down Expand Up @@ -149,6 +150,18 @@ public function testFlash() {
$this->assertFalse($this->Session->check('Message.bare'));
}

/**
* Test the flash method works without any params being passed
*
* @return void
*/
public function testFlashWithNoParams() {
$result = $this->Session->flash();
$expected = '<div id="flashMessage" class="message">This is a calling</div>';
$this->assertEquals($expected, $result);
$this->assertFalse($this->Session->check('Message.flash'));
}

/**
* test flash() with the attributes.
*
Expand Down
@@ -0,0 +1,10 @@
<?php
App::uses('EmailComponent', 'Controller/Component');

/**
* TestPluginEmailComponent
*
* @package Cake.Test.TestApp.Plugin.TestPlugin.Controller.Component
*/
class TestPluginEmailComponent extends EmailComponent {
}
14 changes: 11 additions & 3 deletions lib/Cake/TestSuite/ControllerTestCase.php
Expand Up @@ -388,19 +388,27 @@ public function generate($controller, $mocks = array()) {
if ($methods === true) {
$methods = array();
}
$config = isset($controllerObj->components[$component]) ? $controllerObj->components[$component] : array();
if (isset($config['className'])) {
$alias = $component;
$component = $config['className'];
}
list($plugin, $name) = pluginSplit($component, true);
if (!isset($alias)) {
$alias = $name;
}
$componentClass = $name . 'Component';
App::uses($componentClass, $plugin . 'Controller/Component');
if (!class_exists($componentClass)) {
throw new MissingComponentException(array(
'class' => $componentClass
));
}
$config = isset($controllerObj->components[$component]) ? $controllerObj->components[$component] : array();
/** @var Component|PHPUnit_Framework_MockObject_MockObject $componentObj */
$componentObj = $this->getMock($componentClass, $methods, array($controllerObj->Components, $config));
$controllerObj->Components->set($name, $componentObj);
$controllerObj->Components->enable($name);
$controllerObj->Components->set($alias, $componentObj);
$controllerObj->Components->enable($alias);
unset($alias);
}

$controllerObj->constructClasses();
Expand Down

0 comments on commit f0abce5

Please sign in to comment.