From a7964ce0ab7a2c2903c46bd0e674e1ec19db85d3 Mon Sep 17 00:00:00 2001 From: Sayyid Hamid Mahdavi Date: Fri, 26 Jun 2026 14:58:36 +0330 Subject: [PATCH] application views --- apps/gooyal_oauth2/rest_framework.py | 4 +- apps/promotions/tests.py | 150 +++++++++++++++++++++------ apps/promotions/views_application.py | 5 +- 3 files changed, 124 insertions(+), 35 deletions(-) diff --git a/apps/gooyal_oauth2/rest_framework.py b/apps/gooyal_oauth2/rest_framework.py index a8a30a9..eb510f8 100644 --- a/apps/gooyal_oauth2/rest_framework.py +++ b/apps/gooyal_oauth2/rest_framework.py @@ -58,8 +58,10 @@ class TokenMatchesViewSetActions(BasePermission): if hasattr(token, "scope"): # OAuth 2 required_action_scopes = self.get_required_action_scopes(request, view) - # m = request.method.upper() + # TODO: use action map instead to analyze method + action_map = view.action_map a = view.action + if a in required_action_scopes: logger.debug( "Required scopes alternatives to access resource: {0}".format( diff --git a/apps/promotions/tests.py b/apps/promotions/tests.py index 962ea2c..736bdf6 100644 --- a/apps/promotions/tests.py +++ b/apps/promotions/tests.py @@ -77,6 +77,8 @@ class ApplicationApiFlowsTests(APITestCase): 'promotions.user.self-plans:list-retrieve', 'promotions.application.user-promotions:promote', 'promotions.application.user-promotions:list-retrieve', + 'promotions.application.user-plan:promote', + 'promotions.application.user-plan:list-retrieve' ] def setUp(self): @@ -166,19 +168,25 @@ class ApplicationApiFlowsTests(APITestCase): 'base_amount': 800 } } - response = self.client.get(reverse('promotions:promotion-list', kwargs={"plan": self.first_ad_view_reward_plan.uuid}), event_create_data, HTTP_AUTHORIZATION=auth, - format='json') + response = self.client.get( + reverse('promotions:promotion-list', kwargs={"plan": self.first_ad_view_reward_plan.uuid}), + event_create_data, HTTP_AUTHORIZATION=auth, + format='json') print(response.json()) print(response.status_code) # response = self.client.post(reverse('promotions:user-promote', kwargs={"pk":self.first_ad_view_reward_plan.uuid}), event_create_data, HTTP_AUTHORIZATION=auth, format='json') - response = self.client.post(reverse('promotions:promotion-create', kwargs={"plan": self.first_ad_view_reward_plan.uuid}), event_create_data, HTTP_AUTHORIZATION=auth, - format='json') + response = self.client.post( + reverse('promotions:promotion-create', kwargs={"plan": self.first_ad_view_reward_plan.uuid}), + event_create_data, HTTP_AUTHORIZATION=auth, + format='json') print(response.json()) self.first_ad_view_reward_plan.refresh_from_db() self.assertEqual(self.first_ad_view_reward_plan.balance, 10000 - 800) - response = self.client.get(reverse('promotions:promotion-list', kwargs={"plan": self.first_ad_view_reward_plan.uuid}), event_create_data, HTTP_AUTHORIZATION=auth, - format='json') + response = self.client.get( + reverse('promotions:promotion-list', kwargs={"plan": self.first_ad_view_reward_plan.uuid}), + event_create_data, HTTP_AUTHORIZATION=auth, + format='json') print(response.json()) # response = self.client.post(reverse('promotions:promotion-create', kwargs={"plan": self.first_ad_view_reward_plan.uuid}), event_create_data, HTTP_AUTHORIZATION=auth, format='json') @@ -216,8 +224,10 @@ class ApplicationApiFlowsTests(APITestCase): 'referral': self.user_2_uuid } } - response = self.client.post(reverse('promotions:promotion-create', kwargs={"plan": self.referral_reward_plan.uuid}), event_create_data, HTTP_AUTHORIZATION=auth, - format='json') + response = self.client.post( + reverse('promotions:promotion-create', kwargs={"plan": self.referral_reward_plan.uuid}), event_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 - 1000) @@ -271,17 +281,22 @@ class ApplicationApiFlowsTests(APITestCase): } } self.assertEqual(Event.objects.count(), 0) - response = self.client.post(reverse('promotions:event-create'), submit_referral_create_data, HTTP_AUTHORIZATION=auth, format='json') + response = self.client.post(reverse('promotions:event-create'), submit_referral_create_data, + HTTP_AUTHORIZATION=auth, format='json') print(response.json()) self.settlement_reward_plan.refresh_from_db() self.assertEqual(self.settlement_reward_plan.balance, 100000) self.assertEqual(Event.objects.count(), 1) - response = self.client.post(reverse('promotions:promotion-create', kwargs={'plan': str(self.settlement_reward_plan.uuid)}), submit_settlement_create_data, - HTTP_AUTHORIZATION=auth, format='json') + response = self.client.post( + reverse('promotions:promotion-create', 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:promotion-create', kwargs={'plan': str(self.settlement_reward_plan.uuid)}), submit_settlement_create_data, - HTTP_AUTHORIZATION=auth, format='json') + response = self.client.post( + reverse('promotions:promotion-create', kwargs={'plan': str(self.settlement_reward_plan.uuid)}), + submit_settlement_create_data, + HTTP_AUTHORIZATION=auth, format='json') print(response.json()) def test_referral_percentage_reward_submit_settlement_success(self): @@ -333,17 +348,22 @@ class ApplicationApiFlowsTests(APITestCase): } } self.assertEqual(Event.objects.count(), 0) - response = self.client.post(reverse('promotions:event-create'), submit_referral_create_data, HTTP_AUTHORIZATION=auth, format='json') + response = self.client.post(reverse('promotions:event-create'), submit_referral_create_data, + HTTP_AUTHORIZATION=auth, format='json') print(response.json()) self.settlement_reward_plan.refresh_from_db() self.assertEqual(self.settlement_reward_plan.balance, 100000) self.assertEqual(Event.objects.count(), 1) - response = self.client.post(reverse('promotions:promotion-create', kwargs={'plan': str(self.settlement_reward_plan.uuid)}), submit_settlement_create_data, - HTTP_AUTHORIZATION=auth, format='json') + response = self.client.post( + reverse('promotions:promotion-create', 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:promotion-create', kwargs={'plan': str(self.settlement_reward_plan.uuid)}), submit_settlement_create_data, - HTTP_AUTHORIZATION=auth, format='json') + response = self.client.post( + reverse('promotions:promotion-create', kwargs={'plan': str(self.settlement_reward_plan.uuid)}), + submit_settlement_create_data, + HTTP_AUTHORIZATION=auth, format='json') print(response.json()) def test_serial_ad_view_promotion_success(self): @@ -438,11 +458,15 @@ class ApplicationApiFlowsTests(APITestCase): self.assertEqual(Event.objects.count(), 0) - response = self.client.post(reverse('promotions:promotion-create', kwargs={"plan": str(self.serial_promotion_plan.pk)}), serial_ad_1_event_create_data, - HTTP_AUTHORIZATION=auth, format='json') + response = self.client.post( + reverse('promotions:promotion-create', kwargs={"plan": str(self.serial_promotion_plan.pk)}), + serial_ad_1_event_create_data, + HTTP_AUTHORIZATION=auth, format='json') print(response.json()) - response = self.client.post(reverse('promotions:promotion-create', kwargs={"plan": str(self.serial_promotion_plan.pk)}), serial_ad_2_event_create_data, - HTTP_AUTHORIZATION=auth, format='json') + response = self.client.post( + reverse('promotions:promotion-create', kwargs={"plan": str(self.serial_promotion_plan.pk)}), + serial_ad_2_event_create_data, + HTTP_AUTHORIZATION=auth, format='json') # response = self.client.post(reverse('promotions:event-create'), serial_ad_2_event_create_data, HTTP_AUTHORIZATION=auth, format='json') print(response.json()) @@ -450,11 +474,14 @@ class ApplicationApiFlowsTests(APITestCase): return - response = self.client.post(reverse('promotions:event-create'), serial_ad_1_event_create_data, HTTP_AUTHORIZATION=auth, format='json') + response = self.client.post(reverse('promotions:event-create'), serial_ad_1_event_create_data, + HTTP_AUTHORIZATION=auth, format='json') event_1 = Event.objects.first() - response = self.client.post(reverse('promotions:event-create'), serial_ad_2_event_create_data, HTTP_AUTHORIZATION=auth, format='json') + response = self.client.post(reverse('promotions:event-create'), serial_ad_2_event_create_data, + HTTP_AUTHORIZATION=auth, format='json') event_2 = Event.objects.first() - response = self.client.post(reverse('promotions:event-create'), serial_ad_3_event_create_data, HTTP_AUTHORIZATION=auth, format='json') + response = self.client.post(reverse('promotions:event-create'), serial_ad_3_event_create_data, + HTTP_AUTHORIZATION=auth, format='json') event_3 = Event.objects.first() analyze_event_task(event_1.uuid) @@ -477,12 +504,12 @@ class ApplicationApiFlowsTests(APITestCase): ) base_promotion, _created = Promotion.objects.get_or_create( - user_uuid = self.user_1_uuid, - application = self.application, - plan = base_plan, - state = PaymentStateChoices.SUCCESS, - base_amount = 10000, - promotion_amount = 10000 + user_uuid=self.user_1_uuid, + application=self.application, + plan=base_plan, + state=PaymentStateChoices.SUCCESS, + base_amount=10000, + promotion_amount=10000 ) promotion_event_saver, _created = EventSaver.objects.get_or_create( @@ -529,6 +556,65 @@ class ApplicationApiFlowsTests(APITestCase): self.assertEqual(base_promotion.promotion_amount, 9000) self.assertEqual(Event.objects.count(), 1) - response = self.client.post(reverse('promotions:promotion-create', kwargs={'plan': str(promotion_plan.uuid)}), create_data, + response = self.client.post(reverse('promotions:promotion-create', kwargs={'plan': str(promotion_plan.uuid)}), + create_data, HTTP_AUTHORIZATION=auth, format='json') print(response.json()) + + def test_application_promote_user_success(self): + self.first_ad_view_reward_event_saver, _created = EventSaver.objects.get_or_create( + title=self.first_ad_view_reward_label, + event_label=self.first_ad_view_reward_label, + save_once=True, + ) + + self.first_ad_view_reward_plan, _created = Plan.objects.get_or_create( + title=self.first_ad_view_reward_label, + balance=10000, + user=self.user_1, + application=self.application, + event_list=[self.first_ad_view_reward_label] + ) + + self.first_ad_view_reward_recipient, _created = Recipient.objects.get_or_create( + label=self.first_ad_view_reward_label, + plan=self.first_ad_view_reward_plan, + wallet_uuid=self.user_1_uuid, + recipient_uuid_field="->event:user", + base_amount_field="event:base_amount", + + ) + + auth = self._create_authorization_header(self.application_access_token.token) + event_create_data = { + 'label': self.first_ad_view_reward_label, + "data": { + 'user': self.user_1_uuid, + 'base_amount': 800 + } + } + + url = reverse('promotions-application:plan-promote', + kwargs={"pk": self.first_ad_view_reward_plan.uuid, "user_uuid": self.user_1_uuid}) + # url = reverse('promotions-application:plan-test', kwargs={"pk": self.first_ad_view_reward_plan.uuid, "user_uuid":self.user_1_uuid}) + # response = self.client.get(url, event_create_data, HTTP_AUTHORIZATION=auth, + # format='json') + # print(response.json()) + # print(response.status_code) + # response = self.client.post(reverse('promotions:user-promote', kwargs={"pk":self.first_ad_view_reward_plan.uuid}), event_create_data, HTTP_AUTHORIZATION=auth, format='json') + response = self.client.post(url, event_create_data, HTTP_AUTHORIZATION=auth, format='json') + print(response.json()) + + response = self.client.post(url, event_create_data, HTTP_AUTHORIZATION=auth, format='json') + print(response.json()) + + self.first_ad_view_reward_plan.refresh_from_db() + self.assertEqual(self.first_ad_view_reward_plan.balance, 10000 - 800) + + + # response = self.client.get(reverse('promotions:promotion-list', kwargs={"plan": self.first_ad_view_reward_plan.uuid}), event_create_data, HTTP_AUTHORIZATION=auth, + # format='json') + # print(response.json()) + + # response = self.client.post(reverse('promotions:promotion-create', kwargs={"plan": self.first_ad_view_reward_plan.uuid}), event_create_data, HTTP_AUTHORIZATION=auth, format='json') + # print(response.json()) diff --git a/apps/promotions/views_application.py b/apps/promotions/views_application.py index 2d9dead..0e05d62 100644 --- a/apps/promotions/views_application.py +++ b/apps/promotions/views_application.py @@ -33,7 +33,8 @@ class ApplicationPlanViewSet( def get_queryset(self): application = get_application(self.request) - return Promotion.objects.filter(application=application) + # return Promotion.objects.filter(application=application) + return Plan.objects.all() # def perform_create(self, serializer): # user = self.get_user() @@ -48,7 +49,7 @@ class ApplicationPlanViewSet( # promotion.promote(**promotion_args) @action(detail=True, methods=['POST'], serializer_class=PromoteSerializer) - def promote(self, request, pk=None): + def promote(self, request, *args, pk=None, **kwargs): plan = self.get_object() application = get_application(self.request)