#20579: Define the expected state of the database between test cases
-----------------------------------+-------------------------------------
     Reporter:  aaugustin          |                    Owner:  aaugustin
         Type:  Bug                |                   Status:  new
    Component:  Testing framework  |                  Version:  master
     Severity:  Release blocker    |               Resolution:
     Keywords:                     |             Triage Stage:  Accepted
    Has patch:  0                  |      Needs documentation:  0
  Needs tests:  0                  |  Patch needs improvement:  0
Easy pickings:  0                  |                    UI/UX:  0
-----------------------------------+-------------------------------------

Comment (by aaugustin):

 I had spent half an hour carefully writing down my research, going back to
 the introduction of TransactionTestCase, only to lose my text to a bad key
 combo. Lesson learnt: Firefox doesn't consider Trac's comment field as an
 input field, and won't preserve its content across Back / Next :'( I'm too
 lazy to re-write it all.

 ----

 To sum up, I was proposing to:
 - Trigger post_syncdb at the beginning of TransactionTestCase => ensures
 required CTs and permissions exist.
 - Flush without triggering post_syncdb at the end of TransactionTestCase
 => avoids creating thousands of CTs and permissions, preserving the
 benefits of #20483.

 This introduces one noticeable change compared to Django 1.5: after a
 TransactionTestCase, CTs and permissions tables will be empty. This isn't
 a problem for CTs because they're created on the fly when they're missing
 -- get_for_model actually does_create_for_model. It could be a problem for
 permissions.

 ----

 It could also be a problem for doctests. Carl says: ''there is no longer
 any special support for doctests in Django (or well, there is, but it is
 deprecated); doctests are still fully "supported" in the sense that they
 are part of Python and can be integrated with a unittest test suite in the
 manner recommended in the Python docs; that integration has to be
 explicit, doctests are not automatically discovered; see
 http://docs.python.org/2/library/doctest.html#unittest-api''.

 Currently, the reordering of the test suite runs all subclasses
 `django.test.TestCase` first, and then everything else -- including
 TransactionTestCase and doctests turned into `unittest.TestCase`. As a
 consequence, if someone's running doctests that rely on permissions, this
 proposal would break them.

 To play safe, we could perform this steps only when available_apps isn't
 None. This makes available_apps even more of a hack specific to Django's
 own test suite, but it never was anything else anyway... Thoughts?

-- 
Ticket URL: <https://code.djangoproject.com/ticket/20579#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/067.e0e960b4ae7efd9263ac525e6e51ef6d%40djangoproject.com?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to