This repository has been archived by the owner on Jul 12, 2021. It is now read-only.
/
test_main.py
87 lines (57 loc) · 1.95 KB
/
test_main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import pytest
from main import CircularRefer
from main import RefereeIsAlreadyReferred
from main import Referral
from main import User
@pytest.fixture
def referrals():
Referral.referrals = list()
yield
def test_referrals(referrals):
A = User(0)
B = User(1)
Referral().set_referral(referee=B, referrer=A)
assert len(Referral.referrals) == 1
def test_user_refer_a_referrer_with_referees(referrals):
A = User(0)
B = User(1)
C = User(2)
Referral().set_referral(referee=B, referrer=A)
Referral().set_referral(referee=A, referrer=C)
assert len(Referral.referrals) == 2
def test_user_refer_a_user_with_referrer(referrals):
A = User(0)
B = User(1)
C = User(2)
Referral().set_referral(referee=B, referrer=A)
with pytest.raises(RefereeIsAlreadyReferred):
Referral().set_referral(referee=B, referrer=C)
assert len(Referral.referrals) == 1
def test_user_refer_his_referrer(referrals):
A = User(0)
B = User(1)
Referral().set_referral(referee=B, referrer=A)
with pytest.raises(CircularRefer):
Referral().set_referral(referee=A, referrer=B)
assert len(Referral.referrals) == 1
def test_circular_refer_with_four_levels(referrals):
A = User(0)
B = User(1)
C = User(2)
D = User(3)
users = [A, B, C, D]
Referral().set_referral(referee=B, referrer=A)
Referral().set_referral(referee=C, referrer=B)
Referral().set_referral(referee=D, referrer=C)
with pytest.raises(CircularRefer):
Referral().set_referral(referee=A, referrer=D)
assert len(Referral.referrals) == len(users) - 1
def test_circular_refer_with_thousand_levels(referrals):
users = [User(i) for i in range(1000)]
[
Referral().set_referral(referee=users[i + 1], referrer=users[i])
for i in range(len(users))
if i < len(users) - 1
]
with pytest.raises(CircularRefer):
Referral().set_referral(referee=users[0], referrer=users[-1])