|
14 | 14 | use Doctrine\ODM\MongoDB\Mapping\TimeSeries\Granularity; |
15 | 15 | use Doctrine\ODM\MongoDB\Repository\DocumentRepository; |
16 | 16 | use Doctrine\ODM\MongoDB\Tests\BaseTestCase; |
| 17 | +use Doctrine\ODM\MongoDB\Tests\CaptureDeprecationMessages; |
17 | 18 | use Doctrine\ODM\MongoDB\Tests\ClassMetadataTestUtil; |
18 | 19 | use Doctrine\ODM\MongoDB\Types\Type; |
19 | 20 | use Doctrine\ODM\MongoDB\Utility\CollectionHelper; |
|
51 | 52 |
|
52 | 53 | class ClassMetadataTest extends BaseTestCase |
53 | 54 | { |
| 55 | + use CaptureDeprecationMessages; |
| 56 | + |
54 | 57 | public function testClassMetadataInstanceSerialization(): void |
55 | 58 | { |
56 | 59 | $cm = new ClassMetadata(CmsUser::class); |
@@ -84,6 +87,8 @@ public function testClassMetadataInstanceSerialization(): void |
84 | 87 | $cm->setValidator(Document::fromJSON($validatorJson)->toPHP()); |
85 | 88 | $cm->setValidationAction(ClassMetadata::SCHEMA_VALIDATION_ACTION_WARN); |
86 | 89 | $cm->setValidationLevel(ClassMetadata::SCHEMA_VALIDATION_LEVEL_OFF); |
| 90 | + $cm->isEncrypted = true; |
| 91 | + $cm->addSearchIndex(['mappings' => ['fields' => ['title' => ['type' => 'string']]]], 'custom_name'); |
87 | 92 | self::assertIsArray($cm->getFieldMapping('phonenumbers')); |
88 | 93 | self::assertCount(1, $cm->fieldMappings); |
89 | 94 | self::assertCount(1, $cm->associationMappings); |
@@ -117,6 +122,25 @@ public function testClassMetadataInstanceSerialization(): void |
117 | 122 | self::assertEquals(Document::fromJSON($validatorJson)->toPHP(), $cm->getValidator()); |
118 | 123 | self::assertEquals(ClassMetadata::SCHEMA_VALIDATION_ACTION_WARN, $cm->getValidationAction()); |
119 | 124 | self::assertEquals(ClassMetadata::SCHEMA_VALIDATION_LEVEL_OFF, $cm->getValidationLevel()); |
| 125 | + self::assertTrue($cm->isEncrypted); |
| 126 | + self::assertSame([['definition' => ['mappings' => ['fields' => ['title' => ['type' => 'string']]]], 'name' => 'custom_name', 'type' => 'search']], $cm->getSearchIndexes()); |
| 127 | + } |
| 128 | + |
| 129 | + public function testExtendingClassMetadata(): void |
| 130 | + { |
| 131 | + $cm = new ExtendedClassMetadata(CmsUser::class); |
| 132 | + $cm->setCollection('custom_collection'); |
| 133 | + $cm->customProperty = 'some_value'; |
| 134 | + |
| 135 | + $serialized = $this->captureDeprecationMessages(static fn () => serialize($cm), $deprecations); |
| 136 | + $cm = unserialize($serialized); |
| 137 | + |
| 138 | + self::assertInstanceOf(ExtendedClassMetadata::class, $cm); |
| 139 | + self::assertSame(CmsUser::class, $cm->name); |
| 140 | + self::assertSame('custom_collection', $cm->getCollection()); |
| 141 | + self::assertSame('some_value', $cm->customProperty); |
| 142 | + |
| 143 | + self::assertSame(['Since doctrine/mongodb-odm 2.16: The method __sleep() is deprecated. Implement and use Doctrine\ODM\MongoDB\Mapping\ClassMetadata::__serialize() instead.'], $deprecations); |
120 | 144 | } |
121 | 145 |
|
122 | 146 | public function testOwningSideAndInverseSide(): void |
@@ -1136,3 +1160,14 @@ class TimeSeriesTestDocument |
1136 | 1160 | #[ODM\Field] |
1137 | 1161 | public string $metadata; |
1138 | 1162 | } |
| 1163 | + |
| 1164 | +class ExtendedClassMetadata extends ClassMetadata |
| 1165 | +{ |
| 1166 | + public string $customProperty; |
| 1167 | + |
| 1168 | + /** @return list<string> */ |
| 1169 | + public function __sleep(): array |
| 1170 | + { |
| 1171 | + return array_merge(parent::__sleep(), ['customProperty']); |
| 1172 | + } |
| 1173 | +} |
0 commit comments