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
{
22
+ parent ::setUp ();
15
23
$ this ->renewSession (); // discard changes
16
24
}
17
25
@@ -22,11 +30,11 @@ public function setUp()
22
30
public function testReferenceOnNonReferenceableNode ()
23
31
{
24
32
// Load a non-referenceable node
25
- $ referenced_node = $ this ->session ->getNode ('/tests_general_base/emptyExample ' );
33
+ $ nonReferenceableNode = $ this ->node ->getNode ('non-referenceable ' );
26
34
27
35
// 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 );
36
+ $ sourceNode = $ this ->node ->getNode ('node ' );
37
+ $ sourceNode ->setProperty ('reference ' , $ nonReferenceableNode , \PHPCR \PropertyType::WEAKREFERENCE );
30
38
$ this ->session ->save ();
31
39
}
32
40
@@ -36,24 +44,24 @@ public function testReferenceOnNonReferenceableNode()
36
44
public function testReferenceOnNewlyReferenceableNode ()
37
45
{
38
46
// 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 ' );
47
+ $ referencedNode = $ this ->node ->getNode ('node ' );
48
+ $ referencedNode ->addMixin ('mix:referenceable ' );
41
49
42
50
// Re-read the node to be sure it has a UUID
43
51
$ this ->saveAndRenewSession ();
44
- $ referenced_node = $ this ->session ->getNode ('/tests_general_base/emptyExample ' );
52
+ $ referencedNode = $ this ->node ->getNode ('node ' );
45
53
46
54
// 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 );
55
+ $ sourceNode = $ this ->node ->getNode ('other-node ' );
56
+ $ sourceNode ->setProperty ('reference ' , $ referencedNode , \PHPCR \PropertyType::WEAKREFERENCE );
49
57
50
58
$ this ->session ->save ();
51
59
52
- $ this ->assertInstanceOf ('PHPCR\NodeInterface ' , $ source_node ->getPropertyValue ('reference ' ));
60
+ $ this ->assertInstanceOf ('PHPCR\NodeInterface ' , $ sourceNode ->getPropertyValue ('reference ' ));
53
61
54
62
// referrers only required to work once save happened
55
- $ this ->assertCount (0 , $ referenced_node ->getReferences ());
56
- $ this ->assertCount (1 , $ referenced_node ->getWeakReferences ());
63
+ $ this ->assertCount (0 , $ referencedNode ->getReferences ());
64
+ $ this ->assertCount (1 , $ referencedNode ->getWeakReferences ());
57
65
}
58
66
59
67
/**
@@ -62,39 +70,90 @@ public function testReferenceOnNewlyReferenceableNode()
62
70
public function testReferenceOnReferenceableNode ()
63
71
{
64
72
// Load a referenceable node
65
- $ referenced_node = $ this ->session ->getNode ('/tests_general_base/idExample ' );
73
+ $ referencedNode = $ this ->node ->getNode ('referenceable ' );
66
74
67
75
// 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 );
76
+ $ sourceNode = $ this ->node ->getNode ('node ' );
77
+ $ sourceNode ->setProperty ('oreference ' , $ referencedNode , \PHPCR \PropertyType::WEAKREFERENCE );
70
78
$ this ->session ->save ();
71
79
72
- $ this ->assertInstanceOf ('PHPCR\NodeInterface ' , $ source_node ->getPropertyValue ('oreference ' ));
80
+ $ this ->assertInstanceOf ('PHPCR\NodeInterface ' , $ sourceNode ->getPropertyValue ('oreference ' ));
73
81
}
74
82
75
83
/**
76
84
* Test that we can update a reference
77
85
*/
78
86
public function testUpdateReference ()
79
87
{
80
- $ referenced1 = $ this ->session ->getNode ('/tests_general_base/emptyExample ' );
88
+ $ referenced1 = $ this ->node ->getNode ('node ' );
81
89
$ referenced1 ->addMixin ('mix:referenceable ' );
82
90
$ this ->session ->save ();
83
91
84
92
// Load a referenceable node
85
- $ referenced2 = $ this ->session ->getNode ('/tests_general_base/idExample ' );
93
+ $ referenced2 = $ this ->node ->getNode ('referenceable ' );
86
94
87
95
// Reference it from another node
88
- $ source_node = $ this ->session ->getNode ('/tests_general_base/index.txt/jcr:content ' );
96
+ $ sourceNode = $ this ->node ->getNode ('other-node ' );
97
+
98
+ $ sourceNode ->setProperty ('reference ' , $ referenced1 , \PHPCR \PropertyType::WEAKREFERENCE );
99
+ $ this ->session ->save ();
100
+ $ sourceNode ->setProperty ('reference ' , $ referenced2 , \PHPCR \PropertyType::WEAKREFERENCE );
101
+ $ this ->session ->save ();
102
+ $ this ->assertSame ($ referenced2 , $ sourceNode ->getPropertyValue ('reference ' ));
103
+
104
+ $ this ->renewSession ();
105
+ $ referenced2 = $ this ->node ->getNode ('referenceable ' );
106
+ $ this ->assertSame ($ referenced2 , $ this ->node ->getNode ('other-node ' )->getProperty ('reference ' )->getValue ());
107
+ }
108
+
109
+ public function testMultiValueReference ()
110
+ {
111
+ $ this ->doTestMultiValueReference (
112
+ array ('one ' , 'two ' , 'three ' ),
113
+ array ('one ' , 'two ' , 'one ' , 'one ' , 'two ' , 'three ' ),
114
+ PropertyType::REFERENCE
115
+ );
116
+ }
117
+
118
+ public function testMultiValueWeakReference ()
119
+ {
120
+ $ this ->doTestMultiValueReference (
121
+ array ('one ' , 'two ' , 'three ' ),
122
+ array ('one ' , 'two ' , 'one ' , 'one ' , 'two ' , 'three ' ),
123
+ PropertyType::WEAKREFERENCE
124
+ );
125
+ }
126
+
127
+ private function doTestMultiValueReference ($ nodeNames , $ nodeCollectionNames , $ referenceType )
128
+ {
129
+ $ baseNode = $ this ->node ;
130
+ $ nodes = array ();
131
+ foreach ($ nodeNames as $ nodeName ) {
132
+ $ node = $ baseNode ->addNode ($ nodeName );
133
+ $ node ->addMixin ('mix:referenceable ' );
134
+ $ nodes [$ nodeName ] = $ node ;
135
+ }
89
136
90
- $ source_node ->setProperty ('reference ' , $ referenced1 , \PHPCR \PropertyType::WEAKREFERENCE );
91
137
$ this ->session ->save ();
92
- $ source_node ->setProperty ('reference ' , $ referenced2 , \PHPCR \PropertyType::WEAKREFERENCE );
138
+
139
+ $ referrer = $ baseNode ->addNode ('referrer ' );
140
+
141
+ $ nodeCollection = array ();
142
+
143
+ foreach ($ nodeCollectionNames as $ nodeCollectionName ) {
144
+ $ nodeCollection [] = $ nodes [$ nodeCollectionName ];
145
+ }
146
+ $ referrer ->setProperty ('references ' , $ nodeCollection , $ referenceType );
147
+
93
148
$ this ->session ->save ();
94
- $ this ->assertSame ($ referenced2 , $ source_node ->getPropertyValue ('reference ' ));
95
149
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 ());
150
+ $ this ->renewSession ();
151
+ $ referrer = $ this ->node ->getNode ('referrer ' );
152
+ $ values = $ referrer ->getProperty ('references ' );
153
+
154
+ foreach ($ values as $ referencedNode ) {
155
+ $ name = array_shift ($ nodeCollectionNames );
156
+ $ this ->assertSame ($ name , $ referencedNode ->getName ());
157
+ }
99
158
}
100
159
}
0 commit comments