CWIS Developer Documentation
Resource--Test.php
Go to the documentation of this file.
1 <?PHP
2 
3 class Resource_Test extends PHPUnit_Framework_TestCase
4 {
5  protected static $TestFieldIds;
6  protected static $TestFields;
7 
14  public static function setUpBeforeClass()
15  {
16  # construct the schema object
18 
19  self::$TestFieldIds = array();
20 
21  # outline fields to be created
22  self::$TestFields = array(
23  "TestTextField" => MetadataSchema::MDFTYPE_TEXT,
24  "TestTimestampField" => MetadataSchema::MDFTYPE_TIMESTAMP,
25  "TestParagraphField" => MetadataSchema::MDFTYPE_PARAGRAPH,
26  "TestUrlField" => MetadataSchema::MDFTYPE_URL,
27  "TestReferenceField" => MetadataSchema::MDFTYPE_REFERENCE,
28  "TestUserField" => MetadataSchema::MDFTYPE_USER,
29  "TestOptionField" => MetadataSchema::MDFTYPE_OPTION,
30  "TestCNameField" => MetadataSchema::MDFTYPE_CONTROLLEDNAME,
31  "TestTreeField" => MetadataSchema::MDFTYPE_TREE,
32  "TestDateField" => MetadataSchema::MDFTYPE_DATE,
33  "TestFlagField" => MetadataSchema::MDFTYPE_FLAG,
34  "TestNumberField" => MetadataSchema::MDFTYPE_NUMBER);
35 
36  # create the fields
37  foreach (self::$TestFields as $FieldName => $FieldType)
38  {
39  $TmpField = $Schema->GetItemByName($FieldName);
40  if ($TmpField === NULL)
41  {
42  $TmpField = $Schema->AddField($FieldName, $FieldType);
43  }
44  $TmpField->IsTempItem(FALSE);
45  self::$TestFieldIds[$FieldName] = $TmpField->Id();
46  }
47 
48  # Resource::Create() expects a user to be logged in,
49  # so log in an admin user
50  $UFactory = new CWUserFactory();
51  $Users = $UFactory->GetUsersWithPrivileges(
52  PRIV_RESOURCEADMIN, PRIV_COLLECTIONADMIN);
53  $UserIds = array_keys($Users);
54  $AdminUserId = array_pop($UserIds);
55  $AdminUser = new CWUser($AdminUserId);
56  $GLOBALS["G_User"]->Login($AdminUser->Name(), "", TRUE);
57  }
58 
63  public static function tearDownAfterClass()
64  {
65  # construct the schema object
66  $Schema = new MetadataSchema();
67  $Database = new Database();
68 
69  # drop all of the test fields
70  foreach (self::$TestFieldIds as $FieldName => $FieldId)
71  {
72  $Schema->DropField($FieldId);
73 
74  # remove from OAIFieldMappings too
75  $Database->Query("
76  DELETE FROM OAIFieldMappings
77  WHERE SPTFieldId = " . addslashes($FieldId));
78  }
79  }
80 
85  public function testGetSetClear()
86  {
87  # Create test-specific objects
89  $TestResource->IsTempResource(FALSE);
90  $TestReferenceResource = Resource::Create(MetadataSchema::SCHEMAID_DEFAULT);
91  $TestReferenceResource->IsTempResource(FALSE);
92  $TestClassification = Classification::Create("TestClassification",
93  self::$TestFieldIds['TestTreeField']);
94  $TestControlledName = new ControlledName(NULL, "TestControlledName",
95  self::$TestFieldIds['TestCNameField']);
96  $TestOptionCName = new ControlledName(NULL, "TestOptionCName",
97  self::$TestFieldIds['TestOptionField']);
98 
99  # Test get and set for each field
100  foreach (self::$TestFieldIds as $FieldName => $FieldId)
101  {
102  $Field = new MetadataField($FieldId);
103 
104  # whether, before testing equivalence, we need to pop the
105  # returned value out of an array
106  $BeforeTestArrayShift = FALSE;
107 
108  # if we're testing the object return, this is the object we'll compare it to.
109  unset($TestObject);
110 
111  switch ($Field->Type())
112  {
114  $TgtVal = "A test title";
115  break;
116 
118  $TgtVal = "http://testtesttest.com";
119  break;
120 
122  $TgtVal = "I am a test paragraph.";
123  break;
124 
126  $TgtVal = "0";
127  break;
128 
130  $TgtVal = "1";
131  break;
132 
134  $TgtVal = date("Y-m-d");
135  $TestObject = new Date(strval($TgtVal));
136  $TestObjectType = 'Date';
137  $TestFunctionName = 'BeginDate';
138  $TestFunctionArguments = NULL;
139  break;
140 
142  $TgtVal = date("Y-m-d H:i:s", strtotime($TgtVal));
143  break;
144 
146  $TgtVal = array();
147  $TgtVal[$TestClassification->Id()] = "TestClassification";
148  $TestObject = $TestClassification;
149  $TestObjectType = 'Classification';
150  $TestFunctionName = 'FullName';
151  $TestFunctionArguments = NULL;
152  $BeforeTestArrayShift = TRUE;
153  break;
154 
156  $TgtVal = array();
157  $TgtVal[$TestControlledName->Id()] = "TestControlledName";
158  $TestObject = $TestControlledName;
159  $TestObjectType = 'ControlledName';
160  $TestFunctionName = 'Name';
161  $TestFunctionArguments = NULL;
162  $BeforeTestArrayShift = TRUE;
163  break;
164 
166  $TgtVal = array();
167  $TgtVal[$TestOptionCName->Id()] = "TestOptionCName";
168  $TestObject = $TestOptionCName;
169  $TestObjectType = 'ControlledName';
170  $TestFunctionName = 'Name';
171  $TestFunctionArguments = NULL;
172  $BeforeTestArrayShift = TRUE;
173  break;
174 
176  $TestObject = new CWUser(1);
177  $TgtVal = array( 1 => $TestObject->Name() );
178  $TestObjectType = 'CWUser';
179  $TestFunctionName = 'Id';
180  $TestFunctionArguments = NULL;
181  $BeforeTestArrayShift = TRUE;
182  break;
183 
185  $TgtVal = array();
186  $TgtVal['X'] = 5;
187  $TgtVal['Y'] = 7;
188  break;
189 
191  $TestObject = $TestReferenceResource;
192  $TgtVal = array();
193  $TgtVal[$TestReferenceResource->Id()] = $TestReferenceResource->Id();
194  $TestFunctionName = 'Id';
195  $TestObjectType = 'Resource';
196  $TestFunctionArguments = NULL;
197  $BeforeTestArrayShift = TRUE;
198  break;
199 
200  default:
201  throw new Exception("Data type not handled.");
202  break;
203 
204  }
205 
206  # set the value on the test resource
207  $TestResource->Set($Field, $TgtVal);
208 
209  # assert the default get returns the expected value
210  $this->assertEquals($TgtVal, $TestResource->Get($Field));
211 
212  if (isset($TestObject))
213  {
214  $ReturnedObject = $TestResource->Get($Field, TRUE);
215 
216  if ($BeforeTestArrayShift)
217  {
218  $ReturnedObject = array_shift($ReturnedObject);
219  }
220 
221  $array_for_test_object = array($TestObject, $TestFunctionName);
222  $array_for_returned_object = array($ReturnedObject, $TestFunctionName);
223 
224  $this->assertEquals(call_user_func(
225  $array_for_returned_object, $TestFunctionArguments),
226  call_user_func($array_for_test_object, $TestFunctionArguments));
227 
228  $this->assertInstanceOf($TestObjectType, $ReturnedObject);
229  }
230 
231  # clear the value from the field
232  $TestResource->Clear($Field);
233 
234  switch ($Field->Type())
235  {
243  $TgtVal = NULL;
244  break;
245 
251  $TgtVal = array();
252  break;
253 
255  $TgtVal = array(
256  "X" => NULL,
257  "Y" => NULL );
258  break;
259 
260  default:
261  throw new Exception("Data type not handled.");
262  break;
263 
264  }
265 
266  $this->assertEquals($TgtVal, $TestResource->Get($Field));
267  }
268 
269  # Clean up function-specific objects.
270  $TestResource->Delete();
271  $TestReferenceResource->Delete();
272  $TestClassification->Delete();
273  $TestControlledName->Delete();
274  $TestOptionCName->Delete();
275  }
276 }
static tearDownAfterClass()
After to running the tests, this function is run.
Metadata schema (in effect a Factory class for MetadataField).
SQL database abstraction object with smart query caching.
Definition: Database.php:22
static Create($Name, $FieldId, $ParentId=NULL)
Add new classification to the hierarchy.
Definition: Date.php:18
Metadata type representing non-hierarchical controlled vocabulary values.
const MDFTYPE_CONTROLLEDNAME
static setUpBeforeClass()
Prior to running any of the tests, this function is run.
CWIS-specific user factory class.
static $TestFields
Object representing a locally-defined type of metadata field.
static $TestFieldIds
static Create($SchemaId)
Create a new resource.
Definition: Resource.php:48
CWIS-specific user class.
Definition: CWUser.php:13
testGetSetClear()
This function exercises the Resource get and set methods for each Metadata types using the fields cre...