Skip to content

Commit

Permalink
Merge pull request #41 from an42rus/master
Browse files Browse the repository at this point in the history
added support for django>=4.0
  • Loading branch information
pefremova committed Jun 10, 2024
2 parents 443dcaa + 7444b0d commit c7686b4
Show file tree
Hide file tree
Showing 12 changed files with 174 additions and 97 deletions.
6 changes: 5 additions & 1 deletion test_project/urls.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.conf.urls import url
try:
from django.urls import re_path as url
except ImportError:
# Django < 4.0
from django.conf.urls import url

from test_project.test_app.views import SomeModelCreateView, SomeModelUpdateView, SomeModelDeleteView

Expand Down
3 changes: 2 additions & 1 deletion ttoolly/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@

from django.conf import settings
from future.utils import PY2
from ttoolly.utils import unicode_to_readable, to_bytes

from ttoolly.utils import to_bytes, unicode_to_readable


def _getDescription(self, test):
Expand Down
11 changes: 9 additions & 2 deletions ttoolly/html_report/report.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
from datetime import datetime
import os
import traceback
from datetime import datetime
from unittest.runner import TextTestResult

from django.conf import settings
from django.utils.encoding import force_text

try:
from django.utils.encoding import force_str as force_text
except ImportError:
# Django < 4.0
from django.utils.encoding import force_text

import jinja2
from pyunitreport.result import HtmlTestResult, _TestInfo, render_html

from ttoolly.utils import to_bytes, unicode_to_readable


Expand Down
10 changes: 6 additions & 4 deletions ttoolly/management/commands/generate_model_fixture.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals, print_function, absolute_import
from django.core.management.base import BaseCommand
from ttoolly.utils import unicode_to_readable, generate_random_obj
from django.core import serializers
from __future__ import absolute_import, print_function, unicode_literals

from optparse import make_option

from django.apps import apps
from django.core import serializers
from django.core.management.base import BaseCommand

from ttoolly.utils import generate_random_obj, unicode_to_readable

get_model = apps.get_model

Expand Down
6 changes: 4 additions & 2 deletions ttoolly/management/commands/prepare_files_for_tests.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals, print_function, absolute_import
from __future__ import absolute_import, print_function, unicode_literals

from django.apps import apps
from django.core.management.base import BaseCommand
from django.db import models

from ttoolly.utils import prepare_file_for_tests
from django.apps import apps

get_models = apps.get_models

Expand Down
7 changes: 4 additions & 3 deletions ttoolly/management/commands/udumpdata.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
# -*- coding: utf-8 -*-
from django.core.management.base import BaseCommand
from django.core import serializers
from django.apps import apps
import sys

from django.apps import apps
from django.core import serializers
from django.core.management.base import BaseCommand

get_model = apps.get_model


Expand Down
92 changes: 48 additions & 44 deletions ttoolly/models.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function, unicode_literals

from copy import copy, deepcopy
from datetime import datetime, date, time
from decimal import Decimal
import inspect
import json
import os
from random import choice, randint, uniform
import re
from shutil import rmtree
import sys
import tempfile
from unittest.util import strclass
import warnings
from copy import copy, deepcopy
from datetime import date, datetime, time
from decimal import Decimal
from random import choice, randint, uniform
from shutil import rmtree
from unittest.util import strclass

from django import VERSION as DJANGO_VERSION
from django.apps import apps
Expand All @@ -24,14 +24,21 @@
from django.core import mail
from django.core.files.base import ContentFile
from django.core.management import call_command
from django.db import transaction, DEFAULT_DB_ALIAS, connections, models
from django.db.models import Q, Manager, DateTimeField
from django.db import DEFAULT_DB_ALIAS, connections, models, transaction
from django.db.models import DateTimeField, Manager, Q
from django.http import HttpRequest
from django.template.defaultfilters import filesizeformat
from django.test import TransactionTestCase, TestCase
from django.test import TestCase, TransactionTestCase
from django.test.testcases import connections_support_transactions
from django.test.utils import override_settings
from django.utils.encoding import force_text, force_bytes
from django.utils.encoding import force_bytes

try:
from django.utils.encoding import force_str as force_text
except ImportError:
# Django < 4.0
from django.utils.encoding import force_text

from django.utils.http import urlsafe_base64_encode
from lxml.html import document_fromstring

Expand All @@ -42,71 +49,68 @@
raise

from builtins import str
from future.utils import viewitems, viewkeys, viewvalues, with_metaclass
from past.builtins import xrange, basestring
from uuid import UUID

from future.utils import viewitems, viewkeys, viewvalues, with_metaclass
from past.builtins import basestring, xrange

from .testcases import (
AddNegativeCases,
AddPositiveCases,
EditPositiveCases,
ChangePasswordNegativeCases,
ChangePasswordPositiveCases,
DeleteNegativeCases,
DeletePositiveCases,
EditNegativeCases,
EditPositiveCases,
ListNegativeCases,
ListPositiveCases,
DeletePositiveCases,
DeleteNegativeCases,
RemovePositiveCases,
LoginNegativeCases,
LoginPositiveCases,
RemoveNegativeCases,
ResetPasswordPositiveCases,
RemovePositiveCases,
ResetPasswordNegativeCases,
ChangePasswordPositiveCases,
ChangePasswordNegativeCases,
LoginPositiveCases,
LoginNegativeCases,
ResetPasswordPositiveCases,
)
from .utils import (
FILE_TYPES,
format_errors,
generate_random_obj,
generate_sql,
get_all_field_names_from_model,
get_all_form_errors,
get_all_urls,
get_captcha_codes,
get_error,
get_fields_list_from_response,
get_fixtures_data,
get_randname,
get_url_for_negative,
get_url,
get_captcha_codes,
get_random_email_value,
get_fixtures_data,
generate_sql,
unicode_to_readable,
get_fields_list_from_response,
get_random_file,
get_real_fields_list_from_response,
get_all_form_errors,
generate_random_obj,
get_all_urls,
get_url,
get_url_for_negative,
prepare_custom_file_for_tests,
get_random_file,
get_all_field_names_from_model,
FILE_TYPES,
)
from .utils.decorators import (
only_with,
only_with_obj,
only_with_any_files_params,
only_with_files_params,
unicode_to_readable,
)
from .utils.decorators import only_with, only_with_any_files_params, only_with_files_params, only_with_obj

if DJANGO_VERSION < (1, 8):
raise Exception('Django version should be >= 1.8. Now %s' % str(DJANGO_VERSION))

if sys.version[0] == '2':
from functools32 import wraps
from urllib import urlencode

from functools32 import wraps
else:
from functools import wraps
from urllib.parse import urlencode

try:
from django.core.urlresolvers import reverse, resolve
from django.core.urlresolvers import resolve, reverse
except ImportError:
# Django 2.0
from django.urls import reverse, resolve
from django.urls import resolve, reverse

try:
from django.db.models.fields import FieldDoesNotExist
Expand Down Expand Up @@ -2915,7 +2919,7 @@ def send_delete_request(self, obj_pk):
self.get_url_for_negative(self.url_delete, (obj_pk,)),
{'post': 'yes'},
follow=True,
**self.additional_params
**self.additional_params,
)


Expand Down
8 changes: 5 additions & 3 deletions ttoolly/runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,25 @@
import re
import sys
import unittest
from datetime import datetime

from django.conf import settings
from django.test.runner import reorder_suite, DiscoverRunner
from datetime import datetime
from django.test.runner import DiscoverRunner

from ttoolly.utils.utils import reorder_suite

WITH_HTML_REPORT = getattr(settings, 'TEST_HTML_REPORT', False)
if WITH_HTML_REPORT:
try:
from pyunitreport import HTMLTestRunner

from ttoolly.html_report.report import CustomHtmlTestResult
except ImportError:
raise Exception('For html reports you should install pyunitreport:\n pip install PyUnitReport')


if getattr(settings, 'TEST_RUNNER_PARENT', '') == 'xmlrunner.extra.djangotestrunner.XMLTestRunner':
from xmlrunner.result import _XMLTestResult, safe_unicode, _TestInfo
from xmlrunner.result import _TestInfo, _XMLTestResult, safe_unicode
from xmlrunner.runner import XMLTestRunner

original_report_testcase = _XMLTestResult._report_testcase
Expand Down
30 changes: 13 additions & 17 deletions ttoolly/testcases.py
Original file line number Diff line number Diff line change
@@ -1,35 +1,31 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function, unicode_literals

import re
from copy import copy
from datetime import datetime, timedelta
from random import choice
import re

from django import VERSION as DJANGO_VERSION
from django.conf import settings
from django.core import mail
from django.db import transaction
from django.db.models import Q
from django.utils.encoding import force_text

try:
from django.utils.encoding import force_str as force_text
except ImportError:
# Django < 4.0
from django.utils.encoding import force_text

from builtins import str

from freezegun import freeze_time
from future.utils import viewitems, viewkeys
from past.builtins import basestring

from .utils import (
format_errors,
get_randname,
get_random_email_value,
get_field_from_response,
convert_size_to_bytes,
)
from .utils.decorators import (
only_with,
only_with_obj,
only_with_files_params,
only_with_any_files_params,
)
from .utils import convert_size_to_bytes, format_errors, get_field_from_response, get_randname, get_random_email_value
from .utils.decorators import only_with, only_with_any_files_params, only_with_files_params, only_with_obj


class ListPositiveCases(object):
Expand Down Expand Up @@ -2213,7 +2209,7 @@ def test_add_object_one_of_fields_all_filled_negative(self):
message_type = 'one_of'
for group in self.one_of_fields_add:
for filled_group in tuple(
set([(el, additional_el) for i, el in enumerate(group) for additional_el in group[i + 1:]]).difference(
set([(el, additional_el) for i, el in enumerate(group) for additional_el in group[i + 1 :]]).difference(
set(self.one_of_fields_add).difference(group)
)
) + (group,):
Expand Down Expand Up @@ -5154,7 +5150,7 @@ def test_edit_object_one_of_fields_all_filled_negative(self):
message_type = 'one_of'
for group in self.one_of_fields_edit:
for filled_group in tuple(
set([(el, additional_el) for i, el in enumerate(group) for additional_el in group[i + 1:]]).difference(
set([(el, additional_el) for i, el in enumerate(group) for additional_el in group[i + 1 :]]).difference(
set(self.one_of_fields_edit).difference(group)
)
) + (group,):
Expand Down
2 changes: 1 addition & 1 deletion ttoolly/utils/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
from .utils import *
from .decorators import *
from .utils import *
13 changes: 8 additions & 5 deletions ttoolly/utils/decorators.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,21 @@
from __future__ import absolute_import, division, print_function, unicode_literals

import sys
from unittest import SkipTest
import warnings
from unittest import SkipTest

from django.utils.encoding import force_text
try:
from django.utils.encoding import force_str as force_text
except ImportError:
# Django < 4.0
from django.utils.encoding import force_text

from future.utils import viewkeys


if sys.version[0] == '2':
from functools32 import wraps, update_wrapper
from functools32 import update_wrapper, wraps
else:
from functools import wraps, update_wrapper
from functools import update_wrapper, wraps


class only_with_obj(object):
Expand Down
Loading

0 comments on commit c7686b4

Please sign in to comment.