Skip to content

Commit

Permalink
feat: Add another test model and set up django-admin
Browse files Browse the repository at this point in the history
  • Loading branch information
last-partizan committed Feb 8, 2025
1 parent d11b767 commit 063eb16
Show file tree
Hide file tree
Showing 11 changed files with 752 additions and 376 deletions.
10 changes: 10 additions & 0 deletions modeltranslation/tests/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from django.contrib import admin

from modeltranslation.admin import TranslationAdmin

from . import models


@admin.register(models.ModelWithConstraint)
class UniqueNullableModelAdmin(TranslationAdmin):
pass
1,007 changes: 649 additions & 358 deletions modeltranslation/tests/migrations/0001_initial.py

Large diffs are not rendered by default.

13 changes: 13 additions & 0 deletions modeltranslation/tests/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,19 @@ class UniqueNullableModel(models.Model):
title = models.CharField(null=True, unique=True, max_length=255)


class ModelWithConstraint(models.Model):
title = models.CharField(max_length=255)
sub_title = models.CharField(max_length=255)

class Meta:
constraints = [
models.UniqueConstraint(
fields=["title", "sub_title"],
name="unique_fields",
)
]


# ######### Proxy model testing


Expand Down
10 changes: 4 additions & 6 deletions modeltranslation/tests/project_translation.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
from modeltranslation.translator import TranslationOptions, translator
from modeltranslation import translator

from .test_app.models import Other
from .test_app import models


class OtherTranslationOptions(TranslationOptions):
@translator.register(models.Other)
class OtherTranslationOptions(translator.TranslationOptions):
fields = ("name",)


translator.register(Other, OtherTranslationOptions)
44 changes: 42 additions & 2 deletions modeltranslation/tests/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,20 +40,60 @@ def _get_database_config():


DATABASES = {"default": _get_database_config()}
SECRET_KEY = "0" * 64

INSTALLED_APPS = (
"django.contrib.contenttypes",
"django.contrib.auth",
"django.contrib.messages",
"django.contrib.sessions",
"modeltranslation",
"modeltranslation.tests",
"django.contrib.admin",
)

LANGUAGES = (("de", "Deutsch"), ("en", "English"))
LANGUAGE_CODE = "de"
LANGUAGE_CODE = "en"

USE_I18N = True
USE_TZ = False
MIDDLEWARE_CLASSES = ()

MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]

TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [],
"OPTIONS": {
"context_processors": [
"django.contrib.auth.context_processors.auth",
"django.template.context_processors.debug",
"django.template.context_processors.i18n",
"django.template.context_processors.media",
"django.template.context_processors.request",
"django.template.context_processors.static",
"django.template.context_processors.tz",
"django.contrib.messages.context_processors.messages",
],
"loaders": [
"django.template.loaders.filesystem.Loader",
"django.template.loaders.app_directories.Loader",
],
"builtins": [
"django.templatetags.i18n",
"django.templatetags.static",
],
},
},
]

MODELTRANSLATION_DEFAULT_LANGUAGE = "de"
MODELTRANSLATION_AUTO_POPULATE = False
Expand Down
17 changes: 17 additions & 0 deletions modeltranslation/tests/test_admin_views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from django.test import Client
from django.urls import reverse
import pytest
from modeltranslation.tests.models import ModelWithConstraint
from django.db import IntegrityError


def test_create_duplicate(admin_client: Client):
ModelWithConstraint.objects.create(title="1", sub_title="One")
url = reverse("admin:tests_modelwithconstraint_add")

with pytest.raises(IntegrityError):
response = admin_client.post(
url, {"title": "1", "sub_title_en": "One", "sub_title_de": "Ein"}
)

assert response.status_code == 302
10 changes: 4 additions & 6 deletions modeltranslation/tests/test_app/translation.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
from modeltranslation.translator import TranslationOptions, translator
from modeltranslation import translator

from .models import News
from . import models


class NewsTranslationOptions(TranslationOptions):
@translator.register(models.News)
class NewsTranslationOptions(translator.TranslationOptions):
fields = ("title",)


translator.register(News, NewsTranslationOptions)
2 changes: 0 additions & 2 deletions modeltranslation/tests/test_third_party.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# pyright: reportGeneralTypeIssues=warning, reportOptionalMemberAccess=warning, reportOptionalOperand=warning

from django import forms
from django.utils.translation import get_language
from django.test import TestCase

from modeltranslation.tests import models
Expand Down Expand Up @@ -31,7 +30,6 @@ class Meta:

creation_form = CreationForm({"name": "abc"})
inst = creation_form.save()
assert "de" == get_language()
assert "abc" == inst.name
assert 1 == self.model.objects.count()

Expand Down
3 changes: 2 additions & 1 deletion modeltranslation/tests/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
)

# How many models are registered for tests.
TEST_MODELS = 40
TEST_MODELS = 41


class reload_override_settings(override_settings):
Expand Down Expand Up @@ -1901,6 +1901,7 @@ def _test_field(self, field_name, value_de, value_en, deactivate=True):
params = {field_name_de: value_de, field_name_en: value_en}

n = models.TestModel.objects.create(**params)
trans_real.activate("de")
# Language is set to 'de' at this point
assert get_language() == "de"
assert getattr(n, field_name) == value_de
Expand Down
5 changes: 5 additions & 0 deletions modeltranslation/tests/translation.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@ class UniqueNullableTranslationOptions(TranslationOptions):
fields = ("title",)


@register(models.ModelWithConstraint)
class ModelWithConstrainTranslationOptions(TranslationOptions):
fields = ("sub_title",)


# ######### Proxy model testing


Expand Down
7 changes: 6 additions & 1 deletion modeltranslation/tests/urls.py
Original file line number Diff line number Diff line change
@@ -1 +1,6 @@
urlpatterns = []
from django.contrib import admin
from django.urls import path

urlpatterns = [
path("admin/", admin.site.urls),
]

0 comments on commit 063eb16

Please sign in to comment.