Skip to content

Commit 31754a4

Browse files
Merge pull request #35 from RandomProgramm3r/develop
refactor: Combine promo list and create endpoints, update tests Replaced separate views for listing and creating company promos with a single CompanyPromoListCreateView based on ListCreateAPIView. This simplifies the API by handling GET and POST requests for promos at a single URL endpoint (`api/business/promo`). - Uses get_serializer_class for appropriate request methods. - Moved query param validation into the list method. - Updated urls.py to point to the new combined view. - Remove redundant imports in serializers. - Adapt promo tests to use combined list/create URL.
2 parents 6f7f229 + 55241c6 commit 31754a4

File tree

11 files changed

+104
-106
lines changed

11 files changed

+104
-106
lines changed

promo_code/business/serializers.py

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212

1313
import business.constants
1414
import business.models
15-
import business.models as business_models
1615
import business.utils.auth
1716
import business.utils.tokens
1817
import business.validators
@@ -46,12 +45,12 @@ class CompanySignUpSerializer(rest_framework.serializers.ModelSerializer):
4645
)
4746

4847
class Meta:
49-
model = business_models.Company
48+
model = business.models.Company
5049
fields = ('id', 'name', 'email', 'password')
5150

5251
@django.db.transaction.atomic
5352
def create(self, validated_data):
54-
company = business_models.Company.objects.create_company(
53+
company = business.models.Company.objects.create_company(
5554
**validated_data,
5655
)
5756

@@ -76,8 +75,8 @@ def validate(self, attrs):
7675
)
7776

7877
try:
79-
company = business_models.Company.objects.get(email=email)
80-
except business_models.Company.DoesNotExist:
78+
company = business.models.Company.objects.get(email=email)
79+
except business.models.Company.DoesNotExist:
8180
raise rest_framework.serializers.ValidationError(
8281
'Invalid credentials.',
8382
)
@@ -227,7 +226,7 @@ class PromoCreateSerializer(rest_framework.serializers.ModelSerializer):
227226
)
228227

229228
class Meta:
230-
model = business_models.Promo
229+
model = business.models.Promo
231230
fields = (
232231
'url',
233232
'description',
@@ -251,7 +250,7 @@ def create(self, validated_data):
251250
promo_common = validated_data.pop('promo_common', None)
252251
promo_unique = validated_data.pop('promo_unique', None)
253252

254-
return business_models.Promo.objects.create_promo(
253+
return business.models.Promo.objects.create_promo(
255254
user=self.context['request'].user,
256255
target_data=target_data,
257256
promo_common=promo_common,
@@ -418,7 +417,7 @@ class PromoReadOnlySerializer(rest_framework.serializers.ModelSerializer):
418417
)
419418

420419
class Meta:
421-
model = business_models.Promo
420+
model = business.models.Promo
422421
fields = (
423422
'promo_id',
424423
'company_id',
@@ -484,7 +483,7 @@ class PromoDetailSerializer(rest_framework.serializers.ModelSerializer):
484483
)
485484

486485
class Meta:
487-
model = business_models.Promo
486+
model = business.models.Promo
488487
fields = (
489488
'promo_id',
490489
'description',

promo_code/business/tests/promocodes/base.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@ class BasePromoTestCase(rest_framework.test.APITestCase):
1111
def setUpTestData(cls):
1212
super().setUpTestData()
1313
cls.client = rest_framework.test.APIClient()
14-
cls.promo_create_url = django.urls.reverse('api-business:promo-create')
15-
cls.promo_list_url = django.urls.reverse(
16-
'api-business:company-promo-list',
14+
cls.promo_list_create_url = django.urls.reverse(
15+
'api-business:promo-list-create',
1716
)
1817
cls.signup_url = django.urls.reverse('api-business:company-sign-up')
1918
cls.signin_url = django.urls.reverse('api-business:company-sign-in')

promo_code/business/tests/promocodes/operations/test_create.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def test_successful_promo_creation_1(self):
2424
'promo_common': 'sale-10',
2525
}
2626
response = self.client.post(
27-
self.promo_create_url,
27+
self.promo_list_create_url,
2828
payload,
2929
format='json',
3030
)
@@ -44,7 +44,7 @@ def test_successful_promo_creation_2(self):
4444
'promo_common': 'sale-40',
4545
}
4646
response = self.client.post(
47-
self.promo_create_url,
47+
self.promo_list_create_url,
4848
payload,
4949
format='json',
5050
)
@@ -64,7 +64,7 @@ def test_successful_promo_creation_3(self):
6464
'promo_unique': ['uniq1', 'uniq2', 'uniq3'],
6565
}
6666
response = self.client.post(
67-
self.promo_create_url,
67+
self.promo_list_create_url,
6868
payload,
6969
format='json',
7070
)
@@ -83,7 +83,7 @@ def test_successful_promo_creation_4(self):
8383
'promo_unique': ['only_youuuu', 'not_only_you'],
8484
}
8585
response = self.client.post(
86-
self.promo_create_url,
86+
self.promo_list_create_url,
8787
payload,
8888
format='json',
8989
)
@@ -103,7 +103,7 @@ def test_successful_promo_creation_5(self):
103103
'promo_common': 'sale-10',
104104
}
105105
response = self.client.post(
106-
self.promo_create_url,
106+
self.promo_list_create_url,
107107
payload,
108108
format='json',
109109
)
@@ -122,7 +122,7 @@ def test_successful_promo_creation_6_country_lower(self):
122122
'promo_common': 'sale-10',
123123
}
124124
response = self.client.post(
125-
self.promo_create_url,
125+
self.promo_list_create_url,
126126
payload,
127127
format='json',
128128
)
@@ -141,7 +141,7 @@ def test_successful_promo_creation_6_country_upper(self):
141141
'promo_common': 'sale-10',
142142
}
143143
response = self.client.post(
144-
self.promo_create_url,
144+
self.promo_list_create_url,
145145
payload,
146146
format='json',
147147
)
@@ -160,7 +160,7 @@ def test_successful_promo_creation_7(self):
160160
'promo_common': 'sale-10',
161161
}
162162
response = self.client.post(
163-
self.promo_create_url,
163+
self.promo_list_create_url,
164164
payload,
165165
format='json',
166166
)

promo_code/business/tests/promocodes/operations/test_detail.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def setUpTestData(cls):
2222
'promo_common': 'sale-10',
2323
}
2424
response1 = client.post(
25-
cls.promo_create_url,
25+
cls.promo_list_create_url,
2626
promo1_data,
2727
format='json',
2828
)
@@ -38,7 +38,7 @@ def setUpTestData(cls):
3838
'promo_unique': ['only_youuuu', 'not_only_you'],
3939
}
4040
response2 = client.post(
41-
cls.promo_create_url,
41+
cls.promo_list_create_url,
4242
promo2_data,
4343
format='json',
4444
)
@@ -269,7 +269,7 @@ def test_final_get_promo_company1(self):
269269
rest_framework.status.HTTP_200_OK,
270270
)
271271

272-
response = self.client.get(self.promo_list_url)
272+
response = self.client.get(self.promo_list_create_url)
273273
self.assertEqual(
274274
response.status_code,
275275
rest_framework.status.HTTP_200_OK,

promo_code/business/tests/promocodes/operations/test_list.py

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def _create_additional_promo(self):
1919
'promo_common': 'special-10',
2020
}
2121
response_create = self.client.post(
22-
self.promo_create_url,
22+
self.promo_list_create_url,
2323
self.__class__.promo5_data,
2424
format='json',
2525
)
@@ -99,7 +99,7 @@ def setUp(self):
9999
)
100100

101101
def test_get_all_promos(self):
102-
response = self.client.get(self.promo_list_url)
102+
response = self.client.get(self.promo_list_create_url)
103103
self.assertEqual(
104104
response.status_code,
105105
rest_framework.status.HTTP_200_OK,
@@ -113,7 +113,7 @@ def test_get_all_promos(self):
113113
self.assertEqual(response.headers.get('X-Total-Count'), '3')
114114

115115
def test_get_promos_with_pagination_offset_1(self):
116-
response = self.client.get(self.promo_list_url, {'offset': 1})
116+
response = self.client.get(self.promo_list_create_url, {'offset': 1})
117117
self.assertEqual(
118118
response.status_code,
119119
rest_framework.status.HTTP_200_OK,
@@ -127,7 +127,7 @@ def test_get_promos_with_pagination_offset_1(self):
127127

128128
def test_get_promos_with_pagination_offset_1_limit_1(self):
129129
response = self.client.get(
130-
self.promo_list_url,
130+
self.promo_list_create_url,
131131
{'offset': 1, 'limit': 1},
132132
)
133133
self.assertEqual(
@@ -140,7 +140,7 @@ def test_get_promos_with_pagination_offset_1_limit_1(self):
140140
self.assertEqual(response.get('X-Total-Count'), '3')
141141

142142
def test_get_promos_with_pagination_offset_100(self):
143-
response = self.client.get(self.promo_list_url, {'offset': 100})
143+
response = self.client.get(self.promo_list_create_url, {'offset': 100})
144144
self.assertEqual(
145145
response.status_code,
146146
rest_framework.status.HTTP_200_OK,
@@ -150,7 +150,10 @@ def test_get_promos_with_pagination_offset_100(self):
150150
self.assertEqual(response.get('X-Total-Count'), '3')
151151

152152
def test_get_promos_filter_country_gb(self):
153-
response = self.client.get(self.promo_list_url, {'country': 'gb'})
153+
response = self.client.get(
154+
self.promo_list_create_url,
155+
{'country': 'gb'},
156+
)
154157
self.assertEqual(
155158
response.status_code,
156159
rest_framework.status.HTTP_200_OK,
@@ -164,7 +167,7 @@ def test_get_promos_filter_country_gb(self):
164167

165168
def test_get_promos_filter_country_gb_sort_active_until(self):
166169
response = self.client.get(
167-
self.promo_list_url,
170+
self.promo_list_create_url,
168171
{'country': 'gb', 'sort_by': 'active_until'},
169172
)
170173
self.assertEqual(
@@ -180,7 +183,7 @@ def test_get_promos_filter_country_gb_sort_active_until(self):
180183

181184
def test_get_promos_filter_country_gb_fr_sort_active_from_limit_10(self):
182185
response = self.client.get(
183-
self.promo_list_url,
186+
self.promo_list_create_url,
184187
{'country': 'gb,FR', 'sort_by': 'active_from', 'limit': 10},
185188
)
186189
self.assertEqual(
@@ -199,7 +202,7 @@ def test_get_promos_filter_country_gb_fr_sort_active_from_limit_2_offset_2(
199202
self,
200203
):
201204
response = self.client.get(
202-
self.promo_list_url,
205+
self.promo_list_create_url,
203206
{
204207
'country': 'gb,FR',
205208
'sort_by': 'active_from',
@@ -218,7 +221,7 @@ def test_get_promos_filter_country_gb_fr_sort_active_from_limit_2_offset_2(
218221

219222
def test_get_promos_filter_country_gb_fr_us_sort_active_from_limit_2(self):
220223
response = self.client.get(
221-
self.promo_list_url,
224+
self.promo_list_create_url,
222225
{'country': 'gb,FR,us', 'sort_by': 'active_from', 'limit': 2},
223226
)
224227
self.assertEqual(
@@ -233,7 +236,7 @@ def test_get_promos_filter_country_gb_fr_us_sort_active_from_limit_2(self):
233236
self.assertEqual(response.get('X-Total-Count'), '3')
234237

235238
def test_get_promos_limit_zero(self):
236-
response = self.client.get(self.promo_list_url, {'limit': 0})
239+
response = self.client.get(self.promo_list_create_url, {'limit': 0})
237240
self.assertEqual(
238241
response.status_code,
239242
rest_framework.status.HTTP_200_OK,
@@ -245,7 +248,7 @@ def test_create_and_get_promos(self):
245248
self._create_additional_promo()
246249

247250
response_list = self.client.get(
248-
self.promo_list_url,
251+
self.promo_list_create_url,
249252
{'country': 'gb,FR,Kz', 'sort_by': 'active_from', 'limit': 10},
250253
)
251254
self.assertEqual(
@@ -260,7 +263,7 @@ def test_create_and_get_promos(self):
260263
def test_get_promos_filter_gb_kz_fr(self):
261264
self._create_additional_promo()
262265
response = self.client.get(
263-
self.promo_list_url,
266+
self.promo_list_create_url,
264267
{'country': 'gb,Kz,FR', 'sort_by': 'active_from', 'limit': 10},
265268
)
266269
self.assertEqual(
@@ -275,7 +278,7 @@ def test_get_promos_filter_gb_kz_fr(self):
275278
def test_get_promos_filter_kz_sort_active_until(self):
276279
self._create_additional_promo()
277280
response = self.client.get(
278-
self.promo_list_url,
281+
self.promo_list_create_url,
279282
{'country': 'Kz', 'sort_by': 'active_until', 'limit': 10},
280283
)
281284
self.assertEqual(
@@ -300,7 +303,7 @@ def test_country_parameter_formats(self, _, params, expected_count):
300303
'limit': 10,
301304
}
302305

303-
response = self.client.get(self.promo_list_url, full_params)
306+
response = self.client.get(self.promo_list_create_url, full_params)
304307
self.assertEqual(
305308
response.status_code,
306309
rest_framework.status.HTTP_200_OK,

promo_code/business/tests/promocodes/test_permissions.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def setUp(self):
3838
def create_promo(self, token, payload):
3939
self.client.credentials(HTTP_AUTHORIZATION='Bearer ' + token)
4040
response = self.client.post(
41-
self.promo_create_url,
41+
self.promo_list_create_url,
4242
payload,
4343
format='json',
4444
)
@@ -53,17 +53,17 @@ def tearDown(self):
5353
user.models.User.objects.all().delete()
5454

5555
def test_has_permission_for_company_user(self):
56-
request = self.factory.get(self.promo_create_url)
56+
request = self.factory.get(self.promo_list_create_url)
5757
request.user = self.company1
5858
self.assertTrue(self.permission.has_permission(request, None))
5959

6060
def test_has_permission_for_regular_user(self):
61-
request = self.factory.get(self.promo_create_url)
61+
request = self.factory.get(self.promo_list_create_url)
6262
request.user = self.regular_user
6363
self.assertFalse(self.permission.has_permission(request, None))
6464

6565
def test_has_permission_for_anonymous_user(self):
66-
request = self.factory.get(self.promo_create_url)
66+
request = self.factory.get(self.promo_list_create_url)
6767
request.user = None
6868
self.assertFalse(self.permission.has_permission(request, None))
6969

0 commit comments

Comments
 (0)