function testCanActOnTarget_Pub_Verify()
 {
     $n2 = Notebook::getOneFromDb(['notebook_id' => 1003], $this->DB);
     // owned by 102
     $actions_list = Action::getAllFromDb([], $this->DB);
     $actions = [];
     foreach ($actions_list as $act_elt) {
         $actions[$act_elt->name] = $act_elt;
     }
     $rat = new Role_Action_Target(['last_user_id' => 110, 'role_id' => 3, 'action_id' => 1, 'target_type' => 'notebook', 'target_id' => 1003, 'DB' => $this->DB]);
     $rat->updateDb();
     $this->assertTrue($rat->matchesDb);
     // basic, field user
     $u = User::getOneFromDb(['user_id' => 101], $this->DB);
     $this->assertFalse($n2->flag_workflow_published);
     $this->assertFalse($n2->flag_workflow_validated);
     $this->assertFalse($u->canActOnTarget($actions['view'], $n2));
     $this->assertFalse($u->canActOnTarget($actions['edit'], $n2));
     $this->assertTrue($u->canActOnTarget($actions['create'], $n2));
     $this->assertFalse($u->canActOnTarget($actions['delete'], $n2));
     $this->assertFalse($u->canActOnTarget($actions['publish'], $n2));
     $this->assertFalse($u->canActOnTarget($actions['verify'], $n2));
     $n2->flag_workflow_published = true;
     $n2->updateDb();
     $this->assertTrue($n2->matchesDb);
     $u->clearCaches();
     $this->assertFalse($u->canActOnTarget($actions['view'], $n2));
     $this->assertFalse($u->canActOnTarget($actions['edit'], $n2));
     $this->assertTrue($u->canActOnTarget($actions['create'], $n2));
     $this->assertFalse($u->canActOnTarget($actions['delete'], $n2));
     $this->assertFalse($u->canActOnTarget($actions['publish'], $n2));
     $this->assertFalse($u->canActOnTarget($actions['verify'], $n2));
     $n2->flag_workflow_validated = true;
     $n2->updateDb();
     $this->assertTrue($n2->matchesDb);
     $u->clearCaches();
     $this->assertTrue($u->canActOnTarget($actions['view'], $n2));
     $this->assertFalse($u->canActOnTarget($actions['edit'], $n2));
     $this->assertTrue($u->canActOnTarget($actions['create'], $n2));
     $this->assertFalse($u->canActOnTarget($actions['delete'], $n2));
     $this->assertFalse($u->canActOnTarget($actions['publish'], $n2));
     $this->assertFalse($u->canActOnTarget($actions['verify'], $n2));
 }
 function testRenderAsListItem_Editable()
 {
     $ap = Authoritative_Plant::getOneFromDb(['authoritative_plant_id' => 5001], $this->DB);
     global $USER;
     $USER = User::getOneFromDb(['username' => TESTINGUSER], $this->DB);
     //$this->todo('make user able to edit the authoritative plant');
     $rat = new Role_Action_Target(['role_action_target_link_id' => 500, 'last_user_id' => 0, 'role_id' => 3, 'action_id' => 2, 'target_type' => 'global_plant', 'target_id' => 0, 'DB' => $this->DB]);
     $rat->updateDb();
     $this->assertTrue($rat->matchesDb);
     $canonical = '<li data-authoritative_plant_id="5001" data-created_at="' . $ap->created_at . '" data-updated_at="' . $ap->updated_at . '" ' . 'data-class="AP_A_class" data-order="AP_A_order" data-family="AP_A_family" data-genus="AP_A_genus" data-species="AP_A_species" data-variety="AP_A_variety" data-catalog_identifier="AP_1_CI" data-flag_active="1" data-flag_delete="0" data-can-edit="1"><i class="icon-ok"></i> <a href="/digitalfieldnotebooks/app_code/authoritative_plant.php?action=view&authoritative_plant_id=5001">' . htmlentities($ap->renderAsShortText()) . '</a></li>';
     $rendered = $ap->renderAsListItem();
     //            echo "<pre>\n".htmlentities($canonical)."\n".htmlentities($rendered)."\n</pre>";
     $this->assertEqual($canonical, $rendered);
     $rat->doDelete();
     unset($USER);
 }