1
1
<?php
2
2
namespace PHPCR \Tests \Writing ;
3
3
4
+ use PHPCR \PropertyType ;
5
+
4
6
require_once (__DIR__ . '/../../inc/BaseCase.php ' );
5
7
6
8
/**
10
12
*/
11
13
class MixinReferenceableTest extends \PHPCR \Test \BaseCase
12
14
{
15
+ public static function setupBeforeClass ($ fixtures = '10_Writing/mixinreferenceable ' )
16
+ {
17
+ parent ::setupBeforeClass ($ fixtures );
18
+ }
19
+
13
20
public function setUp ()
14
21
{
15
22
$ this ->renewSession (); // discard changes
@@ -22,11 +29,11 @@ public function setUp()
22
29
public function testReferenceOnNonReferenceableNode ()
23
30
{
24
31
// Load a non-referenceable node
25
- $ referenced_node = $ this ->session ->getNode ('/tests_general_base/emptyExample ' );
32
+ $ nonReferenceableNode = $ this ->node ->getNode ('non-referenceable ' );
26
33
27
34
// Try to reference it
28
- $ source_node = $ this ->session ->getNode ('/tests_general_base/index.txt/jcr:content ' );
29
- $ source_node ->setProperty ('reference ' , $ referenced_node , \PHPCR \PropertyType::WEAKREFERENCE );
35
+ $ sourceNode = $ this ->node ->getNode ('node ' );
36
+ $ sourceNode ->setProperty ('reference ' , $ nonReferenceableNode , \PHPCR \PropertyType::WEAKREFERENCE );
30
37
$ this ->session ->save ();
31
38
}
32
39
@@ -36,24 +43,24 @@ public function testReferenceOnNonReferenceableNode()
36
43
public function testReferenceOnNewlyReferenceableNode ()
37
44
{
38
45
// Load a non-referenceable node and make it referenceable
39
- $ referenced_node = $ this ->session ->getNode ('/tests_general_base/emptyExample ' );
40
- $ referenced_node ->addMixin ('mix:referenceable ' );
46
+ $ referencedNode = $ this ->node ->getNode ('node ' );
47
+ $ referencedNode ->addMixin ('mix:referenceable ' );
41
48
42
49
// Re-read the node to be sure it has a UUID
43
50
$ this ->saveAndRenewSession ();
44
- $ referenced_node = $ this ->session ->getNode ('/tests_general_base/emptyExample ' );
51
+ $ referencedNode = $ this ->node ->getNode ('node ' );
45
52
46
53
// Reference it from another node
47
- $ source_node = $ this ->session ->getNode ('/tests_general_base/index.txt/jcr:content ' );
48
- $ source_node ->setProperty ('reference ' , $ referenced_node , \PHPCR \PropertyType::WEAKREFERENCE );
54
+ $ sourceNode = $ this ->node ->getNode ('other-node ' );
55
+ $ sourceNode ->setProperty ('reference ' , $ referencedNode , \PHPCR \PropertyType::WEAKREFERENCE );
49
56
50
57
$ this ->session ->save ();
51
58
52
- $ this ->assertInstanceOf ('PHPCR\NodeInterface ' , $ source_node ->getPropertyValue ('reference ' ));
59
+ $ this ->assertInstanceOf ('PHPCR\NodeInterface ' , $ sourceNode ->getPropertyValue ('reference ' ));
53
60
54
61
// referrers only required to work once save happened
55
- $ this ->assertCount (0 , $ referenced_node ->getReferences ());
56
- $ this ->assertCount (1 , $ referenced_node ->getWeakReferences ());
62
+ $ this ->assertCount (0 , $ referencedNode ->getReferences ());
63
+ $ this ->assertCount (1 , $ referencedNode ->getWeakReferences ());
57
64
}
58
65
59
66
/**
@@ -62,54 +69,105 @@ public function testReferenceOnNewlyReferenceableNode()
62
69
public function testReferenceOnReferenceableNode ()
63
70
{
64
71
// Load a referenceable node
65
- $ referenced_node = $ this ->session ->getNode ('/tests_general_base/idExample ' );
72
+ $ referencedNode = $ this ->node ->getNode ('referenceable ' );
66
73
67
74
// Reference it from another node
68
- $ source_node = $ this ->session ->getNode ('/tests_general_base/index.txt/jcr:content ' );
69
- $ source_node ->setProperty ('oreference ' , $ referenced_node , \PHPCR \PropertyType::WEAKREFERENCE );
75
+ $ sourceNode = $ this ->node ->getNode ('node ' );
76
+ $ sourceNode ->setProperty ('oreference ' , $ referencedNode , \PHPCR \PropertyType::WEAKREFERENCE );
70
77
$ this ->session ->save ();
71
78
72
- $ this ->assertInstanceOf ('PHPCR\NodeInterface ' , $ source_node ->getPropertyValue ('oreference ' ));
79
+ $ this ->assertInstanceOf ('PHPCR\NodeInterface ' , $ sourceNode ->getPropertyValue ('oreference ' ));
73
80
}
74
81
75
82
/**
76
83
* Test that we can update a reference
77
84
*/
78
85
public function testUpdateReference ()
79
86
{
80
- $ referenced1 = $ this ->session ->getNode ('/tests_general_base/emptyExample ' );
87
+ $ referenced1 = $ this ->node ->getNode ('node ' );
81
88
$ referenced1 ->addMixin ('mix:referenceable ' );
82
89
$ this ->session ->save ();
83
90
84
91
// Load a referenceable node
85
- $ referenced2 = $ this ->session ->getNode ('/tests_general_base/idExample ' );
92
+ $ referenced2 = $ this ->node ->getNode ('referenceable ' );
86
93
87
94
// Reference it from another node
88
- $ source_node = $ this ->session ->getNode ('/tests_general_base/index.txt/jcr:content ' );
95
+ $ sourceNode = $ this ->node ->getNode ('other-node ' );
89
96
90
- $ source_node ->setProperty ('reference ' , $ referenced1 , \PHPCR \PropertyType::WEAKREFERENCE );
97
+ $ sourceNode ->setProperty ('reference ' , $ referenced1 , \PHPCR \PropertyType::WEAKREFERENCE );
91
98
$ this ->session ->save ();
92
- $ source_node ->setProperty ('reference ' , $ referenced2 , \PHPCR \PropertyType::WEAKREFERENCE );
99
+ $ sourceNode ->setProperty ('reference ' , $ referenced2 , \PHPCR \PropertyType::WEAKREFERENCE );
93
100
$ this ->session ->save ();
94
- $ this ->assertSame ($ referenced2 , $ source_node ->getPropertyValue ('reference ' ));
101
+ $ this ->assertSame ($ referenced2 , $ sourceNode ->getPropertyValue ('reference ' ));
95
102
96
- $ session = $ this ->renewSession ();
97
- $ referenced2 = $ session ->getNode ('/tests_general_base/idExample ' );
98
- $ this ->assertSame ($ referenced2 , $ session ->getProperty ('/tests_general_base/index.txt/jcr:content/reference ' )->getValue ());
103
+ $ this ->renewSession ();
104
+ $ referenced2 = $ this ->node ->getNode ('referenceable ' );
105
+ $ this ->assertSame ($ referenced2 , $ this ->node ->getNode ('other-node ' )->getProperty ('reference ' )->getValue ());
106
+ }
107
+
108
+ public function testMultiValueReference ()
109
+ {
110
+ $ this ->doTestMultiValueReference (
111
+ array ('one ' , 'two ' , 'three ' ),
112
+ array ('one ' , 'two ' , 'one ' , 'one ' , 'two ' , 'three ' ),
113
+ PropertyType::REFERENCE
114
+ );
115
+ }
116
+
117
+ public function testMultiValueWeakReference ()
118
+ {
119
+ $ this ->doTestMultiValueReference (
120
+ array ('one ' , 'two ' , 'three ' ),
121
+ array ('one ' , 'two ' , 'one ' , 'one ' , 'two ' , 'three ' ),
122
+ PropertyType::WEAKREFERENCE
123
+ );
124
+ }
125
+
126
+ private function doTestMultiValueReference ($ nodeNames , $ nodeCollectionNames , $ referenceType )
127
+ {
128
+ $ baseNode = $ this ->node ;
129
+ $ nodes = array ();
130
+ foreach ($ nodeNames as $ nodeName ) {
131
+ $ node = $ baseNode ->addNode ($ nodeName );
132
+ $ node ->addMixin ('mix:referenceable ' );
133
+ $ nodes [$ nodeName ] = $ node ;
134
+ }
135
+
136
+ $ this ->session ->save ();
137
+
138
+ $ referrer = $ baseNode ->addNode ('referrer ' );
139
+
140
+ $ nodeCollection = array ();
141
+
142
+ foreach ($ nodeCollectionNames as $ nodeCollectionName ) {
143
+ $ nodeCollection [] = $ nodes [$ nodeCollectionName ];
144
+ }
145
+ $ referrer ->setProperty ('references ' , $ nodeCollection , $ referenceType );
146
+
147
+ $ this ->session ->save ();
148
+
149
+ $ this ->renewSession ();
150
+ $ referrer = $ this ->node ->getNode ('referrer ' );
151
+ $ values = $ referrer ->getProperty ('references ' );
152
+
153
+ foreach ($ values as $ referencedNode ) {
154
+ $ name = array_shift ($ nodeCollectionNames );
155
+ $ this ->assertSame ($ name , $ referencedNode ->getName ());
156
+ }
99
157
}
100
158
101
159
public function testSetUuidNewReferenceable ()
102
160
{
103
161
$ uuid = 'aaaa61c0-09ab-42a9-87c0-308ccc93aaaa ' ;
104
- $ node = $ this ->session -> getNode ( ' /tests_general_base/index.txt/jcr:content ' ) ->addNode ('newId ' , 'nt:unstructured ' );
162
+ $ node = $ this ->node ->addNode ('newId ' , 'nt:unstructured ' );
105
163
$ node ->addMixin ('mix:referenceable ' );
106
164
$ node ->setProperty ('jcr:uuid ' , $ uuid );
107
165
$ this ->session ->save ();
108
166
$ this ->assertSame ($ uuid , $ node ->getIdentifier ());
109
167
110
168
$ session = $ this ->renewSession ();
111
169
112
- $ node = $ session -> getNode ('/tests_general_base/index.txt/jcr:content/ newId ' );
170
+ $ node = $ this -> node -> getNode ('newId ' );
113
171
$ this ->assertSame ($ uuid , $ node ->getIdentifier ());
114
172
}
115
173
@@ -118,7 +176,7 @@ public function testSetUuidNewReferenceable()
118
176
*/
119
177
public function testSetUuidNewButNonreferenceable ()
120
178
{
121
- $ node = $ this ->session -> getNode ( ' /tests_general_base/index.txt/jcr:content ' ) ->addNode ('newNonref ' , 'nt:unstructured ' );
179
+ $ node = $ this ->node ->addNode ('newNonref ' , 'nt:unstructured ' );
122
180
$ node ->setProperty ('jcr:uuid ' , 'bbbb61c0-09ab-42a9-87c0-308ccc93aaaa ' );
123
181
}
124
182
@@ -127,16 +185,14 @@ public function testSetUuidNewButNonreferenceable()
127
185
*/
128
186
public function testSetUuidReferenceableButExisting ()
129
187
{
130
- $ node = $ this ->session ->getNode ('/tests_general_base/idExample ' );
131
- $ node ->setProperty ('jcr:uuid ' , 'cccc61c0-09ab-42a9-87c0-308ccc93aaaa ' );
188
+ $ this ->node ->setProperty ('jcr:uuid ' , 'cccc61c0-09ab-42a9-87c0-308ccc93aaaa ' );
132
189
}
133
190
134
191
/**
135
192
* @expectedException \PHPCR\NodeType\ConstraintViolationException
136
193
*/
137
194
public function testSetUuidButNotReferenceableExisting ()
138
195
{
139
- $ node = $ this ->session ->getNode ('/tests_general_base/index.txt/jcr:content ' );
140
- $ node ->setProperty ('jcr:uuid ' , 'dddd61c0-09ab-42a9-87c0-308ccc93aaaa ' );
196
+ $ this ->node ->setProperty ('jcr:uuid ' , 'dddd61c0-09ab-42a9-87c0-308ccc93aaaa ' );
141
197
}
142
198
}
0 commit comments