示例#1
0
 def test_league_table(self):
     DBSetup().g72_finished()
     DBSetup().g62_finished()
     expected_overall_table = get_df_from_json('league_table_overall.json')
     league_table = LeagueTable()
     assert league_table.get_standing(Season.objects.first()).to_json(
     ) == expected_overall_table.to_json()
示例#2
0
 def test_get_all_livetickers_only_scheduled(self):
     gameday_one = DBSetup().g62_status_empty()
     first_game_gameday_one = Gameinfo.objects.filter(
         gameday=gameday_one).first()
     # only first two games shall be the next scheduled games
     Gameinfo.objects.filter(gameday=gameday_one,
                             pk__gt=first_game_gameday_one.pk +
                             1).update(scheduled='11:00')
     gameday_two = DBSetup().g62_status_empty()
     first_game_gameday_two = Gameinfo.objects.filter(
         gameday=gameday_two).first()
     # only first two games for second gameday shall be the next scheduled games
     Gameinfo.objects.filter(gameday=gameday_two,
                             pk__gt=first_game_gameday_two.pk +
                             1).update(scheduled='11:00')
     Gameday.objects.all().update(date=datetime.today())
     response = self.app.get(reverse(API_LIVETICKER_ALL))
     assert response.status_code == HTTPStatus.OK
     assert len(response.json) == 4
     expected_result = self.expected_liveticker_result
     expected_result['gameId'] = first_game_gameday_one.pk
     print('expected_result', expected_result)
     print('actual_result', response.json[0])
     assert response.json[0] == expected_result
     expected_result['gameId'] = first_game_gameday_two.pk
     assert response.json[2] == expected_result
 def test_post_team_log_updates_score(self):
     DBSetup().g62_status_empty()
     firstGame = Gameinfo.objects.first()
     response = self.app.post_json(reverse(API_GAMELOG,
                                           kwargs={'id': firstGame.pk}), {
                                               'team':
                                               'A1',
                                               'gameId':
                                               firstGame.pk,
                                               'half':
                                               1,
                                               'event': [{
                                                   'name': 'Touchdown',
                                                   'player': '19'
                                               }, {
                                                   'name': '2-Extra-Punkte',
                                                   'player': '7'
                                               }]
                                           },
                                   headers=DBSetup().get_token_header())
     assert response.status_code == HTTPStatus.CREATED
     home: Gameresult = Gameresult.objects.get(gameinfo=firstGame,
                                               isHome=True)
     away: Gameresult = Gameresult.objects.get(gameinfo=firstGame,
                                               isHome=False)
     assert home.fh == 8
     assert away.fh == 0
示例#4
0
 def test_delete_entry(self):
     DBSetup().g62_status_empty()
     game = DBSetup().create_teamlog_home_and_away()
     game_service = GameService(game.pk)
     gamelog = game_service.delete_gamelog(2)
     assert gamelog.get_home_score() == 34
     assert gamelog.get_home_firsthalf_score() == 13
示例#5
0
 def test_league_table_by_division_for_multiple_seasons(self):
     test_season = Season.objects.create(name='test season')
     another_season = Season.objects.create(name='another season')
     any_season = Season.objects.create(name='any season')
     all_seasons = [test_season, another_season, any_season]
     DBSetup().g62_finished(season=test_season)
     DBSetup().g72_finished(season=another_season)
     DBSetup().g62_finished(season=any_season)
     DBSetup().g72_finished(season=any_season)
     west = League.objects.create(name='west')
     south = League.objects.create(name='south')
     teams_A = Team.objects.filter(name__startswith='A')
     teams_B = Team.objects.filter(name__startswith='B')
     for season in all_seasons:
         for team in teams_A:
             SeasonLeagueTeam.objects.create(season=season,
                                             league=south,
                                             team=team)
         for team in teams_B:
             SeasonLeagueTeam.objects.create(season=season,
                                             league=west,
                                             team=team)
     expected_overall_table = get_df_from_json(
         'league_table_division_south.json')
     league_table = LeagueTable()
     assert league_table.get_standing(
         league='south',
         season=any_season).to_json() == expected_overall_table.to_json()
 def test_officials_get(self):
     DBSetup().g62_status_empty()
     last_game = Gameinfo.objects.last()
     DBSetup().create_game_officials(last_game)
     response = self.app.get(
         reverse(API_GAME_OFFICIALS, kwargs={'pk': last_game.pk}))
     assert response.status_code == HTTPStatus.OK
     assert len(response.json) == 5
    def test_has_finalround(self):
        gameday_with_finalround = DBSetup().g62_finalround()
        gameday_with_main_round = DBSetup().create_main_round_gameday()
        gmw = GamedayModelWrapper(gameday_with_finalround.pk)
        assert gmw.has_finalround()

        gmw = GamedayModelWrapper(gameday_with_main_round.pk)
        assert not gmw.has_finalround()
 def test_put_game_possession(self):
     DBSetup().g62_status_empty()
     last_game: Gameinfo = Gameinfo.objects.last()
     assert last_game.in_possession == 'A1'
     response = self.app.put_json(reverse(API_GAME_POSSESSION,
                                          kwargs={'pk': last_game.pk}),
                                  {'team': 'name of team'},
                                  headers=DBSetup().get_token_header())
     assert response.status_code == HTTPStatus.OK
     assert Gameinfo.objects.last().in_possession == 'name of team'
 def test_team_log_entry_is_deleted(self):
     gameinfo = DBSetup().create_teamlog_home_and_away()
     response = self.app.delete_json(reverse(API_GAMELOG,
                                             kwargs={'id': gameinfo.pk}),
                                     {'sequence': 2},
                                     headers=DBSetup().get_token_header())
     assert response.status_code == HTTPStatus.OK
     json_response = response.json
     assert json_response['home']['score'] == 34
     assert json_response['home']['firsthalf']['entries'][1]['isDeleted']
 def test_post_team_log(self):
     DBSetup().g62_status_empty()
     another_user = DBSetup().create_new_user()
     firstGame = Gameinfo.objects.first()
     response = self.app.post_json(
         reverse(API_GAMELOG, kwargs={'id': firstGame.pk}), {
             'team':
             'A1',
             'gameId':
             firstGame.pk,
             'half':
             1,
             'event': [{
                 'name': 'Touchdown',
                 'player': '19'
             }, {
                 'name': '1-Extra-Punkt',
                 'player': '7'
             }]
         },
         headers=DBSetup().get_token_header(another_user))
     assert response.status_code == HTTPStatus.CREATED
     assert TeamLog.objects.first().author == another_user
     assert response.json == {
         'away': {
             'firsthalf': {
                 'entries': [],
                 'score': 0
             },
             'name': 'A2',
             'score': 0,
             'secondhalf': {
                 'entries': [],
                 'score': 0
             }
         },
         'gameId': firstGame.pk,
         'home': {
             'firsthalf': {
                 'entries': [{
                     'pat1': 7,
                     'sequence': 1,
                     'td': 19
                 }],
                 'score': 7
             },
             'name': 'A1',
             'score': 7,
             'secondhalf': {
                 'entries': [],
                 'score': 0
             }
         },
         'isFirstHalf': True
     }
 def test_halftime_submitted(self):
     DBSetup().g62_status_empty()
     firstGame: Gameinfo = Gameinfo.objects.first()
     response = self.app.put_json(reverse(API_GAME_HALFTIME,
                                          kwargs={'pk': firstGame.pk}),
                                  headers=DBSetup().get_token_header())
     assert response.status_code == HTTPStatus.OK
     firstGame = Gameinfo.objects.first()
     assert firstGame.status == '2. Halbzeit'
     assert re.match('^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]',
                     str(firstGame.gameHalftime))
示例#12
0
 def test_liveticker_get_all_ticks(self):
     DBSetup().g62_status_empty()
     last_game = Gameinfo.objects.last()
     home = Gameresult.objects.get(gameinfo=last_game, isHome=True)
     away = Gameresult.objects.get(gameinfo=last_game, isHome=False)
     DBSetup().create_teamlog_home_and_away(home=home.team,
                                            away=away.team,
                                            gameinfo=last_game)
     liveticker = Liveticker(last_game)
     liveticker.collect_all_ticks()
     ticks = liveticker.get_ticks()
     assert len(ticks) == TeamLog.objects.all().count()
示例#13
0
 def test_league_table_multiple_season(self):
     test_season = Season.objects.create(name='test season')
     another_season = Season.objects.create(name='another season')
     any_season = Season.objects.create(name='any season')
     DBSetup().g62_finished(season=test_season)
     DBSetup().g72_finished(season=another_season)
     DBSetup().g62_finished(season=any_season)
     DBSetup().g72_finished(season=any_season)
     expected_overall_table = get_df_from_json('league_table_overall.json')
     league_table = LeagueTable()
     assert league_table.get_standing(
         any_season).to_json() == expected_overall_table.to_json()
 def test_game_setup_get(self):
     DBSetup().g62_status_empty()
     last_game = Gameinfo.objects.last()
     DBSetup().create_gamesetup(last_game)
     response = self.app.get(
         reverse(API_GAME_SETUP, kwargs={'pk': last_game.pk}))
     assert response.status_code == HTTPStatus.OK
     assert response.json == {
         "ctResult": "won",
         "direction": "arrow_forward",
         "fhPossession": "AWAY"
     }
示例#15
0
    def test_update_7_teams_2_fields(self):
        gameday = DBSetup().create_empty_gameday()
        gameday.format = "7_2"
        gameday.save()
        group_B = DBSetup().create_teams('B', 3)
        group_A = DBSetup().create_teams('A', 4)
        groups = [group_A, group_B]
        DBSetup().create_playoff_placeholder_teams()
        sc = ScheduleCreator(gameday=Gameday.objects.get(pk=gameday.pk),
                             schedule=Schedule(gameday.format, groups))
        sc.create()

        Gameinfo.objects.filter(stage='Vorrunde').update(status='beendet')
        finished_games = Gameinfo.objects.filter(status='beendet')
        for game in finished_games:
            update_gameresults(game)
        su = ScheduleUpdate(gameday.pk, gameday.format)
        su.update()
        update_gameresults_by_standing_and_finish_game_for('HF')
        su.update()

        p5_first = Gameinfo.objects.filter(standing__in=['P5-1', 'P3'])
        for game in p5_first:
            update_gameresults(game)
        p5_first.update(status='beendet')
        su = ScheduleUpdate(gameday.pk, gameday.format)
        su.update()

        p5_first = Gameinfo.objects.filter(standing__in=['P5-2', 'P1'])
        for game in p5_first:
            update_gameresults(game)
        p5_first.update(status='beendet')
示例#16
0
 def test_schedule_not_created_while_team_not_existent(self):
     gameday = DBSetup().create_empty_gameday()
     DBSetup().create_playoff_placeholder_teams()
     DBSetup().create_teams('A', 3)
     DBSetup().create_teams('B', 3)
     assert Gameinfo.objects.filter(gameday_id=gameday.pk).exists() is False
     groups = [['A1', 'A2', 'unknown team'], ['B1', 'B2', 'B3']]
     with pytest.raises(TeamNotExistent) as err:
         sc = ScheduleCreator(gameday=Gameday.objects.get(pk=gameday.pk),
                              schedule=Schedule(gameday.format, groups))
         sc.create()
     assert str(err.value) == 'unknown team'
     assert Gameinfo.objects.all().count() == 0
     assert Gameresult.objects.all().count() == 0
示例#17
0
    def test_update_9_teams_3_fields(self):
        gameday = DBSetup().create_empty_gameday()
        gameday.format = "9_3"
        gameday.save()
        group_A = DBSetup().create_teams('A', 3)
        group_B = DBSetup().create_teams('B', 3)
        group_C = DBSetup().create_teams('C', 3)
        groups = [group_A, group_B, group_C]
        DBSetup().create_playoff_placeholder_teams()
        sc = ScheduleCreator(gameday=Gameday.objects.get(pk=gameday.pk),
                             schedule=Schedule(gameday.format, groups))
        sc.create()

        qualify_games = Gameinfo.objects.filter(stage='Vorrunde')
        for game in qualify_games:
            update_gameresults(game)
        Gameinfo.objects.filter(stage='Vorrunde').update(status='beendet')

        su = ScheduleUpdate(gameday.pk, gameday.format)
        su.update()
        check_if_first_standing('PO').is_updated_as_expected_with(
            'B2', 'C2', 'C3')
        check_if_first_standing('P7').is_updated_as_expected_with(
            'A1', 'B1', 'B3')

        update_gameresults_by_standing_and_finish_game_for('PO')
        update_gameresults_and_finish_first_game_for_P7()
        su.update()
        check_if_first_standing('HF').is_updated_as_expected_with(
            'C2', 'C3', 'B2')
        check_if_first_standing('P7').is_updated_as_expected_with(
            'B1', 'C1', 'A2')
        check_if_first_standing('P5').is_updated_as_expected_with(
            'A2', 'B2', 'B1')

        update_gameresults_by_standing_and_finish_game_for('HF')
        update_gameresults_and_finish_first_game_for_P7()
        su.update()
        check_if_first_standing('P7').is_updated_as_expected_with(
            'C1', 'A1', 'C2')
        check_if_first_standing('P1').is_updated_as_expected_with(
            'B3', 'C3', 'A1')
        check_if_first_standing('P3').is_updated_as_expected_with(
            'A3', 'C2', 'C1')

        update_gameresults_by_standing_and_finish_game_for('P5')
        update_gameresults_and_finish_first_game_for_P7()
        update_gameresults_by_standing_and_finish_game_for('P3')
        update_gameresults_by_standing_and_finish_game_for('P1')

        gmw = GamedayModelWrapper(gameday.pk)
        DataFrameAssertion.expect(
            gmw.get_final_table()).to_equal_json('final_table_9_teams.json')
        DataFrameAssertion.expect(
            gmw.get_schedule()).to_equal_json('schedule_9_teams_3_fields.json')
示例#18
0
 def test_league_table_for_league_is_displayed(self):
     DBSetup().g72_finished()
     DBSetup().g62_finished()
     season = Season.objects.first()
     west = League.objects.create(name='west')
     south = League.objects.create(name='south')
     teams_A = Team.objects.filter(name__startswith='A')
     teams_B = Team.objects.filter(name__startswith='B')
     for team in teams_A:
         SeasonLeagueTeam.objects.create(season=season, league=south, team=team)
     for team in teams_B:
         SeasonLeagueTeam.objects.create(season=season, league=west, team=team)
     response = self.app.get(reverse('league-table-league', kwargs={'season': season, 'league': south}))
     assert 'team__name' in response.context['info']['schedule']
示例#19
0
 def test_update_score(self):
     DBSetup().g62_status_empty()
     team_A1 = Team.objects.get(name='A1')
     team_A2 = Team.objects.get(name='A2')
     game = DBSetup().create_teamlog_home_and_away(home=team_A1,
                                                   away=team_A2)
     gamelog = GameLog(game)
     game_service = GameService(game.pk)
     game_service.update_score(gamelog)
     assert Gameresult.objects.get(gameinfo=game, team=team_A1).fh == 21
     assert Gameresult.objects.get(gameinfo=game, team=team_A1).sh == 21
     assert Gameresult.objects.get(gameinfo=game, team=team_A1).pa == 3
     assert Gameresult.objects.get(gameinfo=game, team=team_A2).fh == 0
     assert Gameresult.objects.get(gameinfo=game, team=team_A2).sh == 3
     assert Gameresult.objects.get(gameinfo=game, team=team_A2).pa == 42
示例#20
0
 def test_get_all_games_to_whistle_for_all_teams(self):
     gameday = DBSetup().g62_status_empty()
     first_game = Gameinfo.objects.first()
     Gameinfo.objects.filter(id=first_game.pk).update(gameFinished='12:00')
     gs = GamedayService.create(gameday.pk)
     games_to_whistle = gs.get_games_to_whistle('*')
     assert len(games_to_whistle) == 10
示例#21
0
 def test_mark_log_deleted(self):
     gameinfo = DBSetup().create_teamlog_home_and_away()
     first_team = Team.objects.first()
     sequence = 2
     gamelog = GameLog(gameinfo)
     gamelog.mark_entries_as_deleted(sequence)
     gamelog_list = TeamLog.objects.filter(sequence=sequence)
     assert gamelog_list[
         0].isDeleted, 'touchdown should be marked as deleted'
     assert gamelog_list[1].isDeleted, 'PAT should be marked as deleted'
     actual_gamelog = TeamLog.objects.filter(gameinfo=gameinfo,
                                             team=first_team,
                                             half=1)
     actual_gamelog_entries_as_json = gamelog.create_entries_for_half(
         actual_gamelog)
     assert actual_gamelog_entries_as_json == [{
         'sequence': 1,
         'td': 19,
     }, {
         'sequence': 2,
         'td': 19,
         'pat2': 7,
         'isDeleted': True
     }, {
         'sequence': 3,
         'td': 19,
         'pat1': 7,
     }]
     assert gamelog.get_home_firsthalf_score() == 13
     assert gamelog.get_home_score() == 34
示例#22
0
 def test_get_games_to_whistle_for_specific_team(self):
     gameday = DBSetup().g62_status_empty()
     first_game = Gameinfo.objects.first()
     first_team = Team.objects.first()
     # first game is done and isn't counted
     Gameinfo.objects.filter(id=first_game.pk).update(gameFinished='13:00')
     # second game is officiated be a different team and isn't counted
     Gameinfo.objects.filter(id=first_game.pk +
                             1).update(officials=first_team.pk + 1)
     response = self.app.get(reverse(API_GAMEDAY_WHISTLEGAMES,
                                     kwargs={
                                         'pk': gameday.pk,
                                         'team': 'officials'
                                     }),
                             headers=DBSetup().get_token_header())
     assert len(response.json) == 4
示例#23
0
 def test_entries_per_half(self):
     firstGameEntry = DBSetup().create_teamlog_home_and_away()
     gamelog = GameLog(firstGameEntry)
     assert len(gamelog.get_entries_home_firsthalf()) == 5
     assert len(gamelog.get_entries_home_secondhalf()) == 5
     assert len(gamelog.get_entries_away_firsthalf()) == 0
     assert len(gamelog.get_entries_away_secondhalf()) == 4
示例#24
0
 def test_only_one_gameday_is_live(self):
     gameday = DBSetup().g62_status_empty()
     first_game = Gameinfo.objects.first()
     Gameinfo.objects.filter(pk__gt=first_game.pk +
                             1).update(scheduled='11:00')
     liveticker_service = LivetickerService(gameday.pk)
     assert len(liveticker_service.get_liveticker()) == 2
示例#25
0
 def test_multiple_gamedays_are_live(self):
     gameday_one = DBSetup().g62_status_empty()
     first_game_gameday_one = Gameinfo.objects.filter(
         gameday=gameday_one).first()
     Gameinfo.objects.filter(gameday=gameday_one,
                             pk__gt=first_game_gameday_one.pk +
                             1).update(scheduled='11:00')
     gameday_two = DBSetup().g62_status_empty()
     first_game_gameday_two = Gameinfo.objects.filter(
         gameday=gameday_two).first()
     Gameinfo.objects.filter(gameday=gameday_two,
                             pk__gt=first_game_gameday_two.pk +
                             1).update(scheduled='11:00')
     Gameday.objects.all().update(date=datetime.today())
     liveticker_service = LivetickerService()
     assert len(liveticker_service.get_liveticker()) == 4
示例#26
0
 def test_is_home_in_possession(self):
     DBSetup().g62_status_empty()
     last_game: Gameinfo = Gameinfo.objects.last()
     last_game.in_possession = 'A1'
     liveticker = Liveticker(last_game)
     assert liveticker.is_home_in_possession()
     assert not liveticker.is_away_in_possession()
示例#27
0
    def test_schedule_is_updated(self, update_mock):
        DBSetup().g62_status_empty()

        gi: Gameinfo = Gameinfo.objects.first()
        gi.status = 'beendet'
        gi.save()
        update_mock.assert_called_once()
 def test_get_qualify_table(self):
     gameday = DBSetup().g62_qualify_finished()
     gmw = GamedayModelWrapper(gameday.pk)
     expected_qualify_table = get_df_from_json('ts_qualify_table')
     assert_frame_equal(gmw.get_qualify_table(),
                        expected_qualify_table,
                        check_dtype=False)
 def test_get_team_by_points(self):
     gameday = DBSetup().g62_finalround(sf='beendet')
     gmw = GamedayModelWrapper(gameday.pk)
     assert gmw.get_team_by_points(place=1, standing='HF', points=0) == 'B2'
     assert gmw.get_team_by_points(place=1, standing='HF', points=3) == 'A1'
     assert gmw.get_team_by_points(place=2, standing='HF', points=0) == 'A2'
     assert gmw.get_team_by_points(place=2, standing='HF', points=3) == 'B1'
 def test_get_mulitple_teams_by_standing_and_points(self):
     gameday = DBSetup().g72_qualify_finished()
     all_games = Gameinfo.objects.filter(gameday=gameday)
     for game in all_games:
         update_gameresults(game)
     gmw = GamedayModelWrapper(gameday.pk)
     assert gmw.get_teams_by(standing='HF', points=3) == ['B2', 'B1']