diff --git a/apps/promotions/tests.py b/apps/promotions/tests.py index 8f0305f..2b37159 100644 --- a/apps/promotions/tests.py +++ b/apps/promotions/tests.py @@ -720,6 +720,46 @@ class ApplicationApiFlowsTests(APITestCase): print(response.json()) self.assertEqual(response.status_code, 404) + def test_application_event_viewset_create_success(self): + EventSaver.objects.get_or_create( + title=self.first_ad_view_reward_label, + event_label=self.first_ad_view_reward_label, + save_once=False, + ) + + auth = self._create_authorization_header(self.application_access_token.token) + event_create_data = { + 'label': self.first_ad_view_reward_label, + 'data': {'foo': 'bar'}, + } + + url = reverse('promotions-application:event-list', kwargs={'user_uuid': str(self.user_1_uuid)}) + response = self.client.post(url, event_create_data, HTTP_AUTHORIZATION=auth, format='json') + + self.assertEqual(response.status_code, 201) + event = Event.objects.get(label=self.first_ad_view_reward_label) + self.assertEqual(event.user, self.user_1_uuid) + + def test_application_event_viewset_create_duplicate_returns_unprocessable_entity(self): + EventSaver.objects.get_or_create( + title=self.first_ad_view_reward_label, + event_label=self.first_ad_view_reward_label, + save_once=True, + ) + + auth = self._create_authorization_header(self.application_access_token.token) + event_create_data = { + 'label': self.first_ad_view_reward_label, + 'data': {'foo': 'bar'}, + } + + url = reverse('promotions-application:event-list', kwargs={'user_uuid': str(self.user_1_uuid)}) + first_response = self.client.post(url, event_create_data, HTTP_AUTHORIZATION=auth, format='json') + self.assertEqual(first_response.status_code, 201) + + second_response = self.client.post(url, event_create_data, HTTP_AUTHORIZATION=auth, format='json') + self.assertEqual(second_response.status_code, 422) + def _create_first_ad_create_plan(self): event_label = 'ads::first-ad-create' plan_title = 'first-ad-create' diff --git a/apps/promotions/views_application.py b/apps/promotions/views_application.py index 9664c7e..2870634 100644 --- a/apps/promotions/views_application.py +++ b/apps/promotions/views_application.py @@ -145,18 +145,15 @@ class ApplicationEventViewSet( return Response(serializer.data) def perform_create(self, serializer: EventSerializer): - if hasattr(self.request, 'user'): - user = self.request.user - else: - user = None + user = self._resolve_user() application = get_application(self.request) # EventSaver.objects.first(event_label=serializer.validated_data['event_label'], valid_application__contains=application.uuid) event_saver: EventSaver = EventSaver.objects.filter(event_label=serializer.validated_data['label']).first() try: - event = event_saver.save_event(user=user, application=application, **serializer.validated_data) + event = event_saver.save_event(user=user.uuid, application=application, **serializer.validated_data) except Exception as e: - raise exceptions.ValidationError(str(e)) + raise UnprocessableEntity(str(e)) analyze_event_task.delay(event.uuid) serializer.instance = event