public function testUpdateUserRole_JoinTwice_JoinedOnce()
 {
     $this->environ->clean();
     // setup user and project
     $project = $this->environ->createProject(SF_TESTPROJECT, SF_TESTPROJECTCODE);
     $projectId = $project->id->asString();
     $userId = $this->environ->createUser("existinguser", "Existing Name", "*****@*****.**");
     $params = array('id' => $userId);
     // update user role in project once
     $updatedUserId = ProjectCommands::updateUserRole($projectId, $userId);
     // read from disk
     $sameUser = new UserModel($updatedUserId);
     $sameProject = new ProjectModel($projectId);
     // user in project once and project has one user
     $this->assertEqual($sameProject->listUsers()->count, 1);
     $this->assertEqual($sameUser->listProjects($this->environ->website->domain)->count, 1);
     // update user role in project again
     $updatedUserId = ProjectCommands::updateUserRole($projectId, $userId);
     // read from disk again
     $sameProject->read($projectId);
     $sameUser->read($updatedUserId);
     // user still in project once and project still has one user
     $this->assertEqual($sameProject->listUsers()->count, 1);
     $this->assertEqual($sameUser->listProjects($this->environ->website->domain)->count, 1);
 }
 /**
  * 
  * @param string $projectId
  * @param string $userId
  * @param string $website
  * @param role $role
  * @param DeliveryInterface $delivery
  * @return \Api\Model\Mapper\IdReference|\Api\Model\UserModel
  */
 public static function acceptJoinRequest($projectId, $userId, $website, $role, DeliveryInterface $delivery = null)
 {
     $newUser = new UserModel($userId);
     $project = new ProjectModel();
     $project->read($projectId);
     ProjectCommands::updateUserRole($projectId, $userId, $role);
     // Make sure the user exists on the site
     if (!$newUser->hasRoleOnSite($website)) {
         $newUser->siteRole[$website->domain] = $website->userDefaultSiteRole;
     }
     // Determine if user is already a member of the project
     if ($project->userIsMember($newUser->id->asString())) {
         return $newUser->id;
     }
     $admin = new UserModel($project->ownerRef->asString());
     if ($admin->email != '') {
         Communicate::sendJoinRequestAccepted($newUser, $project, $website, $delivery);
     }
     return $admin;
 }