コード例 #1
0
class Test(DjangoTestCase):

    @classmethod
    def setUpClass(self):
        super(Test, self).setUpClass()
        self.db = Db()
        self.db_name = settings.DATABASES['default']['NAME']

        # Required objects, not actually used in test cases.
        self.db.create_cache()
        self.db.create_ladder()

        self.t1, self.t2, self.t3 = self.db.create_teams(count=3)

    def setUp(self):
        super().setUp()
        self.db.clear_defaults()
        self.db.delete_all(keep=[Cache, Ladder, Team, Player])
        self.db.create_season(version=Version.HOTS)
        self.c = sc2.Get(self.db_name, Enums.INFO, 0)

    def tearDown(self):
        # Null and garbage collect to disconnect c++ code from the database.
        self.c = None
        gc.collect()
        super().tearDown()

    def test_create_stats_from_empty_ranking_data(self):
        self.db.create_ranking()
        self.db.create_ranking_data(data=[
        ])
        self.db.update_ranking_stats()

        for mode_id in Mode.stat_v1_ids:
            stats, = json.loads(self.c.ranking_stats(mode_id))
            self.assertEqual(0, sum(stats['data']))
            self.assertEqual(RankingStats.V1, stats['stat_version'])
            self.assertEqual(self.db.season.id, stats['season_id'])
            self.assertEqual(Version.HOTS, stats['season_version'])
            self.assertEqual(self.db.ranking.id, stats['id'])
            self.assertEqual(RankingStats.V1_DATA_COUNT * RankingStats.V1_DATA_SIZE, len(stats['data']))

    def test_create_stats_from_lotv_season_gets_correct_version(self):
        self.db.create_season(id=17, version=Version.LOTV)
        self.db.create_ranking()
        self.db.create_ranking_data(data=[])
        self.db.update_ranking_stats()

        stats, = json.loads(self.c.ranking_stats(Mode.TEAM_1V1))

        self.assertEqual(RankingStats.V1, stats['stat_version'])
        self.assertEqual(self.db.season.id, stats['season_id'])
        self.assertEqual(Version.LOTV, stats['season_version'])
        self.assertEqual(self.db.ranking.id, stats['id'])
        self.assertEqual(RankingStats.V1_DATA_COUNT * RankingStats.V1_DATA_SIZE, len(stats['data']))
        self.assertEqual(0, sum(stats['data']))

    def test_create_stats_from_lotv_season_with_archon_mode_is_calculated_correctly(self):
        self.db.default_ranking_data__data = dict(
            mode=Mode.TEAM_1V1,
            version=Version.LOTV,
            region=Region.EU,
            league=League.GOLD,
            race0=Race.ZERG
        )

        self.db.create_season(id=17, version=Version.LOTV)
        self.db.create_ranking()
        self.db.create_ranking_data(data=[
            dict(wins=10, losses=10, points=10.0, race0=Race.ZERG, mode=Mode.RANDOM_2V2),
            dict(wins=20, losses=21, points=22.0, race0=Race.TERRAN, mode=Mode.ARCHON),
            dict(wins=30, losses=31, points=32.0, race0=Race.PROTOSS, mode=Mode.TEAM_1V1),
        ])
        self.db.update_ranking_stats()

        stats, = json.loads(self.c.ranking_stats(Mode.RANDOM_2V2))

        self.assertEqual(1 + 10 + 10 + 10, sum(stats['data']))
        index = RankingStats.raw_v1_index(RankingStats.V1_DATA_SIZE, Version.LOTV_INDEX,
                                          Region.EU_INDEX, League.GOLD_INDEX, Race.ZERG_INDEX)
        self.assertEqual([1, 10, 10, 10], stats['data'][index: index + 4])

        stats, = json.loads(self.c.ranking_stats(Mode.ARCHON))

        self.assertEqual(1 + 20 + 21 + 22, sum(stats['data']))
        index = RankingStats.raw_v1_index(RankingStats.V1_DATA_SIZE, Version.LOTV_INDEX,
                                          Region.EU_INDEX, League.GOLD_INDEX, Race.TERRAN_INDEX)
        self.assertEqual([1, 20, 21, 22], stats['data'][index: index + 4])

        stats, = json.loads(self.c.ranking_stats(Mode.TEAM_1V1))

        self.assertEqual(1 + 30 + 31 + 32, sum(stats['data']))
        index = RankingStats.raw_v1_index(RankingStats.V1_DATA_SIZE, Version.LOTV_INDEX,
                                          Region.EU_INDEX, League.GOLD_INDEX, Race.PROTOSS_INDEX)
        self.assertEqual([1, 30, 31, 32], stats['data'][index: index + 4])

    def test_create_stats_with_different_archon_versions_is_calculated_correctly(self):
        self.db.default_ranking_data__data = dict(
            mode=Mode.ARCHON,
            version=Version.LOTV,
            region=Region.EU,
            league=League.GOLD,
            race0=Race.ZERG
        )

        self.db.create_season(id=17, version=Version.LOTV)
        self.db.create_ranking()
        self.db.create_ranking_data(data=[
            dict(wins=10, losses=10, points=10.0, version=Version.WOL),
            dict(wins=20, losses=21, points=22.0, version=Version.HOTS),
            dict(wins=30, losses=31, points=32.0, version=Version.LOTV),
        ])
        self.db.update_ranking_stats()

        stats, = json.loads(self.c.ranking_stats(Mode.ARCHON))

        self.assertEqual(3 + 60 + 62 + 64, sum(stats['data']))

        index = RankingStats.raw_v1_index(RankingStats.V1_DATA_SIZE, Version.WOL_INDEX,
                                          Region.EU_INDEX, League.GOLD_INDEX, Race.ZERG_INDEX)
        self.assertEqual([1, 10, 10, 10], stats['data'][index: index + 4])

        index = RankingStats.raw_v1_index(RankingStats.V1_DATA_SIZE, Version.HOTS_INDEX,
                                          Region.EU_INDEX, League.GOLD_INDEX, Race.ZERG_INDEX)
        self.assertEqual([1, 20, 21, 22], stats['data'][index: index + 4])

        index = RankingStats.raw_v1_index(RankingStats.V1_DATA_SIZE, Version.LOTV_INDEX,
                                          Region.EU_INDEX, League.GOLD_INDEX, Race.ZERG_INDEX)
        self.assertEqual([1, 30, 31, 32], stats['data'][index: index + 4])

    def test_create_stats_using_two_teams_that_sums(self):
        self.db.default_ranking_data__data = dict(
            mode=Mode.TEAM_1V1,
            version=Version.HOTS,
            region=Region.EU,
            league=League.GOLD,
            race0=Race.ZERG
        )
        self.db.create_ranking()
        self.db.create_ranking_data(data=[
            dict(wins=10, losses=10, points=10.0),
            dict(wins=20, losses=21, points=22.0),
        ])
        self.db.update_ranking_stats()

        for mode_id in Mode.stat_v1_ids:
            if mode_id == Mode.TEAM_1V1:
                continue
            stats, = json.loads(self.c.ranking_stats(mode_id))
            self.assertEqual(0, sum(stats['data']))

        stats, = json.loads(self.c.ranking_stats(Mode.TEAM_1V1))

        self.assertEqual(RankingStats.V1, stats['stat_version'])
        self.assertEqual(self.db.season.id, stats['season_id'])
        self.assertEqual(Version.HOTS, stats['season_version'])
        self.assertEqual(self.db.ranking.id, stats['id'])
        self.assertEqual(RankingStats.V1_DATA_COUNT * RankingStats.V1_DATA_SIZE, len(stats['data']))
        self.assertEqual(2 + 30 + 31 + 32, sum(stats['data']))

        index = RankingStats.raw_v1_index(RankingStats.V1_DATA_SIZE, Version.HOTS_INDEX,
                                          Region.EU_INDEX, League.GOLD_INDEX, Race.ZERG_INDEX)

        self.assertEqual([2, 30, 31, 32], stats['data'][index: index + 4])

    def test_creating_stats_for_three_teams_with_different_parameters(self):
        self.db.default_ranking_data__data = dict(
            mode=Mode.RANDOM_4V4,
            version=Version.HOTS,
            region=Region.EU,
            league=League.GOLD,
            race0=Race.ZERG
        )
        self.db.create_ranking()
        self.db.create_ranking_data(data=[
            dict(team_id=self.t1.id, wins=10, losses=11, points=12.0, region=Region.CN),
            dict(team_id=self.t2.id, wins=20, losses=21, points=22.0, race0=Race.TERRAN),
            dict(team_id=self.t3.id, wins=30, losses=31, points=32.0, league=League.PLATINUM),
        ])
        self.db.update_ranking_stats()

        for mode_id in Mode.stat_v1_ids:
            if mode_id == Mode.RANDOM_4V4:
                continue
            stats, = json.loads(self.c.ranking_stats(mode_id))
            self.assertEqual(0, sum(stats['data']))

        stats, = json.loads(self.c.ranking_stats(Mode.RANDOM_4V4))

        self.assertEqual(3 + 60 + 63 + 66, sum(stats['data']))

        index = RankingStats.raw_v1_index(RankingStats.V1_DATA_SIZE, Version.HOTS_INDEX,
                                          Region.CN_INDEX, League.GOLD_INDEX, Race.ZERG_INDEX)
        self.assertEqual([1, 10, 11, 12], stats['data'][index: index + 4])

        index = RankingStats.raw_v1_index(RankingStats.V1_DATA_SIZE, Version.HOTS_INDEX,
                                          Region.EU_INDEX, League.GOLD_INDEX, Race.TERRAN_INDEX)
        self.assertEqual([1, 20, 21, 22], stats['data'][index: index + 4])

        index = RankingStats.raw_v1_index(RankingStats.V1_DATA_SIZE, Version.HOTS_INDEX,
                                          Region.EU_INDEX, League.PLATINUM_INDEX, Race.ZERG_INDEX)
        self.assertEqual([1, 30, 31, 32], stats['data'][index: index + 4])
コード例 #2
0
ファイル: stats_view_test.py プロジェクト: frutiger/rankedftw
class Test(DjangoTestCase):

    @classmethod
    def setUpClass(self):
        super(Test, self).setUpClass()
        self.db = Db()

        # Required objects, not actually used in test cases.
        self.db.create_cache()
        self.db.create_ladder()

        self.db.create_season()

    def setUp(self):
        super().setUp()
        self.db.delete_all(keep=[Cache, Ladder, Season])
        self.c = Client()

    def tearDown(self):
        rankings_view_client.close()
        super(Test, self).tearDown()

    def test_view_league_stats(self):
        self.db.create_player()
        t1 = self.db.create_team()

        self.db.create_player()
        t2 = self.db.create_team()

        self.db.create_player()
        t3 = self.db.create_team()

        self.db.create_ranking()
        self.db.create_ranking_data(data=[
            dict(team_id=t1.id, league=League.GOLD,     wins=11, losses=10, points=20),
            dict(team_id=t2.id, league=League.PLATINUM, wins=21, losses=20, points=40),
            dict(team_id=t3.id, league=League.PLATINUM, wins=31, losses=30, points=50),
        ])
        self.db.update_ranking_stats()

        response = self.c.get('/stats/leagues/1v1/')
        self.assertEqual(200, response.status_code)
        self.assertIn('1v1 League Distribution', response.content.decode('utf-8'))

        response = self.c.get('/stats/raw/11/')
        self.assertEqual(200, response.status_code)
        content = json.loads(response.content.decode('utf-8'))

        self.assertEqual(1, len(content))

        data = content[0]['data']

        def get_stat(league_index, type_index):
            return data[RankingStats.raw_v1_index(RankingStats.V1_DATA_SIZE, Version.HOTS_INDEX, Region.EU_INDEX,
                                                  league_index, Race.ZERG_INDEX)
                        + type_index]

        self.assertEqual(1,  get_stat(League.GOLD_INDEX,     RankingStats.V1_COUNT_INDEX))
        self.assertEqual(11, get_stat(League.GOLD_INDEX,     RankingStats.V1_WINS_INDEX))
        self.assertEqual(10, get_stat(League.GOLD_INDEX,     RankingStats.V1_LOSSES_INDEX))
        self.assertEqual(20, get_stat(League.GOLD_INDEX,     RankingStats.V1_POINT_INDEX))
        self.assertEqual(2,  get_stat(League.PLATINUM_INDEX, RankingStats.V1_COUNT_INDEX))
        self.assertEqual(52, get_stat(League.PLATINUM_INDEX, RankingStats.V1_WINS_INDEX))
        self.assertEqual(50, get_stat(League.PLATINUM_INDEX, RankingStats.V1_LOSSES_INDEX))
        self.assertEqual(90, get_stat(League.PLATINUM_INDEX, RankingStats.V1_POINT_INDEX))