from django.test import TestCase, RequestFactory from django.utils import timezone from datetime import date, datetime from decimal import Decimal from unittest.mock import Mock from material.models import MaterialCategory, MaterialPart, Ownership, yearsago from material.admin import NotTooOldFilter, MaterialAdmin 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) def test_admin_thumbnail_with_photo(self): """Test admin_thumbnail when photo exists""" mock_photo = Mock() mock_photo.url = "/media/test.jpg" self.material_part.photo = mock_photo result = self.material_part.admin_thumbnail() self.assertIn("/media/test.jpg", result) self.assertIn("