예제 #1
0
def transactional_db(django_db_blocker, request):
    # Django's/Pytest Django's handling of this is garbage
    # The database is wipe of initial data and never repopulated so we have to do
    # all of it ourselves
    django_db_blocker.unblock()
    request.addfinalizer(django_db_blocker.restore)

    from django.test import TransactionTestCase
    test_case = TransactionTestCase(methodName='__init__')
    test_case._pre_setup()

    # Dump all initial data into a string :+1:
    for connection in connections.all():
        if connection.settings_dict['TEST']['MIRROR']:
            continue
        connection._test_serialized_contents = connection.creation.serialize_db_to_string(
        )

    yield None

    test_case.serialized_rollback = True
    test_case._post_teardown()

    # Disconnect post save listeners because they screw up deserialization
    receivers, post_save.receivers = post_save.receivers, []

    if test_case.available_apps is not None:
        apps.unset_available_apps()

    for connection in connections.all():
        if connection.settings_dict['TEST']['MIRROR']:
            connection.close()
            continue
        # Everything has to be in a single transaction to avoid violating key constraints
        # It also makes it run significantly faster
        with transaction.atomic():
            connection.creation.deserialize_db_from_string(
                connection._test_serialized_contents)

    if test_case.available_apps is not None:
        apps.set_available_apps(test_case.available_apps)

    post_save.receivers = receivers
예제 #2
0
 def test_filter_group(self):
     t = TransactionTestCase()
     qs = fixture.group_query_filter()
     result = fixture.filter_group_name().filter(qs, 'ex')
     qs2 = GroupFilter.custom_filter(self, qs, '', 'ex')
     t.assertQuerysetEqual(qs2, [repr(r) for r in result])
예제 #3
0
 def test_filter_from_person(self):
     t = TransactionTestCase()
     qs = fixture.from_person_query_filter()
     result = fixture.filter_person_name().filter(qs, 'ex')
     qs2 = FromPersonFilter.custom_filter(self, qs, '', 'ex')
     t.assertQuerysetEqual(qs2, [repr(r) for r in result])