3 type of promotion test pass
This commit is contained in:
parent
aa0011d615
commit
2a6971f106
2 changed files with 82 additions and 40 deletions
|
|
@ -139,7 +139,8 @@ class Recipient(BaseModel):
|
|||
return self.wallet_uuid or settings.WALLET_PROMOTION_CATEGORY_UUID
|
||||
|
||||
def get_recipient_uuid(self, plan=None, event=None):
|
||||
try:
|
||||
if ':' in self.recipient_uuid_field and not self.recipient_uuid_field.startswith('QS:'):
|
||||
|
||||
model_name, key = self.recipient_uuid_field.split(':')
|
||||
if model_name == 'event':
|
||||
obj = event
|
||||
|
|
@ -149,7 +150,27 @@ class Recipient(BaseModel):
|
|||
raise NotImplementedError()
|
||||
|
||||
return obj.data.get(key)
|
||||
except Exception as e:
|
||||
elif ':' in self.recipient_uuid_field and self.recipient_uuid_field.startswith('QS:'):
|
||||
params , recipient_candidate = self.recipient_uuid_field.split('->')
|
||||
query_set_flag, model, filters, = params.split(':')
|
||||
filters_key_values= filters.split('&')
|
||||
filter_params = {}
|
||||
for key_value in filters_key_values:
|
||||
key, value = key_value.split('=')
|
||||
filter_params[key] = value
|
||||
if model.lower() == 'event':
|
||||
model_class = Event
|
||||
elif model.lower() == 'plan':
|
||||
model_class = Plan
|
||||
elif model.lower() == 'promotion':
|
||||
model_class = Promotion
|
||||
else:
|
||||
raise NotImplementedError()
|
||||
|
||||
if model_class.objects.filter(**filter_params).exists():
|
||||
return recipient_candidate
|
||||
|
||||
else:
|
||||
try:
|
||||
uuid.UUID(self.recipient_uuid_field)
|
||||
return self.recipient_uuid_field
|
||||
|
|
@ -182,26 +203,29 @@ class Recipient(BaseModel):
|
|||
# return PromotionTypeChoices(self.promotion_type).handler(self)
|
||||
|
||||
def promote(self, plan=None, event=None):
|
||||
with transaction.atomic():
|
||||
promotion_amount = self.get_promotion_amount(plan=plan, event=event)
|
||||
reserved = self.plan.reserve_promotion_amount(promotion_amount)
|
||||
if reserved:
|
||||
promotion, created = Promotion.objects.get_or_create(
|
||||
promotion_amount=promotion_amount,
|
||||
user_uuid=self.get_recipient_uuid(plan, event),
|
||||
event=event,
|
||||
plan=plan,
|
||||
recipient=self,
|
||||
base_amount=promotion_amount,
|
||||
)
|
||||
if created:
|
||||
promotion.promote()
|
||||
recipient = self.get_recipient_uuid(plan, event)
|
||||
if recipient:
|
||||
with transaction.atomic():
|
||||
promotion_amount = self.get_promotion_amount(plan=plan, event=event)
|
||||
reserved = self.plan.reserve_promotion_amount(promotion_amount)
|
||||
if reserved:
|
||||
promotion, created = Promotion.objects.get_or_create(
|
||||
promotion_amount=promotion_amount,
|
||||
user_uuid=self.get_recipient_uuid(plan, event),
|
||||
event=event,
|
||||
plan=plan,
|
||||
recipient=self,
|
||||
base_amount=promotion_amount,
|
||||
)
|
||||
if created:
|
||||
promotion.promote()
|
||||
else:
|
||||
raise Exception('promotion object not created')
|
||||
else:
|
||||
raise Exception('promotion object not created')
|
||||
else:
|
||||
raise Exception('promotion reward not reserved')
|
||||
raise Exception('promotion reward not reserved')
|
||||
|
||||
return promotion
|
||||
return promotion
|
||||
return None
|
||||
|
||||
|
||||
class PromotionQuerySet(models.QuerySet):
|
||||
|
|
|
|||
|
|
@ -216,48 +216,66 @@ class ApplicationApiFlowsTests(APITestCase):
|
|||
self.assertEqual(response.json()['promotions'][0]['user'], str(self.user_2_uuid))
|
||||
|
||||
|
||||
def test_referral_reward_submit_event_success(self):
|
||||
def test_referral_reward_submit_settlement_success(self):
|
||||
self.referral_reward_event_saver, _created = EventSaver.objects.get_or_create(
|
||||
title=self.referral_reward_label,
|
||||
event_label=self.referral_reward_label,
|
||||
save_once=True,
|
||||
)
|
||||
|
||||
self.referral_reward_plan, _created = Plan.objects.get_or_create(
|
||||
title=self.referral_reward_label,
|
||||
balance=10000,
|
||||
user=self.user_1,
|
||||
application=self.application,
|
||||
event_list=[self.referral_reward_label]
|
||||
self.settlement_reward_event_saver, _created = EventSaver.objects.get_or_create(
|
||||
title=self.settlement_reward_label,
|
||||
event_label=self.settlement_reward_label,
|
||||
save_once=False,
|
||||
)
|
||||
|
||||
self.referral_reward_recipient, _created = Recipient.objects.get_or_create(
|
||||
label=self.referral_reward_label,
|
||||
plan=self.referral_reward_plan,
|
||||
self.settlement_reward_plan, _created = Plan.objects.get_or_create(
|
||||
title=self.settlement_reward_label,
|
||||
balance=100000,
|
||||
user=self.user_1,
|
||||
application=self.application,
|
||||
event_list=[self.settlement_reward_label]
|
||||
)
|
||||
|
||||
self.settlement_referral_reward_recipient, _created = Recipient.objects.get_or_create(
|
||||
label='settlement_referral_reward_label',
|
||||
plan=self.settlement_reward_plan,
|
||||
wallet_uuid=self.user_1_uuid,
|
||||
recipient_uuid_field="event:referral",
|
||||
base_amount_field="1000",
|
||||
# recipient_uuid_field=self.user_2_uuid,
|
||||
recipient_uuid_field=f"QS:Event:label={self.referral_reward_label}&data__referral={self.user_2_uuid}->{self.user_2_uuid}",
|
||||
base_amount_field="event:base_amount",
|
||||
|
||||
)
|
||||
|
||||
auth = self._create_authorization_header(self.user_access_token.token)
|
||||
event_create_data = {
|
||||
submit_referral_create_data = {
|
||||
'label': self.referral_reward_label,
|
||||
"data": {
|
||||
'user': self.user_1_uuid,
|
||||
'referral': self.user_2_uuid
|
||||
}
|
||||
}
|
||||
submit_settlement_create_data = {
|
||||
'label': self.settlement_reward_label,
|
||||
"data": {
|
||||
'user': self.user_1_uuid,
|
||||
'settlement': self.user_2_uuid,
|
||||
'base_amount': 7000
|
||||
}
|
||||
}
|
||||
self.assertEqual(Event.objects.count(), 0)
|
||||
response = self.client.post(reverse('promotions:event'), event_create_data, HTTP_AUTHORIZATION=auth, format='json')
|
||||
response = self.client.post(reverse('promotions:event'), submit_referral_create_data, HTTP_AUTHORIZATION=auth, format='json')
|
||||
print(response.json())
|
||||
self.referral_reward_plan.refresh_from_db()
|
||||
self.assertEqual(self.referral_reward_plan.balance, 10000)
|
||||
self.settlement_reward_plan.refresh_from_db()
|
||||
self.assertEqual(self.settlement_reward_plan.balance, 100000)
|
||||
self.assertEqual(Event.objects.count(), 1)
|
||||
event = Event.objects.first()
|
||||
analyze_event_task(event.uuid)
|
||||
self.referral_reward_plan.refresh_from_db()
|
||||
self.assertEqual(self.referral_reward_plan.balance, 10000 - 1000)
|
||||
|
||||
response = self.client.post(reverse('promotions:promote', kwargs={'plan': str(self.settlement_reward_plan.uuid)}), submit_settlement_create_data, HTTP_AUTHORIZATION=auth, format='json')
|
||||
print(response.json())
|
||||
response = self.client.post(reverse('promotions:promote', kwargs={'plan': str(self.settlement_reward_plan.uuid)}), submit_settlement_create_data, HTTP_AUTHORIZATION=auth, format='json')
|
||||
print(response.json())
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue