diff options
Diffstat (limited to 'migration-test')
-rw-r--r-- | migration-test/.gitignore | 2 | ||||
-rw-r--r-- | migration-test/apitest/__init__.py | 0 | ||||
-rw-r--r-- | migration-test/apitest/api.py | 48 | ||||
-rw-r--r-- | migration-test/apitest/apitest.py | 14 | ||||
-rw-r--r-- | migration-test/apitest/pzbs.py | 69 | ||||
-rw-r--r-- | migration-test/csv/.emptydir | 0 | ||||
-rw-r--r-- | migration-test/test.py | 12 | ||||
-rw-r--r-- | migration-test/tests/ApiTest.py | 114 | ||||
-rw-r--r-- | migration-test/tests/__init__.py | 0 |
9 files changed, 259 insertions, 0 deletions
diff --git a/migration-test/.gitignore b/migration-test/.gitignore new file mode 100644 index 0000000..b26a5b8 --- /dev/null +++ b/migration-test/.gitignore @@ -0,0 +1,2 @@ +*.pyc +*.csv diff --git a/migration-test/apitest/__init__.py b/migration-test/apitest/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/migration-test/apitest/__init__.py diff --git a/migration-test/apitest/api.py b/migration-test/apitest/api.py new file mode 100644 index 0000000..5fa2e4b --- /dev/null +++ b/migration-test/apitest/api.py @@ -0,0 +1,48 @@ +import json +import urlparse + +from .apitest import ApiTest + +class ApiCalculator(ApiTest): + ranks = { + 'o++++': 7, + 'o+++': 6, + 'o++': 5, + 'o+': 4, + 'o-': 3, + 'r': 2, + 'o': 1, + 'k': 0 + } + def get_url(self): + return 'http://pzbs.pl/sedziowie/pkl/api.php' + def get_method(self): + return 'post' + def get_request(self, + tour_type, tour_rank, tour_boards, + cont_count, cont_rank, + override=None): + params = {} + params['version'] = '1' + params['type'] = self.tourtypes[tour_type] + params['over39_boards'] = tour_boards + params['tournament_rank'] = self.ranks[tour_rank] + params['contestants'] = cont_count + params['title_sum'] = cont_rank + if override: + if 'points' in override: + params['manual[min_points]'] = override['points'] + if 'weight' in override: + params['manual[tournament_weight]'] = override['weight'] + if 'players' in override: + params['manual[players_coefficient]'] = override['players'] + if 'cutoff' in override: + i = 0 + for c in override['cutoff']: + params['manual[points_cutoffs][' + str(i) + '][0]'] = c[0] + params['manual[points_cutoffs][' + str(i) + '][1]'] = c[1] + i += 1 + return params + + def get_response(self, text): + return json.loads(text) diff --git a/migration-test/apitest/apitest.py b/migration-test/apitest/apitest.py new file mode 100644 index 0000000..e75890d --- /dev/null +++ b/migration-test/apitest/apitest.py @@ -0,0 +1,14 @@ +class ApiTest(object): + ranks = {} + tourtypes = {'i': 1, 'p': 2, 't': 4} + def get_url(self): + pass + def get_method(self): + pass + def get_request(self, + tour_rank, tour_type, tour_boards, + cont_count, cont_rank, + override=None): + pass + def parse_response(self, response_body): + pass diff --git a/migration-test/apitest/pzbs.py b/migration-test/apitest/pzbs.py new file mode 100644 index 0000000..9f5cfa5 --- /dev/null +++ b/migration-test/apitest/pzbs.py @@ -0,0 +1,69 @@ +import urlparse + +from bs4 import BeautifulSoup as bs + +from .apitest import ApiTest + +class PzbsCalculator(ApiTest): + ranks = { + 'o++++': 1, + 'o+++': 2, + 'o++': 3, + 'o+': 4, + 'o-': 5, + 'r': 6, + 'o': 7, + 'k': 8 + } + def get_url(self): + return 'http://pzbs.pl/sedziowie/pkl/pkle2018-old.php' + def get_method(self): + return 'post' + def get_request(self, + tour_type, tour_rank, tour_boards, + cont_count, cont_rank, + override=None): + params = { + 'rgg': 25, 'rgp': 15, 'rot': 10, 'rok1': 7, 'rok': 5, 'rtp': 4, 'rto': 2, 'rtk': 1, + 'min1': 200, 'min2': 150, 'min3': 75, 'min4': 50, 'min5': 0, 'min6': 0, 'min7': 0, 'min8': 0, + 'rgg_': 40, 'rgp_': 25, 'rot_': 15, 'rok1_': 10, 'rok_': 7, 'rtp_': 5, 'rto_': 3, 'rtk_': 2, + 'min1_': 300, 'min2_': 200, 'min3_': 100, 'min4_': 70, 'min5_': 0, 'min6_': 0, 'min7_': 0, 'min8_': 0, + 'zaw': 0.05, 'prp1': 90, 'prp2': 20, 'pru1': 2, 'pru2': 20, 'pru3': 50, + 'typ': 0, + 'rozdan': 0, + 'rng': 0, + 'iuc': 0, + 'izw': 0, + 'swk': 0, + 'srd': 0 + } + params['typ'] = self.tourtypes[tour_type] + params['rozdan'] = tour_boards + params['rng'] = self.ranks[tour_rank] + params['iuc'] = cont_count + params['izw'] = cont_count * self.tourtypes[tour_type] + params['swk'] = cont_rank + params['srd'] = max(0.15, cont_rank / (cont_count * self.tourtypes[tour_type])) + if override: + if 'points' in override: + params['min' + str(params['rng']) + '_'*params['rozdan']] = override['points'] + if 'weight' in override: + params['r' + ['', 'gg', 'gp', 'ot', 'ok1', 'ok', 'tp', 'to', 'tk'][params['rng']] + '_'*params['rozdan']] = override['weight'] + if 'players' in override: + params['zaw'] = override['players'] + if 'cutoff' in override: + for i in range(0, 3): + params['pru' + str(i+1)] = override['cutoff'][i][0] * 100 + params['prp' + str(i+1)] = override['cutoff'][i][1] * 100 + return params + + def get_response(self, text): + results = {u'points': {}} + content = bs(text, 'lxml') + for row in content.select('table')[-1].select('tr'): + cells = row.select('td') + if cells[0].text.isdigit(): + results[u'points'][cells[0].text] = int(cells[1].text) + elif cells[0].text == 'SUMA PKL': + results[u'sum'] = int(cells[1].text) + return results diff --git a/migration-test/csv/.emptydir b/migration-test/csv/.emptydir new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/migration-test/csv/.emptydir diff --git a/migration-test/test.py b/migration-test/test.py new file mode 100644 index 0000000..d11e1cb --- /dev/null +++ b/migration-test/test.py @@ -0,0 +1,12 @@ +import sys +import unittest + +import tests.ApiTest + +if __name__ == '__main__': + suite = unittest.TestLoader().loadTestsFromModule(tests.ApiTest) \ + if len(sys.argv) < 2 \ + else unittest.TestLoader().loadTestsFromNames( + ['tests.ApiTest.ApiTestCase.test_%sCases' % (s) + for s in sys.argv[1:]]) + unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/migration-test/tests/ApiTest.py b/migration-test/tests/ApiTest.py new file mode 100644 index 0000000..0af8626 --- /dev/null +++ b/migration-test/tests/ApiTest.py @@ -0,0 +1,114 @@ +import csv +import requests +import random +import os +import unittest + +from apitest.pzbs import PzbsCalculator +from apitest.api import ApiCalculator + +def runTest(tester, params): + return tester.get_response( + requests.post( + tester.get_url(), + data=tester.get_request(*params) + ).text) + +class ApiTestCase(unittest.TestCase): + def __setupParams(self): + csv_files = [] + for root, dirs, files in os.walk('./csv'): + csv_files += [os.path.join(root, f) for f in files if f.lower().endswith('.csv')] + self.params = [] + for csv_file in csv_files: + csv_content = csv.reader(open(csv_file), delimiter=";") + param_contents = [ + row for idx, row in enumerate(csv_content) if idx == 2][0] + self.params.append(( + param_contents[0][0].lower(), + None, 0, + int(param_contents[1]), float(param_contents[4]))) + + def setUp(self): + self.pzbs = PzbsCalculator() + self.api = ApiCalculator() + self.__setupParams() + self.longMessage=True + self.maxDiff = None + + def test_csvCases(self): + for params in self.params: + for rank in ApiCalculator.ranks.keys(): + for boards in [0, 1]: + p = (params[0], rank, boards, params[3], params[4]) + self.assertEqual( + runTest(self.pzbs, p), + runTest(self.api, p), + msg=str(p)) + + def test_randomCases(self): + for i in range(0, 20): + for type in ['t', 'p', 'i']: + for rank in ApiCalculator.ranks.keys(): + for boards in [0, 1]: + p = (type, rank, boards, + random.randint(6, 350), + random.randint(0, 4000) / 2.0) + self.assertEqual( + runTest(self.pzbs, p), + runTest(self.api, p), + msg=str(p)) + + def test_customParamCases(self): + for type in ['t', 'p', 'i']: + for rank in ApiCalculator.ranks.keys(): + for boards in [0, 1]: + for j in range(0, 20): + manualParams = { + 'points': random.randint(20, 100) + } + p = (type, rank, boards, + 35, 400, manualParams) + self.assertEqual( + runTest(self.pzbs, p), + runTest(self.api, p), + msg=str(p)) + for j in range(0, 20): + manualParams = { + 'weight': random.randint(20, 100) + } + p = (type, rank, boards, + 35, 400, manualParams) + self.assertEqual( + runTest(self.pzbs, p), + runTest(self.api, p), + msg=str(p)) + for j in range(0, 20): + manualParams = { + 'players': random.randint(20, 100) * 0.001 + } + p = (type, rank, boards, + 35, 400, manualParams) + self.assertEqual( + runTest(self.pzbs, p), + runTest(self.api, p), + msg=str(p)) + for j in range(0, 20): + manualParams = { + 'cutoff': [ + [random.uniform(0.04, 0.06), + random.uniform(0.7, 0.9)], + [random.uniform(0.15, 0.35), + random.uniform(0.15, 0.35)], + [random.uniform(0.4, 0.6), + 0.0] + ] + } + p = (type, rank, boards, + random.randint(20, 25), + random.randint(300, 400) / 2.0, + manualParams) + self.assertEqual( + runTest(self.pzbs, p), + runTest(self.api, p), + msg=str(p)) diff --git a/migration-test/tests/__init__.py b/migration-test/tests/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/migration-test/tests/__init__.py |