def test_report_match_when_you_have_played_your_opponent_one_less_than_the_max_number_of_times_should_create_match(self):
     test_match = fixtures.match(match_date=datetime.now() - timedelta(days=1), winner_id="TEST1", loser_id="TEST2")
     with patch.object(self.manager.dao, "get_ladder", return_value=open_ladder()):
         with patch.object(self.manager.dao, "get_player", return_value=fixtures.player()):
             with patch.object(self.manager.dao, "get_matches", return_value=[test_match] * 4):
                 with patch.object(self.manager.dao, "update_earned_points"):
                     with patch.object(self.manager.dao, "create_match", return_value=fixtures.match(winner_id="TEST1", loser_id="TEST2")) as create_match_mock:
                         with patch.object(self.manager.dao, "get_players", return_value=[
                             fixtures.player(user_=fixtures.user(user_id="TEST1", name="Player 1")),
                             fixtures.player(user_=fixtures.user(user_id="TEST2", name="Player 2")),
                         ]):
                             self.manager.report_match(1, create_match_dict("TEST1", "TEST2", 6, 0, 6, 0))
     create_match_mock.assert_called_once()
 def test_get_matches_adds_players_to_all_matches(self):
     with patch.object(self.manager.dao, "get_matches", return_value=[fixtures.match(match_id=1, winner_id="TEST1", loser_id="TEST2")]):
         with patch.object(self.manager.dao, "get_players", return_value=[
             fixtures.player(user_=fixtures.user(user_id="TEST1", name="Player 1")),
             fixtures.player(user_=fixtures.user(user_id="TEST2", name="Player 2")),
         ]):
             matches = self.manager.get_matches(1, "TEST1")
     self.assertIsNotNone(matches)
     self.assertEqual(1, len(matches))
     self.assertEqual(1, matches[0].match_id)
     self.assertEqual("TEST1", matches[0].winner.user.user_id)
     self.assertEqual("Player 1", matches[0].winner.user.name)
     self.assertEqual("TEST2", matches[0].loser.user.user_id)
     self.assertEqual("Player 2", matches[0].loser.user.name)
    def test_update_match_with_valid_match_should_update_match_with_new_points_as_well_as_players_points_and_return_updated_match(self):
        existing_match = fixtures.match(
            ladder_id=1,
            match_date=datetime(2020, 1, 2, 3, 4, 5),
            winner_id='TEST1',
            loser_id='TEST2',
            winner_set1_score=6,
            loser_set1_score=0,
            winner_set2_score=0,
            loser_set2_score=6,
            winner_set3_score=6,
            loser_set3_score=0,
            winner_points=33,
            loser_points=6
        )
        with patch.object(self.manager.dao, "get_match", return_value=existing_match):
            with patch.object(self.manager.dao, "update_match") as update_match_mock:
                with patch.object(self.manager.dao, "update_earned_points") as update_earned_points_mock:
                    with patch.object(self.manager.dao, "get_players", return_value=[
                        fixtures.player(user_=fixtures.user(user_id="TEST1", name="Player 1")),
                        fixtures.player(user_=fixtures.user(user_id="TEST2", name="Player 2")),
                    ]):
                        returned_match = self.manager.update_match_scores(1, create_match_dict('BAD1', 'BAD2', 6, 0, 0, 6, 6, 1, ladder_id=2))
        # Test that returned value has winner/loser info
        self.assertEqual("Player 1", returned_match.winner.user.name)
        self.assertEqual("Player 2", returned_match.loser.user.name)

        # Test that the update was made
        update_match_mock.assert_called_once()
        updated_match = update_match_mock.call_args.args[0]
        # Test values that should have updated
        self.assertEqual(6, updated_match.winner_set1_score)
        self.assertEqual(0, updated_match.loser_set1_score)
        self.assertEqual(0, updated_match.winner_set2_score)
        self.assertEqual(6, updated_match.loser_set2_score)
        self.assertEqual(6, updated_match.winner_set3_score)
        self.assertEqual(1, updated_match.loser_set3_score)
        self.assertEqual(32, updated_match.winner_points)
        self.assertEqual(7, updated_match.loser_points)
        # Test values that shouldn't update
        self.assertEqual(1, updated_match.ladder_id)
        self.assertEqual(datetime(2020, 1, 2, 3, 4, 5), updated_match.match_date)
        self.assertEqual("TEST1", updated_match.winner_id)
        self.assertEqual("TEST2", updated_match.loser_id)

        # Test earned points updated
        self.assertEqual(2, update_earned_points_mock.call_count)
        update_earned_points_mock.assert_any_call(1, "TEST1", -1)
        update_earned_points_mock.assert_any_call(1, "TEST2", 1)
 def test_report_match_where_players_are_too_far_apart_when_distance_penalty_off_should_create_match(self):
     with patch.object(self.manager.dao, "get_ladder", return_value=open_ladder(distance_penalty_on=False)):
         with patch.object(self.manager.dao, "get_player", side_effect=[
             fixtures.player(ranking=1),
             fixtures.player(ranking=17),
         ]):
             with patch.object(self.manager.dao, "get_matches", return_value=[]):
                 with patch.object(self.manager.dao, "update_earned_points"):
                     with patch.object(self.manager.dao, "create_match", return_value=fixtures.match(winner_id="TEST1", loser_id="TEST2")) as create_match_mock:
                         with patch.object(self.manager.dao, "get_players", return_value=[
                             fixtures.player(user_=fixtures.user(user_id="TEST1", name="Player 1")),
                             fixtures.player(user_=fixtures.user(user_id="TEST2", name="Player 2")),
                         ]):
                             self.manager.report_match(1, create_match_dict("TEST1", "TEST17", 6, 0, 6, 0))
     create_match_mock.assert_called_once()
 def test_update_match_when_the_winner_would_go_below_the_min_amount_should_stay_at_min_amount(self):
     existing_match = fixtures.match(ladder_id=1, winner_id='TEST1', loser_id='TEST2', winner_set1_score=6, loser_set1_score=0, winner_set2_score=6, loser_set2_score=0, winner_points=Match.MIN_WINNER_POINTS, loser_points=0)
     with patch.object(self.manager.dao, "get_match", return_value=existing_match):
         with patch.object(self.manager.dao, "update_match") as update_match_mock:
             with patch.object(self.manager.dao, "update_earned_points") as update_earned_points_mock:
                 with patch.object(self.manager.dao, "get_players", return_value=[
                     fixtures.player(user_=fixtures.user(user_id="TEST1", name="Player 1")),
                     fixtures.player(user_=fixtures.user(user_id="TEST2", name="Player 2")),
                 ]):
                     self.manager.update_match_scores(1, create_match_dict('BAD1', 'BAD2', 6, 0, 6, 1))
     update_match_mock.assert_called_once()
     updated_match = update_match_mock.call_args.args[0]
     self.assertIsNotNone(updated_match)
     self.assertEqual(Match.MIN_WINNER_POINTS, updated_match.winner_points)  # Can't go below the min amount, even though you're losing points
     self.assertEqual(1, updated_match.loser_points)
     self.assertEqual(2, update_earned_points_mock.call_count)
     update_earned_points_mock.assert_any_call(1, "TEST1", 0)
     update_earned_points_mock.assert_any_call(1, "TEST2", 1)
Exemple #6
0
 def test_match_serialization_contract(self):
     with patch.object(self.handler.manager,
                       "get_ladders",
                       return_value=[
                           Match(
                               1, 2, datetime(2020, 1, 2, 3, 4,
                                              5), "winner_id", "loser_id",
                               6, 0, 5, 7, 10, 8, 24, 12,
                               fixtures.player(
                                   user_=fixtures.user(user_id="winner_id"),
                                   ladder_id=2),
                               fixtures.player(
                                   user_=fixtures.user(user_id="loser_id"),
                                   ladder_id=2))
                       ]):
         response = self.handler.handle(create_event("/ladders"))
     self.assertEqual(
         """[{"match_id": 1, "ladder_id": 2, "match_date": "2020-01-02T03:04:05Z", "winner_id": "winner_id", "loser_id": "loser_id", "winner_set1_score": 6, "loser_set1_score": 0, "winner_set2_score": 5, "loser_set2_score": 7, "winner_set3_score": 10, "loser_set3_score": 8, "winner_points": 24, "loser_points": 12, "winner": {"user": {"user_id": "winner_id", "name": "", "email": "", "phone_number": null, "photo_url": null, "availability_text": null, "admin": false}, "ladder_id": 2, "score": 0, "earned_points": 0, "borrowed_points": 0, "ranking": 0, "wins": 0, "losses": 0}, "loser": {"user": {"user_id": "loser_id", "name": "", "email": "", "phone_number": null, "photo_url": null, "availability_text": null, "admin": false}, "ladder_id": 2, "score": 0, "earned_points": 0, "borrowed_points": 0, "ranking": 0, "wins": 0, "losses": 0}}]""",
         response["body"])
 def test_report_match_valid_match_should_update_player_scores_and_create_match_with_new_date(self, _):
     with patch.object(self.manager.dao, "get_ladder", return_value=open_ladder()):
         with patch.object(self.manager.dao, "get_match", return_value=fixtures.match()):
             with patch.object(self.manager.dao, "get_player", return_value=fixtures.player()):
                 with patch.object(self.manager.dao, "get_matches", return_value=[]):
                     with patch.object(self.manager.dao, "update_earned_points") as update_earned_points_mock:
                         with patch.object(self.manager.dao, "create_match", return_value=fixtures.match(winner_id="TEST1", loser_id="TEST2")) as create_match_mock:
                             with patch.object(self.manager.dao, "get_players", return_value=[
                                 fixtures.player(user_=fixtures.user(user_id="TEST1")),
                                 fixtures.player(user_=fixtures.user(user_id="TEST2"))
                             ]):
                                 match = self.manager.report_match(1, create_match_dict("TEST1", "TEST2", 6, 0, 6, 0))
     self.assertIsNotNone(match)
     self.assertEqual(2, update_earned_points_mock.call_count)
     update_earned_points_mock.assert_any_call(1, "TEST1", 10)
     update_earned_points_mock.assert_any_call(1, "TEST2", 5)
     create_match_mock.assert_called_once()
     saved_match = create_match_mock.call_args.args[0]
     self.assertIsNotNone(saved_match)
     self.assertIsNotNone(saved_match.match_date)
    def test_update_user_specifying_all_info_should_only_update_info_that_can_be_updated(self):
        user = fixtures.user()
        with patch.object(self.manager.dao, "update_user") as update_user_mock:
            with patch.object(self.manager.dao, "get_user", return_value=user):
                returned_user = self.manager.update_user(self.manager.user.user_id, {"user_id": "bad", "name": "new name", "email": "new email", "phone_number": "new phone", "photo_url": "new url", "availability_text": "new availability"})
        self.assertEqual(user, returned_user)

        update_user_mock.assert_called_once()
        saved_user = update_user_mock.call_args.args[0]
        self.assertNotEqual("bad", saved_user.user_id)
        self.assertEqual("new name", saved_user.name)
        self.assertEqual("new email", saved_user.email)
        self.assertEqual("new phone", saved_user.phone_number)
        self.assertEqual("new url", saved_user.photo_url)
        self.assertEqual("new availability", saved_user.availability_text)
 def test_get_user_get_another_player_in_your_ladder(self):
     returned_user = fixtures.user()
     with patch.object(self.manager.dao, "in_same_ladder", return_value=True):
         with patch.object(self.manager.dao, "get_user", return_value=returned_user):
             user = self.manager.get_user("TEST1")
     self.assertEqual(user, returned_user)
 def test_get_user_get_yourself(self):
     returned_user = fixtures.user()
     with patch.object(self.manager.dao, "get_user", return_value=returned_user):
         user = self.manager.get_user(self.manager.user.user_id)
     self.assertEqual(user, returned_user)
 def test_validate_token_with_existing_user(self):
     with patch.object(self.manager.firebase_client, "get_firebase_user", return_value={"user_id": "FB_ID"}):
         existing_user = fixtures.user()
         with patch.object(self.manager.dao, "get_user", return_value=existing_user):
             self.manager.validate_token("")
     self.assertEqual(existing_user, self.manager.user)
 def test_delete_match_when_not_an_admin(self):
     self.manager.user = fixtures.user(admin=False)
     self.assert_error(lambda: self.manager.delete_match(0), 403, "Only admins can delete matches")
 def test_update_match_when_the_user_isnt_an_admin(self):
     self.manager.user = fixtures.user(admin=False)
     self.assert_error(lambda: self.manager.update_match_scores(0, {}), 403, "Only admins can update matches")
 def test_update_player_when_not_an_admin(self):
     self.manager.user = fixtures.user(admin=False)
     self.assert_error(lambda: self.manager.update_player(None, None, None), 403, "Only admins can update players")
 def setUp(self):
     self.manager = ManagerImpl(FirebaseClient(), Dao())
     self.manager.user = fixtures.user(user_id="USER1", admin=True)