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.
115 lines
4.0 KiB
Python
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)
|