Update registration mutation with user id and hep calls
This commit is contained in:
parent
909f7337ac
commit
7a532463a6
|
|
@ -66,7 +66,6 @@ class HepClient:
|
||||||
elif response.status_code != 200:
|
elif response.status_code != 200:
|
||||||
raise HepClientException(response.status_code, response.json())
|
raise HepClientException(response.status_code, response.json())
|
||||||
|
|
||||||
logger.info(response.json())
|
|
||||||
return response
|
return response
|
||||||
|
|
||||||
def fetch_admin_token(self, admin_user, password):
|
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)})
|
response = self._call('/rest/V1/customers/me', additional_headers={'authorization': 'Bearer {}'.format(token)})
|
||||||
return response.json()
|
return response.json()
|
||||||
|
|
||||||
def customer_activate(self, confirmation_key):
|
def customer_activate(self, confirmation_key, user_id):
|
||||||
response = self._call("/customer/account/confirm/?back_url=&id=58862&key=f62319366a5ecdd1e3dede5fd1a5c236", method='put', data={
|
response = self._call("/customer/account/confirm/?back_url=&id={}&key={}"
|
||||||
'confirmationKey': confirmation_key
|
.format(user_id, confirmation_key), method='get')
|
||||||
})
|
return response
|
||||||
return response.json()
|
|
||||||
|
|
||||||
def customers_search(self, admin_token, email):
|
def customers_search(self, admin_token, email):
|
||||||
response = self._call("/rest/V1/customers/search?searchCriteria[filterGroups][0][filters][0][field]="
|
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)})
|
additional_headers={'authorization': 'Bearer {}'.format(admin_token)})
|
||||||
|
|
||||||
json_data = response.json()
|
json_data = response.json()
|
||||||
|
|
@ -127,6 +125,11 @@ class HepClient:
|
||||||
return json_data['items'][0]
|
return json_data['items'][0]
|
||||||
return None
|
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):
|
def _customer_orders(self, admin_token, customer_id):
|
||||||
url = ("/rest/V1/orders/?searchCriteria[filterGroups][0][filters][0]["
|
url = ("/rest/V1/orders/?searchCriteria[filterGroups][0][filters][0]["
|
||||||
"field]=customer_id&searchCriteria[filterGroups][0][filters][0][value]={}".format(customer_id))
|
"field]=customer_id&searchCriteria[filterGroups][0][filters][0][value]={}".format(customer_id))
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ from django.contrib.auth import login
|
||||||
from graphene import relay
|
from graphene import relay
|
||||||
|
|
||||||
from core.hep_client import HepClient, HepClientException, HepClientUnauthorizedException
|
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
|
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 Registration(relay.ClientIDMutation):
|
||||||
class Input:
|
class Input:
|
||||||
confirmation_key_input = graphene.String()
|
confirmation_key_input = graphene.String()
|
||||||
|
user_id_input = graphene.Int()
|
||||||
|
|
||||||
success = graphene.Boolean()
|
success = graphene.Boolean()
|
||||||
message = graphene.String()
|
message = graphene.String()
|
||||||
|
|
@ -30,13 +32,16 @@ class Registration(relay.ClientIDMutation):
|
||||||
@classmethod
|
@classmethod
|
||||||
def mutate_and_get_payload(cls, root, info, **kwargs):
|
def mutate_and_get_payload(cls, root, info, **kwargs):
|
||||||
confirmation_key = kwargs.get('confirmation_key_input')
|
confirmation_key = kwargs.get('confirmation_key_input')
|
||||||
|
user_id = kwargs.get('user_id_input')
|
||||||
|
|
||||||
hep_client = HepClient()
|
hep_client = HepClient()
|
||||||
|
admin_token = AdminData.objects.get_admin_token()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
user_data = hep_client.customer_activate(confirmation_key)
|
hep_client.customer_activate(confirmation_key, user_id)
|
||||||
except HepClientUnauthorizedException:
|
user_data = hep_client.customers_by_id(admin_token)
|
||||||
return cls.return_registration_msg('invalid_key')
|
if 'confirmation' in user_data:
|
||||||
|
return cls.return_registration_msg('invalid_key')
|
||||||
except HepClientException:
|
except HepClientException:
|
||||||
return cls.return_registration_msg('unknown_error')
|
return cls.return_registration_msg('unknown_error')
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,10 +16,14 @@ from graphene.test import Client
|
||||||
|
|
||||||
from api.schema import schema
|
from api.schema import schema
|
||||||
from core.hep_client import HepClient
|
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 registration.models import License
|
||||||
from users.models import User, Role, SchoolClass
|
from users.models import User, Role, SchoolClass
|
||||||
|
|
||||||
|
INVALID_KEY_ME = dict(ME_DATA)
|
||||||
|
|
||||||
|
INVALID_KEY_ME['confirmation'] = 'abddddddd'
|
||||||
|
|
||||||
|
|
||||||
class RegistrationTests(TestCase):
|
class RegistrationTests(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
|
@ -37,7 +41,7 @@ class RegistrationTests(TestCase):
|
||||||
request.session.save()
|
request.session.save()
|
||||||
self.client = Client(schema=schema, context_value=request)
|
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 = '''
|
||||||
mutation Registration($input: RegistrationInput!){
|
mutation Registration($input: RegistrationInput!){
|
||||||
registration(input: $input) {
|
registration(input: $input) {
|
||||||
|
|
@ -52,33 +56,38 @@ class RegistrationTests(TestCase):
|
||||||
|
|
||||||
return self.client.execute(mutation, variables={
|
return self.client.execute(mutation, variables={
|
||||||
'input': {
|
'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, 'myskillbox_product_for_customer', return_value=None)
|
||||||
@patch.object(HepClient, 'fetch_admin_token', return_value={'token': 'AABBCCDDEE**44566'})
|
@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, product_mock, customer_mock):
|
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.assertTrue(result.get('data').get('registration').get('success'))
|
||||||
self.assertEqual(result.get('data').get('registration').get('message'), 'no_valid_license')
|
self.assertEqual(result.get('data').get('registration').get('message'), 'no_valid_license')
|
||||||
|
|
||||||
@patch.object(requests, 'post', return_value=MockResponse(401))
|
@patch.object(HepClient, 'customers_by_id', return_value=INVALID_KEY_ME)
|
||||||
def test_user_cannot_register_with_invalid_key(self, confirmation_mock):
|
@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.assertTrue(result.get('data').get('registration').get('success'))
|
||||||
self.assertEqual(result.get('data').get('registration').get('message'), 'invalid_key')
|
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_orders', return_value=VALID_TEACHERS_ORDERS)
|
||||||
@patch.object(HepClient, 'customer_activate', return_value=ME_DATA)
|
@patch.object(HepClient, 'customer_activate', return_value="Response")
|
||||||
@patch.object(HepClient, 'fetch_admin_token', return_value={'token': 'AABBCCDDEE**44566'})
|
@patch.object(HepClient, 'customers_by_id', return_value=ME_DATA)
|
||||||
def test_teacher_can_register_with_remote_license(self, order_mock, me_mock, admin_token_mock):
|
@patch.object(HepClient, 'fetch_admin_token', return_value=b'"AABBCCDDEE**44566"')
|
||||||
result = self.make_register_mutation('CONFIRMATION_KEY')
|
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'])
|
user = User.objects.get(email=ME_DATA['email'])
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue