Update registration mutation with user id and hep calls

This commit is contained in:
Christian Cueni 2020-02-13 12:32:55 +01:00
parent 909f7337ac
commit 7a532463a6
3 changed files with 41 additions and 24 deletions

View File

@ -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))

View File

@ -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')

View File

@ -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'])