Example #1
0
 /**
  * @test
  * @dataProvider bestShotCalculate
  * @param $score
  * @param $expectedBestShots
  */
 public function shouldCalculateBestShot($score, $expectedBestShots)
 {
     //given
     $this->gameUser->updateAttributes(['score' => $score]);
     $game101 = new Game101($this->game);
     //when
     $bestShots = $game101->getPlayersBestShots();
     //then
     $this->assertEquals($expectedBestShots, Arrays::getValue($bestShots, $this->gameUser->getId(), []));
 }
 /**
  * @test
  */
 public function shouldCreateHit()
 {
     //given
     $field = '25d';
     //when
     $this->post('/hit', ['field' => $field]);
     //then
     /** @var Hit $hit */
     $hit = Arrays::first(Hit::all());
     $this->assertEquals($this->gameUser->getId(), $hit->game_user_id);
     $this->assertEquals(25, $hit->field);
     $this->assertEquals(2, $hit->multiplier);
 }
Example #3
0
 /**
  * @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);
 }
Example #4
0
 /**
  * @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);
 }
Example #5
0
 /**
  * @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());
 }
Example #6
0
 /**
  * @test
  */
 public function shouldRestartLastGame()
 {
     //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]);
     //when
     Game::restart();
     //then
     $game = Game::findUnfinishedGame();
     $this->assertFalse($game->isFinished());
     $this->assertTrue($game->isStarted());
     Assert::thatArray(GameUser::where(['game_id' => $game->getId()])->fetchAll())->hasSize(2)->onProperty('user_id')->containsExactly($user1->getId(), $user2->getId());
 }
Example #7
0
 /**
  * @return bool
  */
 public function hasPlayers()
 {
     return GameUser::count(['game_id' => $this->id]) > 0;
 }
Example #8
0
 /**
  * @return int
  */
 public function countWonGames()
 {
     return GameUser::where(['user_id' => $this->id])->innerJoin('winner_game')->count();
 }