6 changed files with 289 additions and 28 deletions
@ -0,0 +1,20 @@ |
|||||||
|
#! /usr/bin/python3 |
||||||
|
# -*- coding:utf-8 -*- |
||||||
|
import random |
||||||
|
import os |
||||||
|
|
||||||
|
|
||||||
|
class RandomSelector(object): |
||||||
|
def __init__(self, elapsed): |
||||||
|
if not 0 < elapsed <= 256*60: |
||||||
|
elapsed = random.randrange(256*60) |
||||||
|
self._selector = random.Random(int.from_bytes(os.urandom(32), 'big') * elapsed) |
||||||
|
|
||||||
|
def randselect(self, items, num): |
||||||
|
_items = items.copy() |
||||||
|
self._selector.shuffle(_items) |
||||||
|
return [_items[self._selector.randrange(len(_items))] for _ in range(num)] |
||||||
|
|
||||||
|
|
||||||
|
def randomselect(elapsed_ms, items, select_num): |
||||||
|
return RandomSelector(elapsed_ms).randselect(items, select_num) |
||||||
@ -0,0 +1,127 @@ |
|||||||
|
#! /usr/bin/python3 |
||||||
|
# -*- coding:utf-8 -*- |
||||||
|
|
||||||
|
import unittest |
||||||
|
from . import lottery as l |
||||||
|
import time |
||||||
|
|
||||||
|
|
||||||
|
class LotteryTestCase(unittest.TestCase): |
||||||
|
def setUp(self): |
||||||
|
print('开始测试', time.strftime('%Y-%m-%d(%a)%H:%M:%S')) |
||||||
|
l.reset() |
||||||
|
self._users = [ |
||||||
|
{ |
||||||
|
"uid": "G0001", |
||||||
|
"name": "谷歌", |
||||||
|
"award_id": None, |
||||||
|
"role": 0 |
||||||
|
}, |
||||||
|
{ |
||||||
|
"uid": "G0002", |
||||||
|
"name": "百度", |
||||||
|
"award_id": None, |
||||||
|
"role": 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
"uid": "G0003", |
||||||
|
"name": "搜狗", |
||||||
|
"award_id": None, |
||||||
|
"role": 2 |
||||||
|
}, |
||||||
|
{ |
||||||
|
"uid": "G0004", |
||||||
|
"name": "360", |
||||||
|
"award_id": None, |
||||||
|
"role": 3 |
||||||
|
}, |
||||||
|
{ |
||||||
|
"uid": "G0005", |
||||||
|
"name": "亚马逊", |
||||||
|
"award_id": None, |
||||||
|
"role": 1 |
||||||
|
} |
||||||
|
] |
||||||
|
|
||||||
|
self._awards = [ |
||||||
|
{ |
||||||
|
"award_name": "三等奖(一)", |
||||||
|
"award_size": 2, |
||||||
|
"award_capacity": 2 |
||||||
|
}, |
||||||
|
{ |
||||||
|
"award_name": "三等奖(二)", |
||||||
|
"award_size": 2, |
||||||
|
"award_capacity": 2 |
||||||
|
}, |
||||||
|
{ |
||||||
|
"award_name": "二等奖", |
||||||
|
"award_size": 2, |
||||||
|
"award_capacity": 2 |
||||||
|
}, |
||||||
|
{ |
||||||
|
"award_name": "一等奖", |
||||||
|
"award_size": 2, |
||||||
|
"award_capacity": 2 |
||||||
|
}, |
||||||
|
{ |
||||||
|
"award_name": "特等奖", |
||||||
|
"award_size": 2, |
||||||
|
"award_capacity": 2 |
||||||
|
} |
||||||
|
] |
||||||
|
l.add_users(self._users) |
||||||
|
l.add_awards(self._awards) |
||||||
|
for id, award in enumerate(self._awards): |
||||||
|
award['award_id'] = id |
||||||
|
|
||||||
|
def tearDown(self): |
||||||
|
print('结束测试', time.strftime('%Y-%m-%d(%a)%H:%M:%S')) |
||||||
|
|
||||||
|
def test_users(self): |
||||||
|
self.assertCountEqual(self._users, l.users()['data']) |
||||||
|
for user in l.users()['data']: |
||||||
|
self.assertTrue(user in self._users) |
||||||
|
|
||||||
|
def test_draw_lottery(self): |
||||||
|
l.run() |
||||||
|
dlr = l.draw_lottery(0) |
||||||
|
self.assertEqual(dlr['status'], 200) |
||||||
|
for lucky in l.lucky_users(0)['data']: |
||||||
|
self.assertTrue(lucky in dlr['data']) |
||||||
|
print('中奖用户为:', lucky) |
||||||
|
for unlucky in l.luckless_users()['data']: |
||||||
|
for lucky in dlr['data']: |
||||||
|
self.assertNotEqual(lucky['uid'], unlucky['uid']) |
||||||
|
self.assertEqual(len(l.users()['data']), len(l.lucky_users(0)['data']) + len(l.luckless_users()['data'])) |
||||||
|
|
||||||
|
def test_awards(self): |
||||||
|
l.add_awards([{'award_name': "BOSS奖励", 'award_capacity': 1}]) |
||||||
|
self.assertEqual(6, len(l.awards()['data'])) |
||||||
|
|
||||||
|
def test_award(self): |
||||||
|
award = l.award(3) |
||||||
|
self.assertEqual('一等奖', award['data']['award_name']) |
||||||
|
|
||||||
|
def test_update(self): |
||||||
|
l.update('G0004', 3) |
||||||
|
ok = False |
||||||
|
for u in l.lucky_users(3)['data']: |
||||||
|
if u['uid'] == 'G0004': |
||||||
|
ok = True |
||||||
|
break |
||||||
|
self.assertTrue(ok) |
||||||
|
|
||||||
|
def test_revoke(self): |
||||||
|
l.update('G0004', 3) |
||||||
|
l.revoke('G0004') |
||||||
|
ok = False |
||||||
|
for u in l.lucky_users(3)['data']: |
||||||
|
if u['uid'] == 'G0004': |
||||||
|
ok = True |
||||||
|
break |
||||||
|
self.assertFalse(ok) |
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__': |
||||||
|
unittest.main() |
||||||
Loading…
Reference in new issue