Open Journal Systems  3.3.0
MetadataPropertyTest.php
1 <?php
2 
18 require_mock_env('env1');
19 
20 import('lib.pkp.tests.PKPTestCase');
21 import('lib.pkp.classes.metadata.MetadataProperty');
22 
37  public function testMetadataPropertyConstructor() {
38  // test instantiation with non-default values
39  $metadataProperty = new MetadataProperty('testElement', array(0x001), array(METADATA_PROPERTY_TYPE_COMPOSITE => 0x002), false, METADATA_PROPERTY_CARDINALITY_MANY, 'non.default.displayName', 'non.default.validationMessage', true);
40  self::assertEquals('testElement', $metadataProperty->getName());
41  self::assertEquals(array(0x001), $metadataProperty->getAssocTypes());
42  self::assertEquals(array(METADATA_PROPERTY_TYPE_COMPOSITE => array(0x002)), $metadataProperty->getAllowedTypes());
43  self::assertFalse($metadataProperty->getTranslated());
44  self::assertEquals(METADATA_PROPERTY_CARDINALITY_MANY, $metadataProperty->getCardinality());
45  self::assertEquals('non.default.displayName', $metadataProperty->getDisplayName());
46  self::assertEquals('non.default.validationMessage', $metadataProperty->getValidationMessage());
47  self::assertTrue($metadataProperty->getMandatory());
48  self::assertEquals('TestElement', $metadataProperty->getId());
49 
50  // Test translation
51  $metadataProperty = new MetadataProperty('testElement', array(0x001), METADATA_PROPERTY_TYPE_STRING, true);
52  self::assertTrue($metadataProperty->getTranslated());
53 
54  // test normal instantiation with defaults
55  $metadataProperty = new MetadataProperty('testElement');
56  self::assertEquals('testElement', $metadataProperty->getName());
57  self::assertEquals(array(), $metadataProperty->getAssocTypes());
58  self::assertEquals(array(METADATA_PROPERTY_TYPE_STRING => array(null)), $metadataProperty->getAllowedTypes());
59  self::assertFalse($metadataProperty->getTranslated());
60  self::assertEquals(METADATA_PROPERTY_CARDINALITY_ONE, $metadataProperty->getCardinality());
61  self::assertEquals('metadata.property.displayName.testElement', $metadataProperty->getDisplayName());
62  self::assertEquals('metadata.property.validationMessage.testElement', $metadataProperty->getValidationMessage());
63  self::assertFalse($metadataProperty->getMandatory());
64  self::assertEquals('TestElement', $metadataProperty->getId());
65  }
66 
71  public function testCompositeWithoutParameter() {
72  $this->expectException(InvalidArgumentException::class);
73  $metadataProperty = new MetadataProperty('testElement', array(0x001), METADATA_PROPERTY_TYPE_COMPOSITE, false, METADATA_PROPERTY_CARDINALITY_MANY);
74  }
75 
80  public function testCompositeWithWrongParameter() {
81  $this->expectException(InvalidArgumentException::class);
82  $metadataProperty = new MetadataProperty('testElement', array(0x001), array(METADATA_PROPERTY_TYPE_COMPOSITE => 'string'), false, METADATA_PROPERTY_CARDINALITY_MANY);
83  }
84 
90  $this->expectException(InvalidArgumentException::class);
91  $metadataProperty = new MetadataProperty('testElement', array(0x001), METADATA_PROPERTY_TYPE_VOCABULARY);
92  }
93 
99  $this->expectException(InvalidArgumentException::class);
100  $metadataProperty = new MetadataProperty('testElement', array(0x001), array(METADATA_PROPERTY_TYPE_VOCABULARY => 0x002), false, METADATA_PROPERTY_CARDINALITY_MANY);
101  }
102 
108  $this->expectException(InvalidArgumentException::class);
109  $metadataProperty = new MetadataProperty('testElement', array(0x001), array(METADATA_PROPERTY_TYPE_STRING => 0x002), false, METADATA_PROPERTY_CARDINALITY_MANY);
110  }
111 
116  public function testSetUnsupportedType() {
117  $this->expectException(InvalidArgumentException::class);
118  $metadataProperty = new MetadataProperty('testElement', array(0x001), 0x99999999, true, METADATA_PROPERTY_CARDINALITY_MANY);
119  }
120 
125  public function testSetUnsupportedCardinality() {
126  $this->expectException(InvalidArgumentException::class);
127  $metadataProperty = new MetadataProperty('testElement', array(0x001), METADATA_PROPERTY_TYPE_COMPOSITE, true, 0x99999999);
128  }
129 
133  public function testValidateString() {
134  $metadataProperty = new MetadataProperty('testElement');
135  self::assertEquals(array(METADATA_PROPERTY_TYPE_STRING => null), $metadataProperty->isValid('any string'));
136  self::assertFalse($metadataProperty->isValid(null));
137  self::assertFalse($metadataProperty->isValid(5));
138  self::assertFalse($metadataProperty->isValid(array('string1', 'string2')));
139  }
140 
144  public function testValidateUri() {
145  $metadataProperty = new MetadataProperty('testElement', array(), METADATA_PROPERTY_TYPE_URI);
146  self::assertFalse($metadataProperty->isValid('any string'));
147  self::assertEquals(array(METADATA_PROPERTY_TYPE_URI => null), $metadataProperty->isValid('ftp://some.domain.org/path'));
148  self::assertFalse($metadataProperty->isValid(null));
149  self::assertFalse($metadataProperty->isValid(5));
150  self::assertFalse($metadataProperty->isValid(array('ftp://some.domain.org/path', 'http://some.domain.org/')));
151  }
152 
157  // Build a test vocabulary. (Assoc type and id are 0 to
158  // simulate a site-wide vocabulary).
159  $controlledVocabDao = DAORegistry::getDAO('ControlledVocabDAO');
160  $testControlledVocab = $controlledVocabDao->_build('test-controlled-vocab', 0, 0);
161 
162  // Make a vocabulary entry
163  $controlledVocabEntryDao = DAORegistry::getDAO('ControlledVocabEntryDAO');
164  $testControlledVocabEntry = $controlledVocabEntryDao->newDataObject();
165  $testControlledVocabEntry->setName('testEntry', 'en_US');
166  $testControlledVocabEntry->setControlledVocabId($testControlledVocab->getId());
167  $controlledVocabEntryId = $controlledVocabEntryDao->insertObject($testControlledVocabEntry);
168 
169  $metadataProperty = new MetadataProperty('testElement', array(), array(METADATA_PROPERTY_TYPE_VOCABULARY => 'test-controlled-vocab'));
170 
171  // This validator checks numeric values
172  self::assertEquals(array(METADATA_PROPERTY_TYPE_VOCABULARY => 'test-controlled-vocab'), $metadataProperty->isValid($controlledVocabEntryId));
173  self::assertFalse($metadataProperty->isValid($controlledVocabEntryId + 1));
174 
175  // Delete the test vocabulary
176  $controlledVocabDao->deleteObject($testControlledVocab);
177  }
178 
182  public function testValidateDate() {
183  $metadataProperty = new MetadataProperty('testElement', array(), METADATA_PROPERTY_TYPE_DATE);
184  self::assertEquals(array(METADATA_PROPERTY_TYPE_DATE => null), $metadataProperty->isValid('2009-10-25'));
185  self::assertEquals(array(METADATA_PROPERTY_TYPE_DATE => null), $metadataProperty->isValid('2020-11'));
186  self::assertEquals(array(METADATA_PROPERTY_TYPE_DATE => null), $metadataProperty->isValid('1847'));
187  self::assertFalse($metadataProperty->isValid('XXXX'));
188  self::assertFalse($metadataProperty->isValid('2009-10-35'));
189  self::assertFalse($metadataProperty->isValid('2009-13-01'));
190  self::assertFalse($metadataProperty->isValid('2009-12-1'));
191  self::assertFalse($metadataProperty->isValid('2009-13'));
192  self::assertFalse($metadataProperty->isValid(5));
193  self::assertFalse($metadataProperty->isValid(array('2009-10-25', '2009-10-26')));
194  }
195 
199  public function testValidateInteger() {
200  $metadataProperty = new MetadataProperty('testElement', array(), METADATA_PROPERTY_TYPE_INTEGER);
201  self::assertEquals(array(METADATA_PROPERTY_TYPE_INTEGER => null), $metadataProperty->isValid(5));
202  self::assertFalse($metadataProperty->isValid(null));
203  self::assertFalse($metadataProperty->isValid('a string'));
204  self::assertFalse($metadataProperty->isValid(array(4, 8)));
205  }
206 
210  public function testValidateComposite() {
211  $metadataProperty = new MetadataProperty('testElement', array(), array(METADATA_PROPERTY_TYPE_COMPOSITE => 0x002), false, METADATA_PROPERTY_CARDINALITY_ONE);
212 
213  import('lib.pkp.classes.metadata.MetadataDescription');
214  $metadataDescription = new MetadataDescription('lib.pkp.classes.metadata.MetadataSchema', 0x002);
215  $anotherMetadataDescription = clone($metadataDescription);
216  $stdObject = new stdClass();
217 
218  self::assertEquals(array(METADATA_PROPERTY_TYPE_COMPOSITE => 0x002), $metadataProperty->isValid($metadataDescription));
219  self::assertEquals(array(METADATA_PROPERTY_TYPE_COMPOSITE => 0x002), $metadataProperty->isValid('2:5')); // assocType:assocId
220  self::assertFalse($metadataProperty->isValid('1:5'));
221  self::assertFalse($metadataProperty->isValid('2:xxx'));
222  self::assertFalse($metadataProperty->isValid('2'));
223  self::assertFalse($metadataProperty->isValid(null));
224  self::assertFalse($metadataProperty->isValid(5));
225  self::assertFalse($metadataProperty->isValid($stdObject));
226  self::assertFalse($metadataProperty->isValid(array($metadataDescription, $anotherMetadataDescription)));
227  }
228 
232  public function testValidateMultitype() {
233  $metadataProperty = new MetadataProperty('testElement', array(), array(METADATA_PROPERTY_TYPE_DATE, METADATA_PROPERTY_TYPE_INTEGER), false, METADATA_PROPERTY_CARDINALITY_ONE);
234  self::assertEquals(array(METADATA_PROPERTY_TYPE_DATE => null), $metadataProperty->isValid('2009-07-28'));
235  self::assertEquals(array(METADATA_PROPERTY_TYPE_INTEGER => null), $metadataProperty->isValid(5));
236  self::assertFalse($metadataProperty->isValid(null));
237  self::assertFalse($metadataProperty->isValid('string'));
238  }
239 }
240 
MetadataPropertyTest\testNonParameterizedTypeWithParameter
testNonParameterizedTypeWithParameter()
Definition: MetadataPropertyTest.php:107
MetadataPropertyTest\testControlledVocabWithWrongParameter
testControlledVocabWithWrongParameter()
Definition: MetadataPropertyTest.php:98
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
MetadataPropertyTest\testValidateControlledVocabulary
testValidateControlledVocabulary()
Definition: MetadataPropertyTest.php:156
MetadataPropertyTest\testCompositeWithoutParameter
testCompositeWithoutParameter()
Definition: MetadataPropertyTest.php:71
PKPTestCase
Class that implements functionality common to all PKP unit test cases.
Definition: PKPTestCase.inc.php:27
MetadataPropertyTest\testValidateUri
testValidateUri()
Definition: MetadataPropertyTest.php:144
MetadataPropertyTest\testCompositeWithWrongParameter
testCompositeWithWrongParameter()
Definition: MetadataPropertyTest.php:80
MetadataPropertyTest\testControlledVocabWithoutParameter
testControlledVocabWithoutParameter()
Definition: MetadataPropertyTest.php:89
MetadataPropertyTest\testSetUnsupportedCardinality
testSetUnsupportedCardinality()
Definition: MetadataPropertyTest.php:125
MetadataPropertyTest
Test class for MetadataProperty.
Definition: MetadataPropertyTest.php:23
MetadataPropertyTest\testValidateInteger
testValidateInteger()
Definition: MetadataPropertyTest.php:199
MetadataDescription
Class modeling a description (DCMI abstract model) or subject- predicate-object graph (RDF)....
Definition: MetadataDescription.inc.php:109
MetadataPropertyTest\testValidateMultitype
testValidateMultitype()
Definition: MetadataPropertyTest.php:232
MetadataProperty
Class representing metadata properties. It specifies type and cardinality of a meta-data property (=t...
Definition: MetadataProperty.inc.php:53
MetadataPropertyTest\testValidateString
testValidateString()
Definition: MetadataPropertyTest.php:133
MetadataPropertyTest\testMetadataPropertyConstructor
testMetadataPropertyConstructor()
Definition: MetadataPropertyTest.php:37
MetadataPropertyTest\testValidateDate
testValidateDate()
Definition: MetadataPropertyTest.php:182
MetadataPropertyTest\testSetUnsupportedType
testSetUnsupportedType()
Definition: MetadataPropertyTest.php:116
MetadataPropertyTest\testValidateComposite
testValidateComposite()
Definition: MetadataPropertyTest.php:210