Parcourir la source

Merge pull request #55 from alcaeus/fix-hash-numeric-keys

Fix type conversion of objects with numeric keys
Andreas il y a 10 ans
Parent
commit
8e5bf60781
24 fichiers modifiés avec 112 ajouts et 30 suppressions
  1. 3 7
      lib/Alcaeus/MongoDbAdapter/TypeConverter.php
  2. 3 1
      tests/Alcaeus/MongoDbAdapter/Mongo/FunctionsTest.php
  3. 3 1
      tests/Alcaeus/MongoDbAdapter/Mongo/MongoBinDataTest.php
  4. 3 1
      tests/Alcaeus/MongoDbAdapter/Mongo/MongoClientTest.php
  5. 3 1
      tests/Alcaeus/MongoDbAdapter/Mongo/MongoCodeTest.php
  6. 3 1
      tests/Alcaeus/MongoDbAdapter/Mongo/MongoCollectionTest.php
  7. 3 2
      tests/Alcaeus/MongoDbAdapter/Mongo/MongoCommandCursorTest.php
  8. 3 1
      tests/Alcaeus/MongoDbAdapter/Mongo/MongoCursorTest.php
  9. 3 1
      tests/Alcaeus/MongoDbAdapter/Mongo/MongoDBRefTest.php
  10. 3 1
      tests/Alcaeus/MongoDbAdapter/Mongo/MongoDBTest.php
  11. 3 1
      tests/Alcaeus/MongoDbAdapter/Mongo/MongoDateTest.php
  12. 3 1
      tests/Alcaeus/MongoDbAdapter/Mongo/MongoDeleteBatchTest.php
  13. 3 1
      tests/Alcaeus/MongoDbAdapter/Mongo/MongoGridFSCursorTest.php
  14. 3 1
      tests/Alcaeus/MongoDbAdapter/Mongo/MongoGridFSFileTest.php
  15. 3 1
      tests/Alcaeus/MongoDbAdapter/Mongo/MongoGridFSTest.php
  16. 3 1
      tests/Alcaeus/MongoDbAdapter/Mongo/MongoIdTest.php
  17. 3 1
      tests/Alcaeus/MongoDbAdapter/Mongo/MongoInsertBatchTest.php
  18. 3 1
      tests/Alcaeus/MongoDbAdapter/Mongo/MongoLogTest.php
  19. 3 1
      tests/Alcaeus/MongoDbAdapter/Mongo/MongoMaxKeyTest.php
  20. 3 1
      tests/Alcaeus/MongoDbAdapter/Mongo/MongoMinKeyTest.php
  21. 3 1
      tests/Alcaeus/MongoDbAdapter/Mongo/MongoRegexTest.php
  22. 3 1
      tests/Alcaeus/MongoDbAdapter/Mongo/MongoTimestampTest.php
  23. 3 1
      tests/Alcaeus/MongoDbAdapter/Mongo/MongoUpdateBatchTest.php
  24. 43 0
      tests/Alcaeus/MongoDbAdapter/TypeConverterTest.php

+ 3 - 7
lib/Alcaeus/MongoDbAdapter/TypeConverter.php

@@ -148,14 +148,10 @@ class TypeConverter
      */
     private static function ensureCorrectType(array $array, $wasObject = false)
     {
-        if ($array === [] && $wasObject) {
-            return (object) $array;
+        if ($wasObject || ! static::isNumericArray($array)) {
+            return new Model\BSONDocument($array);
         }
 
-        if (static::isNumericArray($array)) {
-            return $array;
-        }
-
-        return new Model\BSONDocument($array);
+        return $array;
     }
 }

+ 3 - 1
tests/Alcaeus/MongoDbAdapter/FunctionsTest.php → tests/Alcaeus/MongoDbAdapter/Mongo/FunctionsTest.php

@@ -1,6 +1,8 @@
 <?php
 
-namespace Alcaeus\MongoDbAdapter\Tests;
+namespace Alcaeus\MongoDbAdapter\Tests\Mongo;
+
+use Alcaeus\MongoDbAdapter\Tests\TestCase;
 
 /**
  * @author alcaeus <alcaeus@alcaeus.org>

+ 3 - 1
tests/Alcaeus/MongoDbAdapter/MongoBinDataTest.php → tests/Alcaeus/MongoDbAdapter/Mongo/MongoBinDataTest.php

@@ -1,6 +1,8 @@
 <?php
 
-namespace Alcaeus\MongoDbAdapter\Tests;
+namespace Alcaeus\MongoDbAdapter\Tests\Mongo;
+
+use Alcaeus\MongoDbAdapter\Tests\TestCase;
 use Alcaeus\MongoDbAdapter\TypeInterface;
 
 /**

+ 3 - 1
tests/Alcaeus/MongoDbAdapter/MongoClientTest.php → tests/Alcaeus/MongoDbAdapter/Mongo/MongoClientTest.php

@@ -1,6 +1,8 @@
 <?php
 
-namespace Alcaeus\MongoDbAdapter\Tests;
+namespace Alcaeus\MongoDbAdapter\Tests\Mongo;
+
+use Alcaeus\MongoDbAdapter\Tests\TestCase;
 
 /**
  * @author alcaeus <alcaeus@alcaeus.org>

+ 3 - 1
tests/Alcaeus/MongoDbAdapter/MongoCodeTest.php → tests/Alcaeus/MongoDbAdapter/Mongo/MongoCodeTest.php

@@ -1,6 +1,8 @@
 <?php
 
-namespace Alcaeus\MongoDbAdapter\Tests;
+namespace Alcaeus\MongoDbAdapter\Tests\Mongo;
+
+use Alcaeus\MongoDbAdapter\Tests\TestCase;
 use Alcaeus\MongoDbAdapter\TypeInterface;
 
 /**

+ 3 - 1
tests/Alcaeus/MongoDbAdapter/MongoCollectionTest.php → tests/Alcaeus/MongoDbAdapter/Mongo/MongoCollectionTest.php

@@ -1,7 +1,9 @@
 <?php
 
-namespace Alcaeus\MongoDbAdapter\Tests;
+namespace Alcaeus\MongoDbAdapter\Tests\Mongo;
+
 use MongoDB\Driver\ReadPreference;
+use Alcaeus\MongoDbAdapter\Tests\TestCase;
 
 /**
  * @author alcaeus <alcaeus@alcaeus.org>

+ 3 - 2
tests/Alcaeus/MongoDbAdapter/MongoCommandCursorTest.php → tests/Alcaeus/MongoDbAdapter/Mongo/MongoCommandCursorTest.php

@@ -1,8 +1,9 @@
 <?php
 
-namespace Alcaeus\MongoDbAdapter\Tests;
+namespace Alcaeus\MongoDbAdapter\Tests\Mongo;
+
 use MongoDB\Driver\ReadPreference;
-use MongoDB\Operation\Find;
+use Alcaeus\MongoDbAdapter\Tests\TestCase;
 
 /**
  * @author alcaeus <alcaeus@alcaeus.org>

+ 3 - 1
tests/Alcaeus/MongoDbAdapter/MongoCursorTest.php → tests/Alcaeus/MongoDbAdapter/Mongo/MongoCursorTest.php

@@ -1,6 +1,8 @@
 <?php
 
-namespace Alcaeus\MongoDbAdapter\Tests;
+namespace Alcaeus\MongoDbAdapter\Tests\Mongo;
+
+use Alcaeus\MongoDbAdapter\Tests\TestCase;
 use Alcaeus\MongoDbAdapter\TypeConverter;
 use MongoDB\Driver\ReadPreference;
 use MongoDB\Operation\Find;

+ 3 - 1
tests/Alcaeus/MongoDbAdapter/MongoDBRefTest.php → tests/Alcaeus/MongoDbAdapter/Mongo/MongoDBRefTest.php

@@ -1,6 +1,8 @@
 <?php
 
-namespace Alcaeus\MongoDbAdapter\Tests;
+namespace Alcaeus\MongoDbAdapter\Tests\Mongo;
+
+use Alcaeus\MongoDbAdapter\Tests\TestCase;
 
 /**
  * @author alcaeus <alcaeus@alcaeus.org>

+ 3 - 1
tests/Alcaeus/MongoDbAdapter/MongoDBTest.php → tests/Alcaeus/MongoDbAdapter/Mongo/MongoDBTest.php

@@ -1,6 +1,8 @@
 <?php
 
-namespace Alcaeus\MongoDbAdapter\Tests;
+namespace Alcaeus\MongoDbAdapter\Tests\Mongo;
+
+use Alcaeus\MongoDbAdapter\Tests\TestCase;
 use MongoDB\Driver\ReadPreference;
 
 /**

+ 3 - 1
tests/Alcaeus/MongoDbAdapter/MongoDateTest.php → tests/Alcaeus/MongoDbAdapter/Mongo/MongoDateTest.php

@@ -1,6 +1,8 @@
 <?php
 
-namespace Alcaeus\MongoDbAdapter\Tests;
+namespace Alcaeus\MongoDbAdapter\Tests\Mongo;
+
+use Alcaeus\MongoDbAdapter\Tests\TestCase;
 use Alcaeus\MongoDbAdapter\TypeInterface;
 
 /**

+ 3 - 1
tests/Alcaeus/MongoDbAdapter/MongoDeleteBatchTest.php → tests/Alcaeus/MongoDbAdapter/Mongo/MongoDeleteBatchTest.php

@@ -1,6 +1,8 @@
 <?php
 
-namespace Alcaeus\MongoDbAdapter\Tests;
+namespace Alcaeus\MongoDbAdapter\Tests\Mongo;
+
+use Alcaeus\MongoDbAdapter\Tests\TestCase;
 
 class MongoDeleteBatchTest extends TestCase
 {

+ 3 - 1
tests/Alcaeus/MongoDbAdapter/MongoGridFSCursorTest.php → tests/Alcaeus/MongoDbAdapter/Mongo/MongoGridFSCursorTest.php

@@ -1,6 +1,8 @@
 <?php
 
-namespace Alcaeus\MongoDbAdapter\Tests;
+namespace Alcaeus\MongoDbAdapter\Tests\Mongo;
+
+use Alcaeus\MongoDbAdapter\Tests\TestCase;
 
 class MongoGridFSCursorTest extends TestCase
 {

+ 3 - 1
tests/Alcaeus/MongoDbAdapter/MongoGridFSFileTest.php → tests/Alcaeus/MongoDbAdapter/Mongo/MongoGridFSFileTest.php

@@ -1,6 +1,8 @@
 <?php
 
-namespace Alcaeus\MongoDbAdapter\Tests;
+namespace Alcaeus\MongoDbAdapter\Tests\Mongo;
+
+use Alcaeus\MongoDbAdapter\Tests\TestCase;
 
 class MongoGridFSFileTest extends TestCase
 {

+ 3 - 1
tests/Alcaeus/MongoDbAdapter/MongoGridFSTest.php → tests/Alcaeus/MongoDbAdapter/Mongo/MongoGridFSTest.php

@@ -1,6 +1,8 @@
 <?php
 
-namespace Alcaeus\MongoDbAdapter\Tests;
+namespace Alcaeus\MongoDbAdapter\Tests\Mongo;
+
+use Alcaeus\MongoDbAdapter\Tests\TestCase;
 
 class MongoGridFSTest extends TestCase
 {

+ 3 - 1
tests/Alcaeus/MongoDbAdapter/MongoIdTest.php → tests/Alcaeus/MongoDbAdapter/Mongo/MongoIdTest.php

@@ -1,6 +1,8 @@
 <?php
 
-namespace Alcaeus\MongoDbAdapter\Tests;
+namespace Alcaeus\MongoDbAdapter\Tests\Mongo;
+
+use Alcaeus\MongoDbAdapter\Tests\TestCase;
 use MongoDB\BSON\ObjectID;
 
 /**

+ 3 - 1
tests/Alcaeus/MongoDbAdapter/MongoInsertBatchTest.php → tests/Alcaeus/MongoDbAdapter/Mongo/MongoInsertBatchTest.php

@@ -1,6 +1,8 @@
 <?php
 
-namespace Alcaeus\MongoDbAdapter\Tests;
+namespace Alcaeus\MongoDbAdapter\Tests\Mongo;
+
+use Alcaeus\MongoDbAdapter\Tests\TestCase;
 
 class MongoInsertBatchTest extends TestCase
 {

+ 3 - 1
tests/Alcaeus/MongoDbAdapter/MongoLogTest.php → tests/Alcaeus/MongoDbAdapter/Mongo/MongoLogTest.php

@@ -1,6 +1,8 @@
 <?php
 
-namespace Alcaeus\MongoDbAdapter\Tests;
+namespace Alcaeus\MongoDbAdapter\Tests\Mongo;
+
+use Alcaeus\MongoDbAdapter\Tests\TestCase;
 
 class MongoLogTest extends \PHPUnit_Framework_Testcase
 {

+ 3 - 1
tests/Alcaeus/MongoDbAdapter/MongoMaxKeyTest.php → tests/Alcaeus/MongoDbAdapter/Mongo/MongoMaxKeyTest.php

@@ -1,6 +1,8 @@
 <?php
 
-namespace Alcaeus\MongoDbAdapter\Tests;
+namespace Alcaeus\MongoDbAdapter\Tests\Mongo;
+
+use Alcaeus\MongoDbAdapter\Tests\TestCase;
 use Alcaeus\MongoDbAdapter\TypeInterface;
 
 /**

+ 3 - 1
tests/Alcaeus/MongoDbAdapter/MongoMinKeyTest.php → tests/Alcaeus/MongoDbAdapter/Mongo/MongoMinKeyTest.php

@@ -1,6 +1,8 @@
 <?php
 
-namespace Alcaeus\MongoDbAdapter\Tests;
+namespace Alcaeus\MongoDbAdapter\Tests\Mongo;
+
+use Alcaeus\MongoDbAdapter\Tests\TestCase;
 use Alcaeus\MongoDbAdapter\TypeInterface;
 
 /**

+ 3 - 1
tests/Alcaeus/MongoDbAdapter/MongoRegexTest.php → tests/Alcaeus/MongoDbAdapter/Mongo/MongoRegexTest.php

@@ -1,6 +1,8 @@
 <?php
 
-namespace Alcaeus\MongoDbAdapter\Tests;
+namespace Alcaeus\MongoDbAdapter\Tests\Mongo;
+
+use Alcaeus\MongoDbAdapter\Tests\TestCase;
 use Alcaeus\MongoDbAdapter\TypeInterface;
 
 /**

+ 3 - 1
tests/Alcaeus/MongoDbAdapter/MongoTimestampTest.php → tests/Alcaeus/MongoDbAdapter/Mongo/MongoTimestampTest.php

@@ -1,6 +1,8 @@
 <?php
 
-namespace Alcaeus\MongoDbAdapter\Tests;
+namespace Alcaeus\MongoDbAdapter\Tests\Mongo;
+
+use Alcaeus\MongoDbAdapter\Tests\TestCase;
 use Alcaeus\MongoDbAdapter\TypeInterface;
 
 /**

+ 3 - 1
tests/Alcaeus/MongoDbAdapter/MongoUpdateBatchTest.php → tests/Alcaeus/MongoDbAdapter/Mongo/MongoUpdateBatchTest.php

@@ -1,6 +1,8 @@
 <?php
 
-namespace Alcaeus\MongoDbAdapter\Tests;
+namespace Alcaeus\MongoDbAdapter\Tests\Mongo;
+
+use Alcaeus\MongoDbAdapter\Tests\TestCase;
 
 class MongoUpdateBatchTest extends TestCase
 {

+ 43 - 0
tests/Alcaeus/MongoDbAdapter/TypeConverterTest.php

@@ -0,0 +1,43 @@
+<?php
+
+namespace Alcaeus\MongoDbAdapter\Tests;
+
+use MongoDB\BSON;
+use MongoDB\Driver\Exception;
+use Alcaeus\MongoDbAdapter\TypeConverter;
+use MongoDB\Model\BSONDocument;
+
+class TypeConverterTest extends TestCase
+{
+    /**
+     * @dataProvider converterData
+     */
+    public function testFromLegacy($legacyValue, $modernValue)
+    {
+        $this->skipTestIf(extension_loaded('mongo'));
+        $this->assertEquals($modernValue, TypeConverter::fromLegacy($legacyValue));
+    }
+
+    public static function converterData()
+    {
+        $id = str_repeat('0123', 6);
+
+        return [
+            'objectId' => [
+                new \MongoId($id), new BSON\ObjectID($id)
+            ],
+            'numericArray' => [
+                ['foo', 'bar'], ['foo', 'bar']
+            ],
+            'hashWithNumericKeys' => [
+                (object) ['foo', 'bar'], new BSONDocument(['foo', 'bar'])
+            ],
+            'hash' => [
+                ['foo' => 'bar'], new BSONDocument(['foo' => 'bar'])
+            ],
+            'nestedArrays' => [
+                [['foo' => 'bar']], [new BSONDocument(['foo' => 'bar'])]
+            ],
+        ];
+    }
+}