/** * @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); }
/** * @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 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()); }
/** * @return bool */ public function hasPlayers() { return GameUser::count(['game_id' => $this->id]) > 0; }
/** * @return int */ public function countWonGames() { return GameUser::where(['user_id' => $this->id])->innerJoin('winner_game')->count(); }