You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kompass/jdav_web/material/tests.py

115 lines
4.0 KiB
Python

from django.test import TestCase
from django.utils import timezone
from datetime import date
from decimal import Decimal
from material.models import MaterialCategory, MaterialPart, Ownership
from members.models import Member, MALE, FEMALE, DIVERSE
class MaterialCategoryTestCase(TestCase):
def setUp(self):
self.category = MaterialCategory.objects.create(name="Climbing Gear")
def test_str(self):
"""Test string representation of MaterialCategory"""
self.assertEqual(str(self.category), "Climbing Gear")
def test_verbose_names(self):
"""Test verbose names are set correctly"""
meta = MaterialCategory._meta
self.assertTrue(hasattr(meta, 'verbose_name'))
self.assertTrue(hasattr(meta, 'verbose_name_plural'))
class MaterialPartTestCase(TestCase):
def setUp(self):
self.category = MaterialCategory.objects.create(name="Ropes")
self.material_part = MaterialPart.objects.create(
name="Dynamic Rope 10mm",
description="60m dynamic climbing rope",
quantity=5,
buy_date=date(2020, 1, 15),
lifetime=Decimal('8')
)
self.material_part.material_cat.add(self.category)
self.member = Member.objects.create(
prename="John",
lastname="Doe",
birth_date=date(1990, 1, 1),
email="john@example.com",
gender=MALE
)
def test_str(self):
"""Test string representation of MaterialPart"""
self.assertEqual(str(self.material_part), "Dynamic Rope 10mm")
def test_quantity_real_no_ownership(self):
"""Test quantity_real when no ownership exists"""
result = self.material_part.quantity_real()
self.assertEqual(result, "0/5")
def test_quantity_real_with_ownership(self):
"""Test quantity_real with ownership records"""
Ownership.objects.create(
material=self.material_part,
owner=self.member,
count=3
)
Ownership.objects.create(
material=self.material_part,
owner=self.member,
count=1
)
result = self.material_part.quantity_real()
self.assertEqual(result, "4/5")
def test_verbose_names(self):
"""Test field verbose names"""
# Just test that verbose names exist, since they might be translated
field_names = ['name', 'description', 'quantity', 'buy_date', 'lifetime', 'photo', 'material_cat']
for field_name in field_names:
field = self.material_part._meta.get_field(field_name)
self.assertTrue(hasattr(field, 'verbose_name'))
self.assertIsNotNone(field.verbose_name)
class OwnershipTestCase(TestCase):
def setUp(self):
self.category = MaterialCategory.objects.create(name="Hardware")
self.material_part = MaterialPart.objects.create(
name="Carabiner Set",
description="Lightweight aluminum carabiners",
quantity=10,
buy_date=date(2021, 6, 1),
lifetime=Decimal('10')
)
self.member = Member.objects.create(
prename="Alice",
lastname="Smith",
birth_date=date(1985, 3, 15),
email="alice@example.com",
gender=FEMALE
)
self.ownership = Ownership.objects.create(
material=self.material_part,
owner=self.member,
count=6
)
def test_ownership_creation(self):
"""Test ownership record creation"""
self.assertEqual(self.ownership.material, self.material_part)
self.assertEqual(self.ownership.owner, self.member)
self.assertEqual(self.ownership.count, 6)
def test_material_part_relationship(self):
"""Test relationship between MaterialPart and Ownership"""
ownerships = Ownership.objects.filter(material=self.material_part)
self.assertEqual(ownerships.count(), 1)
self.assertEqual(ownerships.first(), self.ownership)