Skip to content

Commit 4923c78

Browse files
Merge pull request #56 from RandomProgramm3r/develop
test: Add tests for promo activation statistics
2 parents 49760a3 + 8dcba07 commit 4923c78

File tree

2 files changed

+136
-0
lines changed

2 files changed

+136
-0
lines changed

promo_code/business/tests/promocodes/base.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import rest_framework.test
33

44
import business.models
5+
import user.models
56

67

78
class BasePromoTestCase(rest_framework.test.APITestCase):
@@ -70,3 +71,4 @@ def tearDown(self):
7071
business.models.Company.objects.all().delete()
7172
business.models.Promo.objects.all().delete()
7273
business.models.PromoCode.objects.all().delete()
74+
user.models.PromoActivationHistory.objects.all().delete()
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
import django.urls
2+
import rest_framework.status
3+
import rest_framework.test
4+
5+
import business.models
6+
import user.models
7+
import user.tests.user.base
8+
9+
10+
class BusinessPromoStatsTests(user.tests.user.base.BaseUserTestCase):
11+
@classmethod
12+
def setUpTestData(cls):
13+
super().setUpTestData()
14+
cls.client = rest_framework.test.APIClient()
15+
user1_data = {
16+
'name': 'Stephen',
17+
'surname': 'Woz',
18+
'email': '[email protected]',
19+
'password': 'Californi@2000!',
20+
'other': {'age': 60, 'country': 'gb'},
21+
}
22+
response = cls.client.post(
23+
cls.user_signup_url,
24+
user1_data,
25+
format='json',
26+
)
27+
assert response.status_code == rest_framework.status.HTTP_200_OK
28+
cls.user1_token = response.data['access']
29+
30+
user2_data = {
31+
'name': 'Michael',
32+
'surname': 'Bloom',
33+
'email': '[email protected]',
34+
'password': 'Californi@2000!',
35+
'other': {'age': 15, 'country': 'us'},
36+
}
37+
response = cls.client.post(
38+
cls.user_signup_url,
39+
user2_data,
40+
format='json',
41+
)
42+
assert response.status_code == rest_framework.status.HTTP_200_OK
43+
cls.user2_token = response.data['access']
44+
45+
user3_data = {
46+
'name': 'Yefim',
47+
'surname': 'Dinit',
48+
'email': '[email protected]',
49+
'password': 'StrongPass1!',
50+
'other': {'age': 40, 'country': 'kz'},
51+
}
52+
response = cls.client.post(
53+
cls.user_signup_url,
54+
user3_data,
55+
format='json',
56+
)
57+
assert response.status_code == rest_framework.status.HTTP_200_OK
58+
cls.user3_token = response.data['access']
59+
60+
cls.client.credentials(
61+
HTTP_AUTHORIZATION='Bearer ' + cls.company1_token,
62+
)
63+
promo_data = {
64+
'description': 'Stats Test Promotion',
65+
'target': {},
66+
'max_count': 20,
67+
'active_from': '2025-01-01',
68+
'mode': 'COMMON',
69+
'promo_common': 'stats-sale',
70+
}
71+
response = cls.client.post(
72+
cls.promo_list_create_url,
73+
promo_data,
74+
format='json',
75+
)
76+
assert response.status_code == rest_framework.status.HTTP_201_CREATED
77+
cls.promo_id = response.data['id']
78+
79+
promo_instance = business.models.Promo.objects.get(id=cls.promo_id)
80+
user_1 = user.models.User.objects.get(email=user1_data['email'])
81+
user_2 = user.models.User.objects.get(email=user2_data['email'])
82+
user_3 = user.models.User.objects.get(email=user3_data['email'])
83+
for _ in range(3):
84+
user.models.PromoActivationHistory.objects.create(
85+
user=user_1,
86+
promo=promo_instance,
87+
)
88+
for _ in range(2):
89+
user.models.PromoActivationHistory.objects.create(
90+
user=user_2,
91+
promo=promo_instance,
92+
)
93+
for _ in range(4):
94+
user.models.PromoActivationHistory.objects.create(
95+
user=user_3,
96+
promo=promo_instance,
97+
)
98+
99+
def setUp(self):
100+
super().setUp()
101+
self.client = rest_framework.test.APIClient()
102+
103+
def test_stats_access_denied_for_other_company(self):
104+
self.client.credentials(
105+
HTTP_AUTHORIZATION='Bearer ' + self.company2_token,
106+
)
107+
url = django.urls.reverse(
108+
'api-business:promo-statistics',
109+
kwargs={'id': self.promo_id},
110+
)
111+
response = self.client.get(url)
112+
self.assertEqual(
113+
response.status_code,
114+
rest_framework.status.HTTP_403_FORBIDDEN,
115+
)
116+
117+
def test_get_activation_statistics(self):
118+
self.client.credentials(
119+
HTTP_AUTHORIZATION='Bearer ' + self.company1_token,
120+
)
121+
url = django.urls.reverse(
122+
'api-business:promo-statistics',
123+
kwargs={'id': self.promo_id},
124+
)
125+
response = self.client.get(url)
126+
self.assertEqual(
127+
response.status_code,
128+
rest_framework.status.HTTP_200_OK,
129+
)
130+
data = response.data
131+
132+
self.assertEqual(data['activations_count'], 9)
133+
counts = [item['activations_count'] for item in data['countries']]
134+
self.assertListEqual(counts, [3, 4, 2])

0 commit comments

Comments
 (0)