Skip to content

Commit

Permalink
Merge pull request #645 from deschler/pytest
Browse files Browse the repository at this point in the history
feat(dev): Migrate to pytest
  • Loading branch information
last-partizan committed Jul 13, 2022
2 parents 8535a4e + 89abad7 commit fba75cc
Show file tree
Hide file tree
Showing 14 changed files with 2,378 additions and 1,486 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ jobs:
if [[ $DB == postgres ]]; then
pip install -q psycopg2-binary
fi
pip install coverage six $(./get-django-version.py ${{ matrix.django }})
pip install coverage six pytest pytest-django pytest-cov $(./get-django-version.py ${{ matrix.django }})
- name: Run tests
run: |
coverage run --source=modeltranslation ./runtests.py
pytest --cov-report term
988 changes: 988 additions & 0 deletions modeltranslation/tests/migrations/0001_initial.py

Large diffs are not rendered by default.

39 changes: 13 additions & 26 deletions modeltranslation/tests/models.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
import six
from django.conf import settings
from django.contrib.auth.models import Permission
from django.core import validators
from django.db import models
from django.utils.translation import gettext_lazy
Expand Down Expand Up @@ -128,9 +126,6 @@ class OtherFieldsModel(models.Model):
# That's rich! PositiveIntegerField is only validated in forms, not in models.
int = models.PositiveIntegerField(default=42, validators=[validators.MinValueValidator(0)])
boolean = models.BooleanField(default=False)
nullboolean = models.NullBooleanField()
csi = models.CommaSeparatedIntegerField(max_length=255)
ip = models.IPAddressField(blank=True, null=True)
float = models.FloatField(blank=True, null=True)
decimal = models.DecimalField(max_digits=5, decimal_places=2, blank=True, null=True)
date = models.DateField(blank=True, null=True)
Expand All @@ -154,9 +149,9 @@ def __get__(self, instance, owner):
return 'a' * length

def __set__(self, obj, value):
if isinstance(value, six.integer_types):
if isinstance(value, int):
obj.__dict__[self.field.name] = value
elif isinstance(value, six.string_types):
elif isinstance(value, str):
obj.__dict__[self.field.name] = len(value)
else:
obj.__dict__[self.field.name] = 0
Expand All @@ -174,7 +169,7 @@ def contribute_to_class(self, cls, name):
def pre_save(self, model_instance, add):
value = super(FancyField, self).pre_save(model_instance, add)
# In this part value should be retrieved using descriptor and be a string
assert isinstance(value, six.string_types)
assert isinstance(value, str)
# We put an int to database
return len(value)

Expand Down Expand Up @@ -332,16 +327,15 @@ class Meta:

class CustomManager(models.Manager):
def get_queryset(self):
sup = super(CustomManager, self)
queryset = sup.get_queryset() if hasattr(sup, 'get_queryset') else sup.get_query_set()
return queryset.filter(title__contains='a').exclude(description__contains='x')

get_query_set = get_queryset
return (
super(CustomManager, self)
.get_queryset()
.filter(title__contains='a')
.exclude(description__contains='x')
)

def custom_qs(self):
sup = super(CustomManager, self)
queryset = sup.get_queryset() if hasattr(sup, 'get_queryset') else sup.get_query_set()
return queryset
return super(CustomManager, self).get_queryset()

def foo(self):
return 'bar'
Expand All @@ -363,8 +357,6 @@ class CustomManager2(models.Manager):
def get_queryset(self):
return CustomQuerySet(self.model, using=self._db)

get_query_set = get_queryset


class CustomManager2TestModel(models.Model):
title = models.CharField(gettext_lazy('title'), max_length=255)
Expand Down Expand Up @@ -443,8 +435,6 @@ class CustomManagerX(models.Manager):
def get_queryset(self):
return CustomQuerySetX(self.model, using=self._db)

get_query_set = get_queryset


class AbstractBaseModelX(models.Model):
name = models.CharField(max_length=255)
Expand Down Expand Up @@ -495,8 +485,5 @@ class ModelY(AbstractModelY):
# Non-abstract base models whos Manager is not allowed to be overwritten


if "django.contrib.auth" in settings.INSTALLED_APPS:
from django.contrib.auth.models import Permission

class InheritedPermission(Permission):
translated_var = models.CharField(max_length=255)
class InheritedPermission(Permission):
translated_var = models.CharField(max_length=255)
55 changes: 47 additions & 8 deletions modeltranslation/tests/settings.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,62 @@
# -*- coding: utf-8 -*-
"""
Settings overrided for test time
"""
from django.conf import settings
import os
import warnings

warnings.simplefilter('always', DeprecationWarning)

INSTALLED_APPS = tuple(settings.INSTALLED_APPS) + ('modeltranslation.tests',)

def _get_database_config():
db = os.getenv('DB', 'sqlite')
host = os.getenv('DB_HOST', 'localhost')
conf = {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': ':memory:',
'TEST': {
'SERIALIZE': False,
},
}
if db == 'mysql':
conf.update(
{
'ENGINE': 'django.db.backends.mysql',
'NAME': os.getenv('MYSQL_DATABASE', 'modeltranslation'),
'USER': os.getenv('MYSQL_USER', 'root'),
'PASSWORD': os.getenv('MYSQL_PASSWORD', 'password'),
'HOST': host,
}
)
elif db == 'postgres':
conf.update(
{
'ENGINE': 'django.db.backends.postgresql',
'USER': os.getenv('POSTGRES_USER', 'postgres'),
'PASSWORD': os.getenv('POSTGRES_DB', 'postgres'),
'NAME': os.getenv('POSTGRES_DB', 'modeltranslation'),
'HOST': host,
}
)
return conf


DATABASES = {"default": _get_database_config()}

INSTALLED_APPS = (
'django.contrib.contenttypes',
'django.contrib.auth',
'modeltranslation',
'modeltranslation.tests',
)

LANGUAGES = (('de', 'Deutsch'), ('en', 'English'))
LANGUAGE_CODE = 'de'
MODELTRANSLATION_DEFAULT_LANGUAGE = 'de'

USE_I18N = True
USE_TZ = False
MIDDLEWARE_CLASSES = ()

MODELTRANSLATION_DEFAULT_LANGUAGE = 'de'
MODELTRANSLATION_AUTO_POPULATE = False
MODELTRANSLATION_FALLBACK_LANGUAGES = ()

ROOT_URLCONF = 'modeltranslation.tests.urls'

MIGRATION_MODULES = {'auth': 'modeltranslation.tests.auth_migrations'}
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
6 changes: 0 additions & 6 deletions modeltranslation/tests/test_settings.py

This file was deleted.

0 comments on commit fba75cc

Please sign in to comment.