From 4bd43c1c903e8b24960d15a4f0177db29c83c75b Mon Sep 17 00:00:00 2001 From: Aday Talavera Date: Mon, 21 Dec 2015 17:45:13 +0000 Subject: [PATCH 1/2] Fix bug with null values in scope --- src/Model/Behavior/SequenceBehavior.php | 8 +++ .../Model/Behavior/SequenceBehaviorTest.php | 54 +++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/src/Model/Behavior/SequenceBehavior.php b/src/Model/Behavior/SequenceBehavior.php index 5cf46e7..e9bce33 100644 --- a/src/Model/Behavior/SequenceBehavior.php +++ b/src/Model/Behavior/SequenceBehavior.php @@ -136,6 +136,14 @@ public function beforeSave(Event $event, Entity $entity, ArrayObject $options) if (count($newScope) !== count($config['scope'])) { return; } + + // Modify where clauses when NULL values are used + foreach ($newScope as $field => $value) { + if (is_null($value)) { + $newScope[$field . ' IS'] = $value; + unset($newScope[$field]); + } + } } $orderField = $config['order']; diff --git a/tests/TestCase/Model/Behavior/SequenceBehaviorTest.php b/tests/TestCase/Model/Behavior/SequenceBehaviorTest.php index d58f574..fef3517 100644 --- a/tests/TestCase/Model/Behavior/SequenceBehaviorTest.php +++ b/tests/TestCase/Model/Behavior/SequenceBehaviorTest.php @@ -124,6 +124,60 @@ public function testSaveScoped() $this->assertOrder([6, 2, 7, 8, 17, 9, 10, 16], $GroupedItems, ['group_field' => 2]); $this->assertOrder([11, 12, 13, 14, 15], $GroupedItems, ['group_field' => 3]); } + + /** + * [testSaveNullScoped description]. + * + * @return void + */ + public function testSaveNullScoped() + { + $GroupedItems = TableRegistry::get('GroupedItems', [ + 'table' => 'grouped_items', + 'alias' => 'GroupedItems', + 'className' => 'Sequence\Test\TestCase\Model\Behavior\GroupedItems', + ]); + + // Test group 2 (group_field = 2) as group NULL (group_field = null) + $GroupedItems->updateAll(['group_field' => null], ['group_field' => 2]); + + // Testing saving a new record (order not specified) sets order to highest + 1 + $entity = $GroupedItems->newEntity([ + 'name' => 'Item F', + 'group_field' => null, + ]); + $entity = $GroupedItems->save($entity); + $this->assertOrder([6, 7, 8, 9, 10, (int)$entity->id], $GroupedItems, ['group_field IS' => null]); + $this->assertOrder([1, 2, 3, 4, 5], $GroupedItems, ['group_field' => 1]); + $this->assertOrder([11, 12, 13, 14, 15], $GroupedItems, ['group_field' => 3]); + + // Test saving new record with order specified + $entity = $GroupedItems->newEntity([ + 'name' => 'Item G', + 'group_field' => null, + 'position' => 3, + ]); + $entity = $GroupedItems->save($entity); + $this->assertOrder([6, 7, 8, 17, 9, 10, 16], $GroupedItems, ['group_field IS' => null]); + $this->assertOrder([1, 2, 3, 4, 5], $GroupedItems, ['group_field' => 1]); + $this->assertOrder([11, 12, 13, 14, 15], $GroupedItems, ['group_field' => 3]); + + // Test editing record with new order + $entity = $GroupedItems->get(4); + $entity->position = 2; + $entity = $GroupedItems->save($entity); + $this->assertOrder([1, 2, 4, 3, 5], $GroupedItems, ['group_field' => 1]); + $this->assertOrder([6, 7, 8, 17, 9, 10, 16], $GroupedItems, ['group_field IS' => null]); + $this->assertOrder([11, 12, 13, 14, 15], $GroupedItems, ['group_field' => 3]); + + // Test changing group + $entity = $GroupedItems->get(2); + $entity->set('group_field', null); + $entity = $GroupedItems->save($entity); + $this->assertOrder([1, 4, 3, 5], $GroupedItems, ['group_field' => 1]); + $this->assertOrder([6, 2, 7, 8, 17, 9, 10, 16], $GroupedItems, ['group_field IS' => null]); + $this->assertOrder([11, 12, 13, 14, 15], $GroupedItems, ['group_field' => 3]); + } /** * [testSaveKeyword description]. From 2f97ac5a071665f883c0adbde4f6dca2dacd3041 Mon Sep 17 00:00:00 2001 From: Aday Talavera Date: Tue, 22 Dec 2015 09:43:06 +0000 Subject: [PATCH 2/2] Fix whitespace StyleCI issue --- tests/TestCase/Model/Behavior/SequenceBehaviorTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/TestCase/Model/Behavior/SequenceBehaviorTest.php b/tests/TestCase/Model/Behavior/SequenceBehaviorTest.php index fef3517..f0def9e 100644 --- a/tests/TestCase/Model/Behavior/SequenceBehaviorTest.php +++ b/tests/TestCase/Model/Behavior/SequenceBehaviorTest.php @@ -124,7 +124,7 @@ public function testSaveScoped() $this->assertOrder([6, 2, 7, 8, 17, 9, 10, 16], $GroupedItems, ['group_field' => 2]); $this->assertOrder([11, 12, 13, 14, 15], $GroupedItems, ['group_field' => 3]); } - + /** * [testSaveNullScoped description]. * @@ -137,7 +137,7 @@ public function testSaveNullScoped() 'alias' => 'GroupedItems', 'className' => 'Sequence\Test\TestCase\Model\Behavior\GroupedItems', ]); - + // Test group 2 (group_field = 2) as group NULL (group_field = null) $GroupedItems->updateAll(['group_field' => null], ['group_field' => 2]);