Open Journal Systems  3.3.0
MetadataDescriptionTest.php
1 <?php
2 
17 import('lib.pkp.tests.PKPTestCase');
18 import('lib.pkp.classes.metadata.MetadataDescription');
19 
21  private $metadataDescription;
22  private static
23  $testStatements = array(
24  array('not-translated-one', 'nto', null),
25 
26  array('not-translated-many', 'ntm1', null),
27  array('not-translated-many', 'ntm2', null),
28 
29  array('translated-one', 'to_en', 'en_US'),
30  array('translated-one', 'to_de', 'de_DE'),
31 
32  array('translated-many', 'tm1_en', 'en_US'),
33  array('translated-many', 'tm1_de', 'de_DE'),
34  array('translated-many', 'tm2_en', 'en_US'),
35  array('translated-many', 'tm2_de', 'de_DE')
36  ),
38  'not-translated-one' => 'nto',
39  'not-translated-many' => array (
40  0 => 'ntm1',
41  1 => 'ntm2'
42  ),
43  'translated-one' => array (
44  'en_US' => 'to_en',
45  'de_DE' => 'to_de'
46  ),
47  'translated-many' => array (
48  'en_US' => array (
49  0 => 'tm1_en',
50  1 => 'tm2_en'
51  ),
52  'de_DE' => array (
53  0 => 'tm1_de',
54  1 => 'tm2_de'
55  )
56  )
57  );
58 
59  protected function setUp() : void {
60  parent::setUp();
61  $this->metadataDescription = new MetadataDescription('lib.pkp.tests.classes.metadata.TestSchema', ASSOC_TYPE_CITATION);
62  }
63 
67  public function testAddStatement() {
68  foreach (self::$testStatements as $test) {
69  $this->metadataDescription->addStatement($test[0], $test[1], $test[2]);
70  }
71 
72  self::assertEquals(self::$testStatementsData, $this->metadataDescription->getAllData());
73  }
74 
75  public function testSetStatements() {
76  $testStatements = self::$testStatementsData;
77  $this->metadataDescription->setStatements($testStatements);
78  self::assertEquals($testStatements, $this->metadataDescription->getAllData());
79 
80  $testStatements = array (
81  'not-translated-one' => 'nto-new',
82  'not-translated-many' => array (
83  0 => 'ntm1-new',
84  1 => 'ntm2-new'
85  ),
86  'translated-one' => array (
87  'en_US' => 'to_en-new',
88  'de_DE' => 'to_de-new'
89  ),
90  'translated-many' => array (
91  'en_US' => array (
92  0 => 'tm1_en-new',
93  1 => 'tm2_en-new'
94  ),
95  'de_DE' => array (
96  0 => 'tm1_de-new',
97  1 => 'tm2_de-new'
98  )
99  )
100  );
101 
102  // Trying to replace a property with METADATA_DESCRIPTION_REPLACE_NOTHING
103  // should provoke an error.
104  $previousData = self::$testStatementsData;
105  self::assertFalse($this->metadataDescription->setStatements($testStatements, METADATA_DESCRIPTION_REPLACE_NOTHING));
106  self::assertEquals($previousData, $this->metadataDescription->getAllData());
107 
108  // Unset the offending property and try again - this should work
109  $previousData = self::$testStatementsData;
110  unset($previousData['not-translated-one']);
111  unset($previousData['translated-one']);
112  $this->metadataDescription->setAllData($previousData);
113  $expectedResult = self::$testStatementsData;
114  $expectedResult['not-translated-many'][] = 'ntm1-new';
115  $expectedResult['not-translated-many'][] = 'ntm2-new';
116  unset($expectedResult['translated-one']);
117  $expectedResult['translated-one']['en_US'] = 'to_en-new';
118  $expectedResult['translated-one']['de_DE'] = 'to_de-new';
119  $expectedResult['translated-many']['en_US'][] = 'tm1_en-new';
120  $expectedResult['translated-many']['en_US'][] = 'tm2_en-new';
121  $expectedResult['translated-many']['de_DE'][] = 'tm1_de-new';
122  $expectedResult['translated-many']['de_DE'][] = 'tm2_de-new';
123  unset($expectedResult['not-translated-one']);
124  $expectedResult['not-translated-one'] = 'nto-new';
125  self::assertTrue($this->metadataDescription->setStatements($testStatements, METADATA_DESCRIPTION_REPLACE_NOTHING));
126  self::assertEquals($expectedResult, $this->metadataDescription->getAllData());
127 
128  // Using the default replacement level (METADATA_DESCRIPTION_REPLACE_PROPERTY)
129  $previousData = self::$testStatementsData;
130  $this->metadataDescription->setAllData($previousData);
131  //unset($expectedResult['not-translated-many']);
132  //$expectedResult['not-translated-many'] = array('ntm1-new', 'ntm2-new');
133  self::assertTrue($this->metadataDescription->setStatements($testStatements));
134  self::assertEquals($testStatements, $this->metadataDescription->getAllData());
135 
136  // Now test METADATA_DESCRIPTION_REPLACE_ALL
137  self::assertTrue($this->metadataDescription->setStatements($testStatements, METADATA_DESCRIPTION_REPLACE_ALL));
138  self::assertEquals($testStatements, $this->metadataDescription->getAllData());
139 
140  // Test that an error in the test statements maintains the previous state
141  // of the description.
142  // 1) Set some initial state (and make a non-referenced copy for later comparison)
143  $previousData = array('non-translated-one' => 'previous-value');
144  $previousDataCopy = $previousData;
145  $this->metadataDescription->setAllData($previousData);
146  // 2) Create invalid test statement
147  $testStatements['non-existent-property'] = 'some-value';
148  // 3) Make sure that the previous data will always be restored when
149  // an error occurs.
150  self::assertFalse($this->metadataDescription->setStatements($testStatements));
151  self::assertEquals($previousDataCopy, $this->metadataDescription->getAllData());
152  self::assertFalse($this->metadataDescription->setStatements($testStatements, true));
153  self::assertEquals($previousDataCopy, $this->metadataDescription->getAllData());
154  }
155 }
156 
MetadataDescriptionTest\setUp
setUp()
Definition: MetadataDescriptionTest.php:59
PKPTestCase
Class that implements functionality common to all PKP unit test cases.
Definition: PKPTestCase.inc.php:27
MetadataDescriptionTest\testSetStatements
testSetStatements()
Definition: MetadataDescriptionTest.php:75
MetadataDescriptionTest\testAddStatement
testAddStatement()
Definition: MetadataDescriptionTest.php:67
MetadataDescriptionTest
Test class for MetadataDescription.
Definition: MetadataDescriptionTest.php:20
MetadataDescription
Class modeling a description (DCMI abstract model) or subject- predicate-object graph (RDF)....
Definition: MetadataDescription.inc.php:109
MetadataDescriptionTest\$testStatementsData
static $testStatementsData
Definition: MetadataDescriptionTest.php:37