Skip to content

Commit

Permalink
Max number of users on a wave is now total number of users / 2, first…
Browse files Browse the repository at this point in the history
… wave is limited to 2 users
  • Loading branch information
seblm committed Jan 22, 2012
1 parent 73e403b commit 2614eca
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 28 deletions.
12 changes: 7 additions & 5 deletions classes/Users.php
Expand Up @@ -77,13 +77,15 @@ public function putUserOnWave($user, $wave) {
public function getAvailableWaves() {
$userNamesByWave = $this->getUserNamesByWave();
$nbUsersByWave = array_map("count", $userNamesByWave);
$nbUsersInWaves = array_sum($nbUsersByWave) - $nbUsersByWave[0];
$minNbOfUsersForFirstWave = max(1, (int) ($nbUsersInWaves / 5) - 1);
$nbUsers = array_sum($nbUsersByWave);
$maxNbOfUsers = floor($nbUsers / 2) + 1;
$availableWaves = array();

for ($i = 1; $i <= 5; $i++) {
$maxNbOfUsers = $minNbOfUsersForFirstWave + $i - 1;
if ($maxNbOfUsers > count($userNamesByWave[$i])) {
if ($nbUsersByWave[1] < 2) {
array_push($availableWaves, 1);
}
for ($i = 2; $i <= 5; $i++) {
if ($nbUsersByWave[$i] < $maxNbOfUsers) {
array_push($availableWaves, $i);
}
}
Expand Down
46 changes: 23 additions & 23 deletions classes/UsersTest.php
Expand Up @@ -218,43 +218,43 @@ public function cant_put_null_user_on_wave() {
* @test
*/
public function should_retrieve_available_waves() {
$users = $this->fillWavesStartingFromSecond();
$this->users
->removeUserFromWaves($users[3][0])
->removeUserFromWaves($users[3][1])
->removeUserFromWaves($users[3][2])
->removeUserFromWaves($users[4][2]);
$this->users->putUserOnWave($this->users->retrieveUser($this->users->createUser("wave11@provider.com", "unknown", "wave11")), 2);
$this->users->putUserOnWave($this->users->retrieveUser($this->users->createUser("wave22@provider.com", "unknown", "wave12")), 2);

$availableWaves = $this->users->getAvailableWaves();

$this->assertCount(3, $availableWaves);
$this->assertCount(4, $availableWaves);
$this->assertContains(1, $availableWaves);
$this->assertContains(3, $availableWaves);
$this->assertContains(4, $availableWaves);
}

private function fillWavesStartingFromSecond() {
$users = array(array(), array(), );
for ($wave = 2; $wave <= 5; $wave++) {
$users[$wave] = array();
for ($i = 1; $i <= $wave; $i++) {
$token = $this->users->createUser("wave$wave$i@provider.com", "unknown", "wave$wave$i");
$user = $this->users->retrieveUser($token);
$this->users->putUserOnWave($user, $wave);
array_push($users[$wave], $user);
}
}
return $users;
$this->assertContains(5, $availableWaves);
}

/**
* @test
* @expectedException InvalidArgumentException
* @expectedExceptionMessage Wave 1 is full
*/
public function cant_get_into_wave_where_all_users_are_already_in_place() {
public function cant_get_into_wave_where_all_users_on_first_wave_are_already_in_place() {
$this->users->createUser("wave1@provider.com", "unkown", "wave");
$this->users->createUser("wave2@provider.com", "unkown", "wave");
$this->users->createUser("wave3@provider.com", "unkown", "wave");
$this->users->createUser("wave4@provider.com", "unkown", "wave");
$this->users->putUserOnWave($this->users->retrieveUser("JKi7IbcSBQmA71jB"), 1);
$this->users->putUserOnWave($this->users->retrieveUser($this->users->createUser("wave@provider.com", "unknown", "wave")), 1);
$this->users->putUserOnWave($this->users->retrieveUser($this->users->createUser("wave5@provider.com", "unknown", "wave")), 1);
$this->users->putUserOnWave($this->users->retrieveUser($this->users->createUser("wave6@provider.com", "unknown", "wave")), 1);
}

/**
* @test
* @expectedException InvalidArgumentException
* @expectedExceptionMessage Wave 2 is full
*/
public function cant_get_into_wave_where_all_users_on_all_waves_are_already_in_place() {
$this->users->putUserOnWave($this->users->retrieveUser($this->users->createUser("wave1@provider.com", "unknown", "wave")), 2);
$this->users->putUserOnWave($this->users->retrieveUser($this->users->createUser("wave2@provider.com", "unknown", "wave")), 2);
$this->users->putUserOnWave($this->users->retrieveUser($this->users->createUser("wave3@provider.com", "unknown", "wave")), 2);
$this->users->putUserOnWave($this->users->retrieveUser($this->users->createUser("wave4@provider.com", "unknown", "wave")), 2);
}

}
Expand Down

0 comments on commit 2614eca

Please sign in to comment.