public function setUp() { parent::setUp(); /** @var User $user */ $user = User::create(['login' => 'A']); $this->game = $game = Game::create(['type' => '101']); $this->gameUser = $gameUser = GameUser::create(['game_id' => $game->getId(), 'user_id' => $user->getId()]); $game->updateAttributes(['current_game_user_id' => $gameUser->getId()]); }
/** * @param int $id * @return GameUser */ public function addPlayer($id) { $ordinal = GameUser::count(['game_id' => $this->id]); /** @var GameUser $player */ $player = GameUser::create(['game_id' => $this->id, 'user_id' => $id, 'ordinal' => $ordinal]); $player->game = $this; if ($ordinal == 0) { $this->current_game_user_id = $player->id; $this->update(); } return $player; }
/** * @test */ public function shouldCalculateIsNotShittyRound() { //given $user = User::create(['login' => 'A']); $game = Game::create(['type' => 'cricket']); $gameUser = GameUser::create(['game_id' => $game->id, 'user_id' => $user->getId()]); $game->updateAttributes(['current_game_user_id' => $gameUser->getId()]); Hit::createFor('15t', $gameUser); Hit::createFor('16t', $gameUser); Hit::createFor('17t', $gameUser); //when $isShittyRound = $gameUser->isShittyRound(); //then $this->assertFalse($isShittyRound); }
/** * @test */ public function shouldReturnMaxWonStreak() { //given $user1 = User::create(['login' => 'A']); $user2 = User::create(['login' => 'B']); $game1 = Game::create(); $gameUser1 = GameUser::create(['game_id' => $game1->id, 'user_id' => $user1->id]); $game1->updateAttributes(['winner_game_user_id' => $gameUser1->id, 'finished' => true]); $game2 = Game::create(); $gameUser2 = GameUser::create(['game_id' => $game2->id, 'user_id' => $user1->id]); $game2->updateAttributes(['winner_game_user_id' => $gameUser2->id, 'finished' => true]); $game3 = Game::create(); $gameUser3 = GameUser::create(['game_id' => $game3->id, 'user_id' => $user2->id]); $game3->updateAttributes(['winner_game_user_id' => $gameUser3->id, 'finished' => true]); $game4 = Game::create(); $game4->addPlayer($user1->id); $game4->addPlayer($user2->id); //when $maxWonStreak = $user1->maxWonStreak(); //then $this->assertEquals(2, $maxWonStreak); }
/** * @test * @dataProvider hits */ public function shouldReturnIsScoredIfFieldIsInRange($hit, $isScored) { //given $user = User::create(['login' => 'A']); $game = Game::create(['type' => 'cricket']); $gameUser = GameUser::create(['game_id' => $game->id, 'user_id' => $user->getId()]); $game->updateAttributes(['current_game_user_id' => $gameUser->getId()]); //when $hit = Hit::createFor($hit, $gameUser); //then $this->assertEquals($isScored, $hit->isScored()); }
/** * @test */ public function shouldGetCorrectNextPlayerWhenPlayerIsInMultipleGames() { //given /** @var User $user1 */ $user1 = User::create(['login' => 'A']); /** @var User $user2 */ $user2 = User::create(['login' => 'B']); $game1 = Game::create(); $game1->addPlayer($user1->getId()); $game1->addPlayer($user2->getId()); $game1->updateAttributes(['finished' => true]); $game2 = Game::create(); $gameUser1 = GameUser::create(['game_id' => $game2->id, 'user_id' => $user1->getId(), 'ordinal' => 0]); $gameUser2 = GameUser::create(['game_id' => $game2->id, 'user_id' => $user2->getId(), 'ordinal' => 1]); $game2->updateAttributes(['current_game_user_id' => $gameUser1->getId()]); //when $game2->nextPlayer(); //then $game2->reload(); $this->assertEquals($gameUser2->getId(), $game2->current_game_user_id); }