All checks were successful
Deploy Beta (NATIVE) / deploy (push) Successful in 35s
124 lines
5.6 KiB
Python
124 lines
5.6 KiB
Python
from django.test import TestCase
|
|
from django.contrib.auth.models import User
|
|
from rest_framework.test import APIClient
|
|
from rest_framework import status
|
|
from orders.models import CustomerProfile
|
|
|
|
class CustomerAuthAndProfileTests(TestCase):
|
|
def setUp(self):
|
|
self.client = APIClient()
|
|
self.test_phone = '9876543210'
|
|
self.test_user = User.objects.create_user(
|
|
username=self.test_phone,
|
|
first_name='Existing',
|
|
last_name='Patron',
|
|
email='patron@example.com',
|
|
password='TestPassword123!'
|
|
)
|
|
self.test_profile = CustomerProfile.objects.create(
|
|
user=self.test_user,
|
|
phone=self.test_phone,
|
|
default_address='123 Heritage Lane, Chennai',
|
|
wallet_balance=150.00,
|
|
loyalty_coins=250,
|
|
gender='Female'
|
|
)
|
|
|
|
def test_signup_successful(self):
|
|
new_phone = '9123456789'
|
|
payload = {
|
|
'phone': new_phone,
|
|
'full_name': 'New Artisan Patron',
|
|
'email': 'newpatron@tradhox.com',
|
|
'address': '45 Craft Colony, Kanchipuram'
|
|
}
|
|
response = self.client.post('/api/v1/customer/auth/register/', payload, format='json')
|
|
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
|
self.assertEqual(response.data['username'], new_phone)
|
|
self.assertEqual(response.data['phone'], new_phone)
|
|
self.assertEqual(response.data['first_name'], 'New')
|
|
self.assertEqual(response.data['last_name'], 'Artisan Patron')
|
|
|
|
# Verify saved in database
|
|
saved_user = User.objects.get(username=new_phone)
|
|
self.assertEqual(saved_user.first_name, 'New')
|
|
self.assertEqual(saved_user.email, 'newpatron@tradhox.com')
|
|
self.assertEqual(saved_user.customer_profile.phone, new_phone)
|
|
self.assertEqual(saved_user.customer_profile.loyalty_coins, 200)
|
|
|
|
def test_signup_duplicate_phone_rejected(self):
|
|
# Attempt to register with already existing phone
|
|
payload = {
|
|
'phone': self.test_phone,
|
|
'full_name': 'Duplicate Person',
|
|
'email': 'duplicate@example.com'
|
|
}
|
|
response = self.client.post('/api/v1/customer/auth/register/', payload, format='json')
|
|
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
|
self.assertIn('already registered', response.data['error'].lower())
|
|
self.assertEqual(response.data['code'], 'already_registered')
|
|
|
|
def test_signup_invalid_phone_rejected(self):
|
|
payload = {
|
|
'phone': '12345', # Not 10 digits
|
|
'full_name': 'Invalid Phone User'
|
|
}
|
|
response = self.client.post('/api/v1/customer/auth/register/', payload, format='json')
|
|
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
|
self.assertIn('valid 10-digit', response.data['error'])
|
|
|
|
def test_get_user_profile_by_phone(self):
|
|
response = self.client.get(f'/api/v1/customer/profile/?phone={self.test_phone}')
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
self.assertEqual(response.data['phone'], self.test_phone)
|
|
self.assertEqual(response.data['username'], self.test_phone)
|
|
self.assertEqual(response.data['first_name'], 'Existing')
|
|
self.assertEqual(response.data['last_name'], 'Patron')
|
|
self.assertEqual(response.data['full_name'], 'Existing Patron')
|
|
self.assertEqual(response.data['email'], 'patron@example.com')
|
|
self.assertEqual(response.data['gender'], 'Female')
|
|
self.assertEqual(response.data['wallet_balance'], 150.00)
|
|
self.assertEqual(response.data['loyalty_coins'], 250)
|
|
self.assertEqual(response.data['address'], '123 Heritage Lane, Chennai')
|
|
|
|
def test_put_user_profile_update(self):
|
|
update_payload = {
|
|
'phone': self.test_phone,
|
|
'full_name': 'Updated Name',
|
|
'email': 'updated@example.com',
|
|
'gender': 'Male',
|
|
'address': '789 Updated St, Coimbatore'
|
|
}
|
|
response = self.client.put('/api/v1/customer/profile/', update_payload, format='json')
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
self.assertEqual(response.data['first_name'], 'Updated')
|
|
self.assertEqual(response.data['last_name'], 'Name')
|
|
self.assertEqual(response.data['email'], 'updated@example.com')
|
|
self.assertEqual(response.data['gender'], 'Male')
|
|
self.assertEqual(response.data['address'], '789 Updated St, Coimbatore')
|
|
|
|
# Verify DB persisted
|
|
self.test_user.refresh_from_db()
|
|
self.assertEqual(self.test_user.first_name, 'Updated')
|
|
self.assertEqual(self.test_user.email, 'updated@example.com')
|
|
self.assertEqual(self.test_user.customer_profile.gender, 'Male')
|
|
|
|
def test_send_otp_duplicate_register_fails(self):
|
|
payload = {
|
|
'mobile_number': self.test_phone,
|
|
'otp_code': '123456',
|
|
'purpose': 'register'
|
|
}
|
|
response = self.client.post('/api/v1/customer/auth/send-whatsapp/', payload, format='json')
|
|
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
|
self.assertIn('already exists', response.data['message'])
|
|
|
|
def test_send_otp_nonexistent_login_fails(self):
|
|
payload = {
|
|
'mobile_number': '9999900000',
|
|
'otp_code': '123456',
|
|
'purpose': 'login'
|
|
}
|
|
response = self.client.post('/api/v1/customer/auth/send-whatsapp/', payload, format='json')
|
|
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
|
|
self.assertIn('Account not found', response.data['message'])
|