erikvw/django-collect-offline

View on GitHub
collect_offline_app/models.py

Summary

Maintainability
A
2 hrs
Test Coverage
from django.db import models
from django.db.models.deletion import PROTECT
from edc_list_data.model_mixins import ListModelMixin
from edc_model.models import BaseUuidModel, HistoricalRecords, BaseModel
from edc_utils import get_utcnow
from simple_history.models import HistoricalRecords as BadHistoricalRecords
from uuid import uuid4


class TestModelManager(models.Manager):
    def get_by_natural_key(self, f1):
        return self.get(f1=f1)


class TestModel(BaseUuidModel):

    f1 = models.CharField(max_length=50, unique=True)

    f2 = models.CharField(max_length=50, null=True)

    f3 = models.CharField(max_length=50, default=uuid4())

    objects = TestModelManager()

    history = HistoricalRecords()

    def natural_key(self):
        return (self.f1,)


class TestModelDates(BaseUuidModel):

    f1 = models.CharField(max_length=50, unique=True)

    f2 = models.DateField(blank=True, null=True)

    f3 = models.DateTimeField(blank=True, default=get_utcnow)

    objects = TestModelManager()

    def natural_key(self):
        return (self.f1,)


class BadTestModel(BaseUuidModel):
    """A test model that is missing natural_key and get_by_natural_key.
    """

    f1 = models.CharField(max_length=50, default="f1")

    objects = models.Manager()


class AnotherBadTestModel(BaseUuidModel):
    """A test model that is missing get_by_natural_key.
    """

    f1 = models.CharField(max_length=50, default="f1")

    objects = models.Manager()

    def natural_key(self):
        return (self.f1,)


class YetAnotherBadTestModel(BaseUuidModel):
    """A test model with the wrong HistoricalManager.
    """

    f1 = models.CharField(max_length=50, default="f1")

    objects = TestModelManager()

    history = BadHistoricalRecords()  # missing UUID handling

    def natural_key(self):
        return (self.f1,)


class TestOfflineModelNoHistoryManager(BaseUuidModel):
    """A test model without a HistoricalManager.
    """

    f1 = models.CharField(max_length=50, default="f1")

    objects = TestModelManager()

    def natural_key(self):
        return (self.f1,)


class TestOfflineModelNoUuid(BaseModel):
    """A test model without a HistoricalManager.
    """

    f1 = models.CharField(max_length=50, default="f1")

    objects = TestModelManager()

    def natural_key(self):
        return (self.f1,)


class M2m(ListModelMixin, BaseUuidModel):

    pass


class TestModelWithFkProtected(BaseUuidModel):

    f1 = models.CharField(max_length=50, unique=True)

    test_model = models.ForeignKey(TestModel, on_delete=PROTECT)

    objects = TestModelManager()

    history = HistoricalRecords()

    def natural_key(self):
        return (self.f1,)

    natural_key.dependencies = ["django_collect_offline.testmodel"]


class TestModelWithM2m(BaseUuidModel):

    f1 = models.CharField(max_length=50, unique=True)

    m2m = models.ManyToManyField(M2m)

    objects = TestModelManager()

    history = HistoricalRecords()

    def natural_key(self):
        return (self.f1,)