init project tests
This commit is contained in:
parent
d0ff728224
commit
7c9318c778
44 changed files with 4431 additions and 49 deletions
|
@ -0,0 +1,70 @@
|
|||
# Generated by Django 5.2.2 on 2025-06-07 13:22
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('contact', '0002_contacttag_contact_tag_id'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='contact',
|
||||
options={'ordering': ['last_name', 'first_name'], 'verbose_name': 'Kontakt', 'verbose_name_plural': 'Kontakte'},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='contact',
|
||||
name='city',
|
||||
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='Stadt'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='contact',
|
||||
name='country',
|
||||
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='Land'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='contact',
|
||||
name='created_by',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Erstellt von'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='contact',
|
||||
name='first_name',
|
||||
field=models.CharField(blank=True, max_length=50, null=True, verbose_name='Vorname'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='contact',
|
||||
name='is_active',
|
||||
field=models.BooleanField(default=True, verbose_name='Aktiv'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='contact',
|
||||
name='last_name',
|
||||
field=models.CharField(blank=True, max_length=50, null=True, verbose_name='Nachname'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='contact',
|
||||
name='notes',
|
||||
field=models.TextField(blank=True, null=True, verbose_name='Notizen'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='contact',
|
||||
name='postal_code',
|
||||
field=models.CharField(blank=True, max_length=20, null=True, verbose_name='Postleitzahl'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='contact',
|
||||
name='address',
|
||||
field=models.CharField(blank=True, max_length=200, null=True, verbose_name='Adresse'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='contact',
|
||||
name='email',
|
||||
field=models.EmailField(blank=True, max_length=50, null=True, verbose_name='Email'),
|
||||
),
|
||||
]
|
18
app/contact/migrations/0004_alter_contact_postal_code.py
Normal file
18
app/contact/migrations/0004_alter_contact_postal_code.py
Normal file
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 5.2.2 on 2025-06-07 13:25
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('contact', '0003_alter_contact_options_contact_city_contact_country_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='contact',
|
||||
name='postal_code',
|
||||
field=models.CharField(blank=True, max_length=50, null=True, verbose_name='Postleitzahl'),
|
||||
),
|
||||
]
|
|
@ -1,22 +1,55 @@
|
|||
from django.db import models
|
||||
from uuid import uuid4
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class Contact(models.Model):
|
||||
id = models.UUIDField(primary_key=True, default=uuid4, editable=False)
|
||||
name = models.CharField(
|
||||
max_length=50, null=True, blank=True, verbose_name=_("Kontakt Name")
|
||||
|
||||
# Required fields expected by tests (temporary nullable for migration)
|
||||
first_name = models.CharField(
|
||||
max_length=50, verbose_name=_("Vorname"), null=True, blank=True
|
||||
)
|
||||
last_name = models.CharField(
|
||||
max_length=50, verbose_name=_("Nachname"), null=True, blank=True
|
||||
)
|
||||
created_by = models.ForeignKey(
|
||||
User, on_delete=models.CASCADE, verbose_name=_("Erstellt von"),
|
||||
null=True, blank=True
|
||||
)
|
||||
|
||||
# Optional fields expected by tests
|
||||
email = models.EmailField(
|
||||
max_length=50, null=True, blank=True, verbose_name=_("Email")
|
||||
)
|
||||
phone = models.CharField(
|
||||
max_length=50, null=True, blank=True, verbose_name=_("Telefon")
|
||||
)
|
||||
email = models.CharField(
|
||||
max_length=50, null=True, blank=True, verbose_name=_("Email")
|
||||
)
|
||||
address = models.CharField(
|
||||
max_length=50, null=True, blank=True, verbose_name=_("Adresse")
|
||||
max_length=200, null=True, blank=True, verbose_name=_("Adresse")
|
||||
)
|
||||
city = models.CharField(
|
||||
max_length=100, null=True, blank=True, verbose_name=_("Stadt")
|
||||
)
|
||||
postal_code = models.CharField(
|
||||
max_length=50, null=True, blank=True, verbose_name=_("Postleitzahl")
|
||||
)
|
||||
country = models.CharField(
|
||||
max_length=100, null=True, blank=True, verbose_name=_("Land")
|
||||
)
|
||||
notes = models.TextField(
|
||||
null=True, blank=True, verbose_name=_("Notizen")
|
||||
)
|
||||
is_active = models.BooleanField(
|
||||
default=True, verbose_name=_("Aktiv")
|
||||
)
|
||||
|
||||
# Keep existing fields for backwards compatibility
|
||||
name = models.CharField(
|
||||
max_length=50, null=True, blank=True, verbose_name=_("Kontakt Name")
|
||||
)
|
||||
comment = models.CharField(
|
||||
max_length=50, null=True, blank=True, verbose_name=_("Bemerkungen")
|
||||
|
@ -32,6 +65,32 @@ class Contact(models.Model):
|
|||
class Meta:
|
||||
verbose_name = _("Kontakt")
|
||||
verbose_name_plural = _("Kontakte")
|
||||
ordering = ['last_name', 'first_name']
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.first_name} {self.last_name}"
|
||||
|
||||
@property
|
||||
def full_name(self):
|
||||
"""Return the contact's full name."""
|
||||
return f"{self.first_name} {self.last_name}"
|
||||
|
||||
def clean(self):
|
||||
"""Custom validation for the model."""
|
||||
super().clean()
|
||||
|
||||
# Check required fields for test compatibility
|
||||
if not self.first_name:
|
||||
raise ValidationError({'first_name': _('This field is required.')})
|
||||
|
||||
if not self.last_name:
|
||||
raise ValidationError({'last_name': _('This field is required.')})
|
||||
|
||||
# Validate email format if provided
|
||||
if self.email and '@' not in self.email:
|
||||
raise ValidationError({
|
||||
'email': _('Please enter a valid email address.')
|
||||
})
|
||||
|
||||
|
||||
class ContactTag(models.Model):
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
from django.test import TestCase
|
||||
from aviary.models import Aviary
|
||||
|
||||
|
||||
class AviaryTestCase(TestCase):
|
||||
def setUp(self):
|
||||
Aviary.objects.create(
|
||||
self.aviary = Aviary.objects.create(
|
||||
description="Voliere 1",
|
||||
condition="Offen",
|
||||
last_ward_round="2021-01-01",
|
||||
|
@ -20,7 +21,7 @@ class AviaryTestCase(TestCase):
|
|||
|
||||
def test_aviary_last_ward_round(self):
|
||||
aviary = Aviary.objects.get(description="Voliere 1")
|
||||
self.assertEqual(aviary.last_ward_round, "2021-01-01")
|
||||
self.assertEqual(str(aviary.last_ward_round), "2021-01-01")
|
||||
|
||||
def test_aviary_comment(self):
|
||||
aviary = Aviary.objects.get(description="Voliere 1")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue