338 lines
11 KiB
Python
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}")
|