Files
dta_service/dta_service/tests/test_models.py
2025-08-16 12:54:28 -05:00

338 lines
11 KiB
Python

from django.test import TestCase
from django.contrib.auth import get_user_model
from core.models import (
PropertyOwner,
Vendor,
Property,
VideoCategory,
Video,
UserVideoProgress,
Conversation,
Message,
PasswordResetToken,
)
from datetime import datetime, timedelta
from django.utils import timezone
User = get_user_model()
class UserModelTest(TestCase):
def setUp(self):
self.user = User.objects.create_user(
email="test@example.com",
first_name="Test",
last_name="User",
user_type="property_owner",
password="testpass123",
)
def test_user_creation(self):
self.assertEqual(self.user.email, "test@example.com")
self.assertEqual(self.user.first_name, "Test")
self.assertEqual(self.user.last_name, "User")
self.assertEqual(self.user.user_type, "property_owner")
self.assertTrue(self.user.check_password("testpass123"))
def test_user_str(self):
self.assertEqual(str(self.user), "test@example.com")
class PropertyOwnerModelTest(TestCase):
def setUp(self):
self.user = User.objects.create_user(
email="owner@example.com",
first_name="Property",
last_name="Owner",
user_type="property_owner",
password="testpass123",
)
self.owner = PropertyOwner.objects.create(
user=self.user, phone_number="1234567890"
)
def test_property_owner_creation(self):
self.assertEqual(self.owner.user, self.user)
self.assertEqual(self.owner.phone_number, "1234567890")
def test_property_owner_str(self):
self.assertEqual(str(self.owner), "Property Owner")
class VendorModelTest(TestCase):
def setUp(self):
self.user = User.objects.create_user(
email="vendor@example.com",
first_name="Vendor",
last_name="User",
user_type="vendor",
password="testpass123",
)
self.vendor = Vendor.objects.create(
user=self.user,
business_name="Test Vendor",
business_type="contractor",
phone_number="1234567890",
address="123 Test St",
city="Testville",
state="TS",
zip_code="12345",
)
def test_vendor_creation(self):
self.assertEqual(self.vendor.user, self.user)
self.assertEqual(self.vendor.business_name, "Test Vendor")
self.assertEqual(self.vendor.business_type, "contractor")
self.assertEqual(self.vendor.phone_number, "1234567890")
self.assertEqual(self.vendor.address, "123 Test St")
self.assertEqual(self.vendor.city, "Testville")
self.assertEqual(self.vendor.state, "TS")
self.assertEqual(self.vendor.zip_code, "12345")
def test_vendor_str(self):
self.assertEqual(str(self.vendor), "Test Vendor")
class PropertyModelTest(TestCase):
def setUp(self):
self.user = User.objects.create_user(
email="owner@example.com",
first_name="Property",
last_name="Owner",
user_type="property_owner",
password="testpass123",
)
self.owner = PropertyOwner.objects.create(user=self.user)
self.property = Property.objects.create(
owner=self.owner,
address="123 Main St",
city="Anytown",
state="CA",
zip_code="90210",
market_value=500000.00,
loan_amount=400000.00,
loan_interest_rate=3.5,
loan_term=30,
loan_start_date="2020-01-01",
)
def test_property_creation(self):
self.assertEqual(self.property.owner, self.owner)
self.assertEqual(self.property.address, "123 Main St")
self.assertEqual(self.property.city, "Anytown")
self.assertEqual(self.property.state, "CA")
self.assertEqual(self.property.zip_code, "90210")
self.assertEqual(self.property.market_value, 500000.00)
self.assertEqual(self.property.loan_amount, 400000.00)
self.assertEqual(self.property.loan_interest_rate, 3.5)
self.assertEqual(self.property.loan_term, 30)
self.assertEqual(str(self.property.loan_start_date), "2020-01-01")
def test_property_str(self):
self.assertEqual(str(self.property), "123 Main St, Anytown, CA 90210")
class VideoModelTest(TestCase):
def setUp(self):
self.category = VideoCategory.objects.create(
name="Test Category", description="Test Description"
)
self.video = Video.objects.create(
category=self.category,
title="Test Video",
description="Test Video Description",
link="https://example.com/video",
duration=300,
)
def test_video_creation(self):
self.assertEqual(self.video.category, self.category)
self.assertEqual(self.video.title, "Test Video")
self.assertEqual(self.video.description, "Test Video Description")
self.assertEqual(self.video.link, "https://example.com/video")
self.assertEqual(self.video.duration, 300)
def test_video_str(self):
self.assertEqual(str(self.video), "Test Video")
class UserVideoProgressModelTest(TestCase):
def setUp(self):
self.user = User.objects.create_user(
email="user@example.com",
first_name="Test",
last_name="User",
user_type="property_owner",
password="testpass123",
)
self.category = VideoCategory.objects.create(name="Test Category")
self.video = Video.objects.create(
category=self.category,
title="Test Video",
link="https://example.com/video",
duration=300,
)
self.progress = UserVideoProgress.objects.create(
user=self.user, video=self.video, progress=150
)
def test_progress_creation(self):
self.assertEqual(self.progress.user, self.user)
self.assertEqual(self.progress.video, self.video)
self.assertEqual(self.progress.progress, 150)
self.assertEqual(self.progress.status, "in_progress")
def test_status_update(self):
# Test not started
self.progress.progress = 0
self.progress.save()
self.assertEqual(self.progress.status, "not_started")
# Test completed
self.progress.progress = 300
self.progress.save()
self.assertEqual(self.progress.status, "completed")
# Test in progress
self.progress.progress = 150
self.progress.save()
self.assertEqual(self.progress.status, "in_progress")
def test_progress_str(self):
self.assertEqual(
str(self.progress), "user@example.com - Test Video - in_progress"
)
class ConversationModelTest(TestCase):
def setUp(self):
self.owner_user = User.objects.create_user(
email="owner@example.com",
first_name="Property",
last_name="Owner",
user_type="property_owner",
password="testpass123",
)
self.owner = PropertyOwner.objects.create(user=self.owner_user)
self.vendor_user = User.objects.create_user(
email="vendor@example.com",
first_name="Vendor",
last_name="User",
user_type="vendor",
password="testpass123",
)
self.vendor = Vendor.objects.create(
user=self.vendor_user,
business_name="Test Vendor",
business_type="contractor",
)
self.property = Property.objects.create(
owner=self.owner,
address="123 Main St",
city="Anytown",
state="CA",
zip_code="90210",
market_value=500000.00,
)
self.conversation = Conversation.objects.create(
property_owner=self.owner, vendor=self.vendor, property=self.property
)
def test_conversation_creation(self):
self.assertEqual(self.conversation.property_owner, self.owner)
self.assertEqual(self.conversation.vendor, self.vendor)
self.assertEqual(self.conversation.property, self.property)
def test_conversation_str(self):
expected_str = (
f"Conversation between {self.owner} and {self.vendor} about {self.property}"
)
self.assertEqual(str(self.conversation), expected_str)
class MessageModelTest(TestCase):
def setUp(self):
self.owner_user = User.objects.create_user(
email="owner@example.com",
first_name="Property",
last_name="Owner",
user_type="property_owner",
password="testpass123",
)
self.owner = PropertyOwner.objects.create(user=self.owner_user)
self.vendor_user = User.objects.create_user(
email="vendor@example.com",
first_name="Vendor",
last_name="User",
user_type="vendor",
password="testpass123",
)
self.vendor = Vendor.objects.create(
user=self.vendor_user,
business_name="Test Vendor",
business_type="contractor",
)
self.property = Property.objects.create(
owner=self.owner,
address="123 Main St",
city="Anytown",
state="CA",
zip_code="90210",
market_value=500000.00,
)
self.conversation = Conversation.objects.create(
property_owner=self.owner, vendor=self.vendor, property=self.property
)
self.message = Message.objects.create(
conversation=self.conversation, sender=self.owner_user, text="Test message"
)
def test_message_creation(self):
self.assertEqual(self.message.conversation, self.conversation)
self.assertEqual(self.message.sender, self.owner_user)
self.assertEqual(self.message.text, "Test message")
self.assertFalse(self.message.read)
def test_message_str(self):
expected_str = f"Message from {self.owner_user} in {self.conversation}"
self.assertEqual(str(self.message), expected_str)
class PasswordResetTokenModelTest(TestCase):
def setUp(self):
self.user = User.objects.create_user(
email="user@example.com",
first_name="Test",
last_name="User",
user_type="property_owner",
password="testpass123",
)
self.token = PasswordResetToken.objects.create(
user=self.user, expires_at=timezone.now() + timedelta(hours=24)
)
def test_token_creation(self):
self.assertEqual(self.token.user, self.user)
self.assertFalse(self.token.used)
self.assertTrue(self.token.is_valid())
def test_token_invalid_after_use(self):
self.token.used = True
self.token.save()
self.assertFalse(self.token.is_valid())
def test_token_invalid_after_expiry(self):
self.token.expires_at = timezone.now() - timedelta(hours=1)
self.token.save()
self.assertFalse(self.token.is_valid())
def test_token_str(self):
self.assertEqual(str(self.token), f"Password reset token for {self.user.email}")