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; }