diff --git a/backend/api/v1/v1_users/tests/tests_user_invitation.py b/backend/api/v1/v1_users/tests/tests_user_invitation.py index 61ba30108..5e9ef6fd8 100644 --- a/backend/api/v1/v1_users/tests/tests_user_invitation.py +++ b/backend/api/v1/v1_users/tests/tests_user_invitation.py @@ -137,10 +137,7 @@ def test_add_edit_user(self): 'phone_number', 'designation', 'forms', 'approval_assignment', 'pending_approval', 'data' ], list(responses)) - self.assertEqual(responses["forms"], [{ - 'id': 1, - 'name': 'Test Form' - }]) + self.assertEqual(responses["forms"], [{'id': 1, 'name': 'Test Form'}]) def test_get_user_profile(self): call_command("administration_seeder", "--test") @@ -236,24 +233,25 @@ def test_config_js(self): def test_get_email_template(self): # test get user_register template - response = self.client.get( - '/api/v1/email_template?type=user_register', - content_type='application/json') + response = self.client.get('/api/v1/email_template?type=user_register', + content_type='application/json') self.assertEqual(response.status_code, 200) # test get user_approval template - response = self.client.get( - '/api/v1/email_template?type=user_approval', - content_type='application/json') + response = self.client.get('/api/v1/email_template?type=user_approval', + content_type='application/json') self.assertEqual(response.status_code, 200) # test get user_forgot_password template response = self.client.get( '/api/v1/email_template?type=user_forgot_password', content_type='application/json') self.assertEqual(response.status_code, 200) + # test get user_invite template + response = self.client.get('/api/v1/email_template?type=user_invite', + content_type='application/json') + self.assertEqual(response.status_code, 200) # test get data_approval template - response = self.client.get( - '/api/v1/email_template?type=data_approval', - content_type='application/json') + response = self.client.get('/api/v1/email_template?type=data_approval', + content_type='application/json') self.assertEqual(response.status_code, 200) # test get data_rejection template response = self.client.get( @@ -276,14 +274,12 @@ def test_get_email_template(self): content_type='application/json') self.assertEqual(response.status_code, 200) # test get upload_error template - response = self.client.get( - '/api/v1/email_template?type=upload_error', - content_type='application/json') + response = self.client.get('/api/v1/email_template?type=upload_error', + content_type='application/json') self.assertEqual(response.status_code, 200) # test get new_request template - response = self.client.get( - '/api/v1/email_template?type=new_request', - content_type='application/json') + response = self.client.get('/api/v1/email_template?type=new_request', + content_type='application/json') self.assertEqual(response.status_code, 200) # test get unchanged_data template response = self.client.get( diff --git a/backend/api/v1/v1_users/views.py b/backend/api/v1/v1_users/views.py index 07d03e8ee..c244ae007 100644 --- a/backend/api/v1/v1_users/views.py +++ b/backend/api/v1/v1_users/views.py @@ -216,7 +216,7 @@ def list_levels(request, version): }, tags=['User'], description='Role Choice are SuperAdmin:1,Admin:2,Approver:3,' - 'User:4', + 'User:4,ReadOnly:5', summary='To add user') @api_view(['POST']) @permission_classes([IsAuthenticated, IsSuperAdmin | IsAdmin]) @@ -227,7 +227,10 @@ def add_user(request, version): return Response( {'message': validate_serializers_message(serializer.errors)}, status=status.HTTP_400_BAD_REQUEST) - serializer.save() + user = serializer.save() + url = f"{webdomain}/login/{signing.dumps(user.pk)}" + data = {'button_url': url, 'send_to': [user.email]} + send_email(type=EmailTypes.user_invite, context=data) return Response({'message': 'User added successfully'}, status=status.HTTP_200_OK) diff --git a/backend/utils/email_helper.py b/backend/utils/email_helper.py index 8ae6156f2..17b3fadaf 100644 --- a/backend/utils/email_helper.py +++ b/backend/utils/email_helper.py @@ -12,6 +12,7 @@ class EmailTypes: user_register = 'user_register' user_approval = 'user_approval' user_forgot_password = 'user_forgot_password' + user_invite = 'user_invite' data_approval = 'data_approval' data_rejection = 'data_rejection' batch_approval = 'batch_approval' @@ -25,6 +26,7 @@ class EmailTypes: user_register: 'user_register', user_approval: 'user_approval', user_forgot_password: 'user_forgot_password', + user_invite: 'user_invite', data_approval: 'data_approval', data_rejection: 'data_rejection', batch_approval: 'batch_approval', @@ -92,6 +94,20 @@ def email_context(context: dict, type: str): "button_url": button_url, "button_text": "Reset Password" }) + if type == EmailTypes.user_invite: + button_url = "#" + if context.get("button_url"): + button_url = context.get("button_url") + context.update({ + "subject": "Set Password", + "body": '''You have invited to the National Sanitation and Hygiene + Real-Time Monitoring System. Please click on the button + below to set your password and finalise your account.''', + "explore_button": False, + "button": True, + "button_url": button_url, + "button_text": "Set Password" + }) if type == EmailTypes.data_approval: context.update({ "subject": "Data Upload Approved",