customerwebsitebackend/api/tests.py
vickytechkey 4ca070ad8c
All checks were successful
Deploy Beta (NATIVE) / deploy (push) Successful in 35s
feat: implement customer registration, profile management, and auth tests
2026-11-01 20:53:36 +05:30

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