Skip to content

Commit 0ab3c0b

Browse files
committed
Add type assertions on Type tests
1 parent ab0fbc5 commit 0ab3c0b

File tree

2 files changed

+26
-16
lines changed

2 files changed

+26
-16
lines changed

lib/Doctrine/ODM/MongoDB/Types/Int64Type.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@ class Int64Type extends IntType implements Incrementable, Versionable
1313
{
1414
public function convertToDatabaseValue($value)
1515
{
16-
return $value !== null ? new Int64($value) : null;
16+
if ($value instanceof Int64 || $value === null) {
17+
return $value;
18+
}
19+
20+
return new Int64($value);
1721
}
1822

1923
public function closureToMongo(): string

tests/Doctrine/ODM/MongoDB/Tests/Types/TypeTest.php

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use MongoDB\BSON\UTCDateTime;
1919
use PHPUnit\Framework\Attributes\DataProvider;
2020

21+
use function get_debug_type;
2122
use function md5;
2223
use function str_pad;
2324
use function str_repeat;
@@ -33,14 +34,12 @@ public function testConversion(string $typeName, mixed $phpValue, mixed $bsonVal
3334
$bsonValue ??= $phpValue;
3435
$type = Type::getType($typeName);
3536

36-
self::assertEquals($phpValue, $type->convertToPHPValue($bsonValue));
37-
self::assertEquals($bsonValue, $type->convertToDatabaseValue($phpValue));
37+
self::assertSameTypeAndValue($phpValue, $type->convertToPHPValue($bsonValue));
38+
self::assertSameTypeAndValue($bsonValue, $type->convertToDatabaseValue($phpValue));
3839
}
3940

4041
public static function provideTypes(): array
4142
{
42-
$array = ['foo' => 'bar'];
43-
4443
return [
4544
'id' => [Type::ID, '507f1f77bcf86cd799439011', new ObjectId('507f1f77bcf86cd799439011')],
4645
'intId' => [Type::INTID, 1],
@@ -49,32 +48,32 @@ public static function provideTypes(): array
4948
'boolean' => [Type::BOOLEAN, false],
5049
'int' => [Type::INT, 69],
5150
'integer' => [Type::INTEGER, 42],
52-
'int64' => [Type::INT64, 9223372036854775807, new Int64(9223372036854775807)],
51+
'int64' => [Type::INT64, 100, new Int64(100)],
5352
'float' => [Type::FLOAT, 3.14],
5453
'string' => [Type::STRING, 'ohai'],
5554
'minKey' => [Type::KEY, 0, new MinKey()],
5655
'maxKey' => [Type::KEY, 1, new MaxKey()],
5756
'timestamp' => [Type::TIMESTAMP, $t = time(), new Timestamp(0, $t)],
58-
'binData' => [Type::BINDATA, 'foobarbaz'],
59-
'binDataFunc' => [Type::BINDATAFUNC, 'foobarbaz'],
60-
'binDataByteArray' => [Type::BINDATABYTEARRAY, 'foobarbaz'],
61-
'binDataUuid' => [Type::BINDATAUUID, 'testtesttesttest'],
62-
'binDataUuidRFC4122' => [Type::BINDATAUUIDRFC4122, str_repeat('a', 16)],
63-
'binDataMD5' => [Type::BINDATAMD5, md5('ODM')],
64-
'binDataCustom' => [Type::BINDATACUSTOM, 'foobarbaz'],
57+
'binData' => [Type::BINDATA, 'foobarbaz', new Binary('foobarbaz', Binary::TYPE_GENERIC)],
58+
'binDataFunc' => [Type::BINDATAFUNC, 'foobarbaz', new Binary('foobarbaz', Binary::TYPE_FUNCTION)],
59+
'binDataByteArray' => [Type::BINDATABYTEARRAY, 'foobarbaz', new Binary('foobarbaz', Binary::TYPE_OLD_BINARY)],
60+
'binDataUuid' => [Type::BINDATAUUID, 'testtesttesttest', new Binary('testtesttesttest', Binary::TYPE_OLD_UUID)],
61+
'binDataUuidRFC4122' => [Type::BINDATAUUIDRFC4122, str_repeat('a', 16), new Binary(str_repeat('a', 16), Binary::TYPE_UUID)],
62+
'binDataMD5' => [Type::BINDATAMD5, md5('ODM'), new Binary(md5('ODM'), Binary::TYPE_MD5)],
63+
'binDataCustom' => [Type::BINDATACUSTOM, 'foobarbaz', new Binary('foobarbaz', Binary::TYPE_USER_DEFINED)],
6564
'hash' => [Type::HASH, ['foo' => 'bar'], (object) ['foo' => 'bar']],
6665
'collection' => [Type::COLLECTION, ['foo', 'bar']],
67-
'objectId' => [Type::OBJECTID, '507f1f77bcf86cd799439011'],
66+
'objectId' => [Type::OBJECTID, '507f1f77bcf86cd799439011', new ObjectId('507f1f77bcf86cd799439011')],
6867
'raw' => [Type::RAW, (object) ['foo' => 'bar']],
69-
'decimal128' => [Type::DECIMAL128, '4.20'],
68+
'decimal128' => [Type::DECIMAL128, '4.20', new Decimal128('4.20')],
7069
];
7170
}
7271

7372
/** @param mixed $test */
7473
#[DataProvider('provideTypesForIdempotent')]
7574
public function testConversionIsIdempotent(Type $type, $test): void
7675
{
77-
self::assertEquals($test, $type->convertToDatabaseValue($test));
76+
self::assertSameTypeAndValue($test, $type->convertToDatabaseValue($test));
7877
}
7978

8079
public static function provideTypesForIdempotent(): array
@@ -83,6 +82,7 @@ public static function provideTypesForIdempotent(): array
8382
'id' => [Type::getType(Type::ID), new ObjectId()],
8483
'date' => [Type::getType(Type::DATE), new UTCDateTime()],
8584
'dateImmutable' => [Type::getType(Type::DATE_IMMUTABLE), new UTCDateTime()],
85+
'int64' => [Type::getType(Type::INT64), new Int64(100)],
8686
'timestamp' => [Type::getType(Type::TIMESTAMP), new Timestamp(0, time())],
8787
'binData' => [Type::getType(Type::BINDATA), new Binary('foobarbaz', Binary::TYPE_GENERIC)],
8888
'binDataFunc' => [Type::getType(Type::BINDATAFUNC), new Binary('foobarbaz', Binary::TYPE_FUNCTION)],
@@ -125,4 +125,10 @@ public function testConvertImmutableDate(): void
125125

126126
self::assertInstanceOf(UTCDateTime::class, Type::convertPHPToDatabaseValue($date));
127127
}
128+
129+
private static function assertSameTypeAndValue(mixed $expected, mixed $actual): void
130+
{
131+
self::assertSame(get_debug_type($expected), get_debug_type($actual));
132+
self::assertEquals($expected, $actual);
133+
}
128134
}

0 commit comments

Comments
 (0)