4
4
5
5
namespace Doctrine \Bundle \MongoDBBundle \Tests \Validator \Constraints ;
6
6
7
+ use Composer \InstalledVersions ;
8
+ use Composer \Semver \VersionParser ;
7
9
use Doctrine \Bundle \MongoDBBundle \Validator \Constraints \Unique ;
8
10
use PHPUnit \Framework \TestCase ;
9
11
use Symfony \Component \Validator \Mapping \ClassMetadata ;
@@ -23,6 +25,45 @@ public function testWithDefaultProperty(): void
23
25
self ::assertInstanceOf (Unique::class, $ constraint );
24
26
self ::assertSame (['email ' ], $ constraint ->fields );
25
27
self ::assertSame ('doctrine_odm.mongodb.unique ' , $ constraint ->validatedBy ());
28
+ self ::assertNull ($ constraint ->em );
29
+ }
30
+
31
+ public function testWithGroups (): void
32
+ {
33
+ $ metadata = new ClassMetadata (UniqueDocumentWithGroups::class);
34
+
35
+ $ loader = new AttributeLoader ();
36
+ self ::assertTrue ($ loader ->loadClassMetadata ($ metadata ));
37
+
38
+ [$ constraint ] = $ metadata ->getConstraints ();
39
+ self ::assertInstanceOf (Unique::class, $ constraint );
40
+ self ::assertSame (['email ' ], (array ) $ constraint ->fields );
41
+ self ::assertSame (['group1 ' ], $ constraint ->groups );
42
+ self ::assertSame ('doctrine_odm.mongodb.unique ' , $ constraint ->validatedBy ());
43
+ self ::assertNull ($ constraint ->em );
44
+ }
45
+
46
+ public function testWithIdentifierFieldNames (): void
47
+ {
48
+ if (! InstalledVersions::satisfies (new VersionParser (), 'symfony/doctrine-bridge ' , '>= 7.3 ' )) {
49
+ self ::markTestSkipped ('Requires symfony/doctrine-bridge 7.3 or higher, with $identifierFieldNames field ' );
50
+ }
51
+
52
+ $ metadata = new ClassMetadata (UniqueDocumentWithIdentifierFieldNames::class);
53
+
54
+ $ loader = new AttributeLoader ();
55
+
56
+ self ::assertTrue ($ loader ->loadClassMetadata ($ metadata ));
57
+
58
+ [$ constraint ] = $ metadata ->getConstraints ();
59
+ self ::assertInstanceOf (Unique::class, $ constraint );
60
+ self ::assertSame (['email ' ], $ constraint ->fields );
61
+ self ::assertSame ('Custom message ' , $ constraint ->message );
62
+ self ::assertSame ('custom_em ' , $ constraint ->em );
63
+ self ::assertFalse ($ constraint ->ignoreNull );
64
+ self ::assertSame (['id ' , 'name ' ], $ constraint ->identifierFieldNames );
65
+ self ::assertSame (['group1 ' , 'group2 ' ], $ constraint ->groups );
66
+ self ::assertSame ('doctrine_odm.mongodb.unique ' , $ constraint ->validatedBy ());
26
67
}
27
68
}
28
69
@@ -31,3 +72,24 @@ class UniqueDocumentDummyOne
31
72
{
32
73
private string $ email ;
33
74
}
75
+
76
+ #[Unique(fields: 'email ' , groups: ['group1 ' ])]
77
+ class UniqueDocumentWithGroups
78
+ {
79
+ private string $ email ;
80
+ }
81
+
82
+ #[Unique(
83
+ ['email ' ],
84
+ 'Custom message ' ,
85
+ em: 'custom_em ' ,
86
+ ignoreNull: false ,
87
+ identifierFieldNames: ['id ' , 'name ' ],
88
+ groups: ['group1 ' , 'group2 ' ],
89
+ )]
90
+ class UniqueDocumentWithIdentifierFieldNames
91
+ {
92
+ private string $ name ;
93
+
94
+ private string $ email ;
95
+ }
0 commit comments