From 7a532463a667c70de7192f421fb4189ffe65a457 Mon Sep 17 00:00:00 2001 From: Christian Cueni Date: Thu, 13 Feb 2020 12:32:55 +0100 Subject: [PATCH] Update registration mutation with user id and hep calls --- server/core/hep_client.py | 17 +++++---- server/registration/mutations_public.py | 11 ++++-- .../registration/tests/test_registration.py | 37 ++++++++++++------- 3 files changed, 41 insertions(+), 24 deletions(-) diff --git a/server/core/hep_client.py b/server/core/hep_client.py index 975c59f4..76027a31 100644 --- a/server/core/hep_client.py +++ b/server/core/hep_client.py @@ -66,7 +66,6 @@ class HepClient: elif response.status_code != 200: raise HepClientException(response.status_code, response.json()) - logger.info(response.json()) return response def fetch_admin_token(self, admin_user, password): @@ -111,15 +110,14 @@ class HepClient: response = self._call('/rest/V1/customers/me', additional_headers={'authorization': 'Bearer {}'.format(token)}) return response.json() - def customer_activate(self, confirmation_key): - response = self._call("/customer/account/confirm/?back_url=&id=58862&key=f62319366a5ecdd1e3dede5fd1a5c236", method='put', data={ - 'confirmationKey': confirmation_key - }) - return response.json() + def customer_activate(self, confirmation_key, user_id): + response = self._call("/customer/account/confirm/?back_url=&id={}&key={}" + .format(user_id, confirmation_key), method='get') + return response def customers_search(self, admin_token, email): response = self._call("/rest/V1/customers/search?searchCriteria[filterGroups][0][filters][0][field]=" - "email&searchCriteria[filterGroups][0][filters][0][value]={}".format(email), method='get', + "email&searchCriteria[filterGroups][0][filters][0][value]={}".format(email), additional_headers={'authorization': 'Bearer {}'.format(admin_token)}) json_data = response.json() @@ -127,6 +125,11 @@ class HepClient: return json_data['items'][0] return None + def customers_by_id(self, admin_token, user_id): + response = self._call('/rest/V1/customers/{}'.format(user_id), + additional_headers={'authorization': 'Bearer {}'.format(admin_token)}) + return response.json() + def _customer_orders(self, admin_token, customer_id): url = ("/rest/V1/orders/?searchCriteria[filterGroups][0][filters][0][" "field]=customer_id&searchCriteria[filterGroups][0][filters][0][value]={}".format(customer_id)) diff --git a/server/registration/mutations_public.py b/server/registration/mutations_public.py index 848f348d..05561189 100644 --- a/server/registration/mutations_public.py +++ b/server/registration/mutations_public.py @@ -12,6 +12,7 @@ from django.contrib.auth import login from graphene import relay from core.hep_client import HepClient, HepClientException, HepClientUnauthorizedException +from core.models import AdminData from users.user_signup_login_handler import handle_user_and_verify_products, UNKNOWN_ERROR @@ -22,6 +23,7 @@ class RegistrationError(graphene.ObjectType): class Registration(relay.ClientIDMutation): class Input: confirmation_key_input = graphene.String() + user_id_input = graphene.Int() success = graphene.Boolean() message = graphene.String() @@ -30,13 +32,16 @@ class Registration(relay.ClientIDMutation): @classmethod def mutate_and_get_payload(cls, root, info, **kwargs): confirmation_key = kwargs.get('confirmation_key_input') + user_id = kwargs.get('user_id_input') hep_client = HepClient() + admin_token = AdminData.objects.get_admin_token() try: - user_data = hep_client.customer_activate(confirmation_key) - except HepClientUnauthorizedException: - return cls.return_registration_msg('invalid_key') + hep_client.customer_activate(confirmation_key, user_id) + user_data = hep_client.customers_by_id(admin_token) + if 'confirmation' in user_data: + return cls.return_registration_msg('invalid_key') except HepClientException: return cls.return_registration_msg('unknown_error') diff --git a/server/registration/tests/test_registration.py b/server/registration/tests/test_registration.py index bee2bf9c..510a6f73 100644 --- a/server/registration/tests/test_registration.py +++ b/server/registration/tests/test_registration.py @@ -16,10 +16,14 @@ from graphene.test import Client from api.schema import schema from core.hep_client import HepClient -from core.tests.mock_hep_data_factory import MockResponse, ME_DATA, VALID_TEACHERS_ORDERS +from core.tests.mock_hep_data_factory import ME_DATA, VALID_TEACHERS_ORDERS from registration.models import License from users.models import User, Role, SchoolClass +INVALID_KEY_ME = dict(ME_DATA) + +INVALID_KEY_ME['confirmation'] = 'abddddddd' + class RegistrationTests(TestCase): def setUp(self): @@ -37,7 +41,7 @@ class RegistrationTests(TestCase): request.session.save() self.client = Client(schema=schema, context_value=request) - def make_register_mutation(self, confirmation_key): + def make_register_mutation(self, confirmation_key, user_id): mutation = ''' mutation Registration($input: RegistrationInput!){ registration(input: $input) { @@ -52,33 +56,38 @@ class RegistrationTests(TestCase): return self.client.execute(mutation, variables={ 'input': { - 'confirmationKeyInput': confirmation_key + 'confirmationKeyInput': confirmation_key, + 'userIdInput': user_id } }) - @patch.object(HepClient, 'customer_activate', return_value=ME_DATA) + @patch.object(HepClient, 'customer_activate', return_value="Response") + @patch.object(HepClient, 'customers_by_id', return_value=ME_DATA) @patch.object(HepClient, 'myskillbox_product_for_customer', return_value=None) - @patch.object(HepClient, 'fetch_admin_token', return_value={'token': 'AABBCCDDEE**44566'}) - def test_user_can_register_with_valid_confirmation_key_and_no_license(self, admin_mock, product_mock, customer_mock): + @patch.object(HepClient, 'fetch_admin_token', return_value=b'"AABBCCDDEE**44566"') + def test_user_can_register_with_valid_confirmation_key_and_no_license(self, admin_mock, customer_by_id_mock, + product_mock, customer_mock): - result = self.make_register_mutation('CONFIRMATION_KEY') + result = self.make_register_mutation('CONFIRMATION_KEY', 1) self.assertTrue(result.get('data').get('registration').get('success')) self.assertEqual(result.get('data').get('registration').get('message'), 'no_valid_license') - @patch.object(requests, 'post', return_value=MockResponse(401)) - def test_user_cannot_register_with_invalid_key(self, confirmation_mock): + @patch.object(HepClient, 'customers_by_id', return_value=INVALID_KEY_ME) + @patch.object(HepClient, 'customer_activate', return_value="Response") + def test_user_cannot_register_with_invalid_key(self, id_mock, confirmation_mock): - result = self.make_register_mutation('CONFIRMATION_KEY') + result = self.make_register_mutation('CONFIRMATION_KEY', 1) self.assertTrue(result.get('data').get('registration').get('success')) self.assertEqual(result.get('data').get('registration').get('message'), 'invalid_key') @patch.object(HepClient, '_customer_orders', return_value=VALID_TEACHERS_ORDERS) - @patch.object(HepClient, 'customer_activate', return_value=ME_DATA) - @patch.object(HepClient, 'fetch_admin_token', return_value={'token': 'AABBCCDDEE**44566'}) - def test_teacher_can_register_with_remote_license(self, order_mock, me_mock, admin_token_mock): - result = self.make_register_mutation('CONFIRMATION_KEY') + @patch.object(HepClient, 'customer_activate', return_value="Response") + @patch.object(HepClient, 'customers_by_id', return_value=ME_DATA) + @patch.object(HepClient, 'fetch_admin_token', return_value=b'"AABBCCDDEE**44566"') + def test_teacher_can_register_with_remote_license(self, admin_mock, id_mock, activate_mock, orders_mock): + result = self.make_register_mutation('CONFIRMATION_KEY', 1) user = User.objects.get(email=ME_DATA['email'])