Open Journal Systems  3.3.0
FilterDAOTest.php
1 <?php
2 
17 import('lib.pkp.tests.DatabaseTestCase');
18 import('lib.pkp.classes.filter.FilterDAO');
19 import('lib.pkp.classes.filter.FilterGroup');
20 
25  protected function getAffectedTables() {
26  return array('filters', 'filter_settings', 'filter_groups');
27  }
28 
29  protected function setUp() : void {
30  parent::setUp();
31 
32  // Create a test filter group.
33  $someGroup = new FilterGroup();
34  $someGroup->setSymbolic('test-filter-group');
35  $someGroup->setDisplayName('some.test.filter.group.display');
36  $someGroup->setDescription('some.test.filter.group.description');
37  $someGroup->setInputType('primitive::string');
38  $someGroup->setOutputType('primitive::string');
39  $filterGroupDao = DAORegistry::getDAO('FilterGroupDAO'); /* @var $filterGroupDao FilterGroupDAO */
40  self::assertTrue(is_integer($filterGroupId = $filterGroupDao->insertObject($someGroup)));
41  }
42 
46  public function testFilterCrud() {
47  $filterDao = DAORegistry::getDAO('FilterDAO'); /* @var $filterDao FilterDAO */
48 
49  // Install a test filter object.
50  $settings = array('seq' => '1', 'some-key' => 'some-value');
51  $testFilter = $filterDao->configureObject('lib.pkp.tests.classes.filter.PersistableTestFilter', 'test-filter-group', $settings, false, 9999);
52  self::assertInstanceOf('PersistableFilter', $testFilter);
53  $filterId = $testFilter->getId();
54  self::assertTrue(is_integer($filterId));
55 
56  // Insert filter instance.
57  self::assertTrue(is_numeric($filterId));
58  self::assertTrue($filterId > 0);
59 
60  // Retrieve filter instance by id.
61  $filterById = $filterDao->getObjectById($filterId);
62  self::assertEquals($testFilter, $filterById);
63 
64  // Retrieve filter by group.
65  $filtersByGroup = $filterDao->getObjectsByGroup('test-filter-group', 9999);
66  self::assertTrue(count($filtersByGroup) == 1);
67  $filterByGroup = array_pop($filtersByGroup);
68  self::assertEquals($testFilter, $filterByGroup);
69 
70  // Retrieve filter by class.
71  $filtersByClassFactory = $filterDao->getObjectsByClass('lib.pkp.tests.classes.filter.PersistableTestFilter', 9999);
72  self::assertTrue($filtersByClassFactory->getCount() == 1);
73  $filterByClass = $filtersByClassFactory->next();
74  self::assertEquals($testFilter, $filterByClass);
75 
76  // Retrieve filter by group and class.
77  $filtersByGroupAndClassFactory = $filterDao->getObjectsByGroupAndClass('test-filter-group', 'lib.pkp.tests.classes.filter.PersistableTestFilter', 9999);
78  self::assertTrue($filtersByGroupAndClassFactory->getCount() == 1);
79  $filterByGroupAndClass = $filtersByGroupAndClassFactory->next();
80  self::assertEquals($testFilter, $filterByGroupAndClass);
81 
82  // Update filter instance.
83  $testFilter->setData('some-key', 'another value');
84  $testFilter->setIsTemplate(true);
85 
86  $filterDao->updateObject($testFilter);
87  $filterAfterUpdate = $filterDao->getObject($testFilter);
88  self::assertEquals($testFilter, $filterAfterUpdate);
89 
90  // Delete filter instance.
91  $filterDao->deleteObject($testFilter);
92  self::assertNull($filterDao->getObjectById($filterId));
93  }
94 
95  public function testCompositeFilterCrud() {
96  $this->markTestSkipped();
97  $filterDao = DAORegistry::getDAO('FilterDAO');
98 
99  // sub-filter 1
100  $subFilter1Settings = array('seq' => 1, 'displayName' => '1st sub-filter');
101  $subFilter1 = $filterDao->configureObject('lib.pkp.tests.classes.filter.PersistableTestFilter', 'test-filter-group', $subFilter1Settings, false, 9999, array(), false);
102 
103  // sub-sub-filters for sub-filter 2
104  $subSubFilter1Settings = array('seq' => 1, 'displayName' => '1st sub-sub-filter');
105  $subSubFilter1 = $filterDao->configureObject('lib.pkp.tests.classes.filter.PersistableTestFilter', 'test-filter-group', $subSubFilter1Settings, false, 9999, array(), false);
106  $subSubFilter2Settings = array('seq' => 2, 'displayName' => '2nd sub-sub-filter');
107  $subSubFilter2 = $filterDao->configureObject('lib.pkp.tests.classes.filter.PersistableTestFilter', 'test-filter-group', $subSubFilter2Settings, false, 9999, array(), false);
108  $subSubFilters = array($subSubFilter1, $subSubFilter2);
109 
110  // sub-filter 2
111  $subFilter2Settings = array('seq' => 2, 'displayName' => '2nd sub-filter');
112  $subFilter2 = $filterDao->configureObject('lib.pkp.classes.filter.GenericMultiplexerFilter', 'test-filter-group', $subFilter2Settings, false, 9999, $subSubFilters, false);
113 
114  // Instantiate a composite test filter object
115  $subFilters = array($subFilter1, $subFilter2);
116  $testFilter = $filterDao->configureObject('lib.pkp.classes.filter.GenericSequencerFilter', 'test-filter-group', array('seq' => 1), false, 9999, $subFilters);
117  self::assertInstanceOf('GenericSequencerFilter', $testFilter);
118  $filterId = $testFilter->getId();
119  self::assertTrue(is_numeric($filterId));
120  self::assertTrue($filterId > 0);
121 
122  // Check that sub-filters were correctly
123  // linked to the composite filter.
124  $subFilters =& $testFilter->getFilters();
125  self::assertEquals(2, count($subFilters));
126  foreach($subFilters as $subFilter) {
127  self::assertTrue($subFilter->getId() > 0);
128  self::assertEquals($filterId, $subFilter->getParentFilterId());
129  }
130  $subSubFilters =& $subFilters[2]->getFilters();
131  self::assertEquals(2, count($subSubFilters));
132  foreach($subSubFilters as $subSubFilter) {
133  self::assertTrue($subSubFilter->getId() > 0);
134  self::assertEquals($subFilters[2]->getId(), $subSubFilter->getParentFilterId());
135  }
136 
137  // Retrieve filter instance by id
138  $filterById = $filterDao->getObjectById($filterId);
139  self::assertEquals($testFilter, $filterById);
140 
141  // Update filter instance
142  $testFilter = new GenericSequencerFilter($testFilter->getFilterGroup());
143  $testFilter->setDisplayName('composite filter');
144  $testFilter->setSequence(9999);
145  $testFilter->setId($filterId);
146  $testFilter->setIsTemplate(true);
147 
148  // leave out (sub-)sub-filter 2 but add a new (sub-)sub-filter 3
149  // to test recursive update.
150  $testFilter->addFilter($subFilter1);
151  $subFilter3 = new GenericMultiplexerFilter($testFilter->getFilterGroup());
152  $subFilter3->setDisplayName('3rd sub-filter');
153  $subFilter3->addFilter($subSubFilter1);
154  $subSubFilter3 = new PersistableTestFilter($testFilter->getFilterGroup());
155  $subSubFilter3->setDisplayName('3rd sub-sub-filter');
156  $subFilter3->addFilter($subSubFilter3);
157  $testFilter->addFilter($subFilter3);
158 
159  $filterDao->updateObject($testFilter);
160  $filterAfterUpdate = $filterDao->getObject($testFilter);
161  self::assertEquals($testFilter, $filterAfterUpdate);
162 
163  // Delete filter instance
164  $filterDao->deleteObject($testFilter);
165  self::assertNull($filterDao->getObjectById($filterId));
166  }
167 }
168 
PersistableTestFilter
Test class to be used to test the FilterDAO.
Definition: PersistableTestFilter.inc.php:18
GenericMultiplexerFilter
A generic filter that is configured with a number of equal type filters. It takes the input argument,...
Definition: GenericMultiplexerFilter.inc.php:23
FilterGroup
Class that represents filter groups.
Definition: FilterGroup.inc.php:45
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
FilterDAOTest\testFilterCrud
testFilterCrud()
Definition: FilterDAOTest.php:46
FilterDAOTest\setUp
setUp()
Definition: FilterDAOTest.php:29
FilterDAOTest\getAffectedTables
getAffectedTables()
Definition: FilterDAOTest.php:25
FilterDAOTest
Test class for FilterDAO.
Definition: FilterDAOTest.php:21
FilterDAOTest\testCompositeFilterCrud
testCompositeFilterCrud()
Definition: FilterDAOTest.php:95
GenericSequencerFilter
A generic filter that is configured with a number of ordered filters. It takes the input argument of ...
Definition: GenericSequencerFilter.inc.php:20
DatabaseTestCase
Base class for unit tests that require database support. The schema TestName.setUp....
Definition: DatabaseTestCase.inc.php:23