public function testGets()
 {
     $vm_ret = $this->opt_object->get('ca_objects.date.dc_dates_types', array('returnIdno' => true));
     $this->assertEquals('created', $vm_ret);
     $vm_ret = $this->opt_object->get('ca_objects.type_id', array('convertCodesToDisplayText' => true));
     $this->assertEquals('Image', $vm_ret);
     // there are two internal notes but we assume that only the current UI locale is returned, unless we explicitly say otherwise
     $vm_ret = $this->opt_object->get('ca_objects.internal_notes');
     $this->assertEquals("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ullamcorper sapien nec velit porta luctus.", $vm_ret);
     $vm_ret = $this->opt_object->get('internal_notes');
     $this->assertEquals("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ullamcorper sapien nec velit porta luctus.", $vm_ret);
     $vm_ret = $this->opt_object->get('ca_objects.external_link.url_source');
     $this->assertEquals("My URL source;Another URL source", $vm_ret);
     $vm_ret = $this->opt_object->get('ca_objects.dimensions.dimensions_length');
     $this->assertEquals("10.0 in", $vm_ret);
     $vm_ret = $this->opt_object->get('ca_objects.dimensions.dimensions_weight');
     $this->assertEquals("2.0000 lb", $vm_ret);
     $vm_ret = $this->opt_object->get('ca_objects.integer_test', array('delimiter' => ' / '));
     $this->assertEquals("23 / 1984", $vm_ret);
     $vm_ret = $this->opt_object->get('ca_objects.currency_test');
     $this->assertEquals("USD 100.00", $vm_ret);
     $vm_ret = $this->opt_object->get('ca_objects.georeference');
     $this->assertRegExp("/^1600 Amphitheatre Parkway, Mountain View, CA \\[[\\d\\.\\,\\-]+\\]/", $vm_ret);
     // This is how we fetch the bundle preview for containers:
     $vs_template = "<unit relativeTo='ca_objects.dimensions'><if rule='^measurement_notes =~ /foo/'>^ca_objects.dimensions.dimensions_length</if></unit>";
     $vm_ret = $this->opt_object->getAttributesForDisplay('dimensions', $vs_template);
     $this->assertEquals('10.0 in', $vm_ret);
     $vs_template = "<unit relativeTo='ca_objects.dimensions'><if rule='^measurement_notes =~ /foo/'>^dimensions_length</if></unit>";
     $vm_ret = $this->opt_object->getAttributesForDisplay('dimensions', $vs_template);
     $this->assertEquals('10.0 in', $vm_ret);
     // shouldn't return anything because the expression is false
     $vs_template = "<unit relativeTo='ca_objects.dimensions'><if rule='^measurement_notes =~ /bar/'>^ca_objects.dimensions.dimensions_length</if></unit>";
     $vm_ret = $this->opt_object->getAttributesForDisplay('dimensions', $vs_template);
     $this->assertEmpty($vm_ret);
     // 'flat' informationservice attribues
     $this->assertEquals('Coney Island', $this->opt_object->get('ca_objects.tgn'));
     $this->assertContains('Aaron Burr', $this->opt_object->get('ca_objects.wikipedia'));
     // subfield notation for "extra info"
     $this->assertContains('Burr killed his political rival Alexander Hamilton in a famous duel', $this->opt_object->get('ca_objects.wikipedia.abstract'));
     $this->assertEquals('40.5667', $this->opt_object->get('ca_objects.tgn.lat'));
     // informationservice attributes in container
     $this->assertEquals('[500024253] Haring, Keith (Persons, Artists) - American painter, muralist, and cartoonist, 1958-1990', $this->opt_object->get('ca_objects.informationservice.ulan_container'));
     $this->assertContains('Aaron Burr', $this->opt_object->get('ca_objects.informationservice.wiki'));
     $this->assertContains('Burr killed his political rival Alexander Hamilton in a famous duel', $this->opt_object->get('ca_objects.informationservice.wiki.abstract'));
 }
 public function testInsertLoadAndDeleteCycleWithCaObjectsModel()
 {
     $t_list = new ca_lists();
     $va_object_types = $t_list->getItemsForList('object_types');
     $this->assertGreaterThan(0, sizeof($va_object_types), "No object types available");
     $va_object_types = caExtractValuesByUserLocale($va_object_types);
     $this->assertGreaterThan(0, sizeof($va_object_types), "No locale-filtered object types available");
     $vn_locale_id = 1;
     $t_object = new ca_objects();
     $t_object->setMode(ACCESS_WRITE);
     $vn_item_id = 0;
     foreach ($va_object_types as $va_object_type) {
         if (intval($va_object_type['is_enabled']) === 1) {
             $vn_item_id = $va_object_type['item_id'];
         }
     }
     $this->assertGreaterThan(0, $vn_item_id, 'No enabled object type found');
     $t_object->set('type_id', $vn_item_id);
     $t_object->set('locale_id', $vn_locale_id);
     $t_object->set('idno', time());
     $t_object->addAttribute(array('description' => 'Test description', 'locale_id' => $vn_locale_id), 'description');
     $vb_res = $t_object->insert();
     $this->assertTrue($vb_res !== false, 'Insert returned non-true value');
     // insert() returns false OR the primary key, therefore simply asserting $vb_res being true doesn't cut it
     $this->assertEquals($t_object->numErrors(), 0, "Errors on insert: " . join('; ', $t_object->getErrors()));
     $this->opa_test_record_ids['ca_objects'][] = $t_object->getPrimaryKey();
     $vb_res = $t_object->addLabel(array('name' => 'Unit test object'), $vn_locale_id, null, true);
     $this->assertGreaterThan(0, $vb_res, 'AddLabel returned zero value but should return non-zero label_id: ' . join('; ', $t_object->getErrors()));
     $t_object2 = new ca_objects();
     $vb_res = $t_object2->load($t_object->getPrimaryKey());
     $this->assertTrue($vb_res, 'Load of newly created record failed [record does not seem to exist or return row id was invalid?]');
     $this->assertEquals($t_object2->getLabelForDisplay(), 'Unit test object', 'Retrieved row label does not match');
     $this->assertEquals($t_object2->getAttributesForDisplay('description'), 'Test description', 'Retrieved value for attribute "description" does not match expected value');
     // try to search for it
     $o_search = new ObjectSearch();
     $qr_hits = $o_search->search("Unit test object");
     $this->assertGreaterThan(0, $qr_hits->numHits(), 'Search for ca_object by label found no results');
     $vb_found_object = false;
     while ($qr_hits->nextHit()) {
         if ($qr_hits->get('object_id') == $t_object->getPrimaryKey()) {
             $vb_found_object = true;
             break;
         }
     }
     $this->assertTrue($vb_found_object, 'ca_object was not in returned search results for ca_object by label');
     // try delete
     $t_object->delete(true, array('hard' => true));
     $this->assertEquals($t_object->numErrors(), 0, "Errors on delete: " . join('; ', $t_object->getErrors()));
 }