Inputs

All variables and methods for input purposes are in InputMixin class

Attributes

CHECK_MODULES - list of modules which should be included, eg [myapp], or more specifically [myapp.core, myapp.subapp1]

EXCLUDE_MODULES - list of all modules that should be excluded from search for models, urls, etc., for example [‘migrations’, ‘commands’, ‘tests’, ‘settings’]

TEST_PASSWORD - login password for users

IGNORE_MODEL_FIELDS - dictionary of fields per model that should not be generated, use for fields with automatically assigned values, for example {MPTTModel: [‘lft’, ‘rght’, ‘tree_id’, ‘level’]}

PRINT_SORTED_MODEL_DEPENDENCY - flag for printing out generated models dependency (for debug purposes)

PRINT_TEST_SUBJECT = flag for printing out tested subject like url params/filter class/queryset

test_urls specific

RUN_ONLY_THESE_URL_NAMES - optional list of url names, if provided will run tests only for given urls (for debug purposes to save time), for example [‘accounts:user_detail’]

RUN_ONLY_URL_NAMES_CONTAINING - optional list of url name patterns, if not empty will run tests only for urls containing at least one of provided patterns

IGNORE_URL_NAMES_CONTAINING - list of url names to skip in tests

POST_ONLY_URLS - list of url names to run only post request tests for

GET_ONLY_URLS - list of url names to run only get request tests for

Input methods

Following methods are simplified examples just for completeness of inputs, see InputMixin for details

Model dependencies

@classmethod
def manual_model_dependency(cls):
    '''
    Use to manually specify model dependency which are not accounted for by default (check get_sorted_models_dependency output),
    for example if generating objs with provided m2m values, or otherwise required in model_field_values_map
    '''
    return {
        User: {Group}
    }

Field Values

@classmethod
def model_field_values_map(cls):
    '''
    Enables generate objects with specific values, for example for User model:
    '''
    return {
        User: {
            'user_1': lambda cls: {
            'username': f'user.{cls.next_id(User)}@example.com',
            'email': f'user.{cls.next_id(User)}@example.com',
            'password': 'testpassword',
            'is_superuser': True,
        },
    }

@classmethod
def default_field_name_map(cls):
    '''
    field values by field name used to generate objects, this has priority before default_field_map,
    values can be callables with field variable, extend in subclass as needed
    '''
    return {
        'year': now().year,
        'month': now().month,
    }

@classmethod
def default_field_map(cls):
    '''
    field values by field class used to generate objects, values can be callables with field variable,
    extend in subclass as needed
    '''
    map = { ... }
    return map


@classmethod
def default_form_field_map(cls):
    '''
    field values by form field class used to generate form values, values can be callables with field variable,
    extend in subclass as needed
    '''
    map = { ... }
    return map

Test values

@property
def url_params_map(self):
    return {
        'accounts:user_list':{
            'params_1: {
                'args': [],
                'kwargs': {},
                'cookies: {}, # dict or cookie str
                'data': {},
                'init_form_kwargs': {},
                'form_kwargs': {},
            },
            'params_2': {} # passing empty dict behaves as if no params were specified, use to check also default behaviour besides specified params (params_1)
    }

@property
def queryset_params_map(self):
    return {
        'UserQuerySet: {
            'restrict_user': {},
        },
    }

@property
def filter_params_map(self):
    return {
        'UserFilterSet: {
            'filter_kwargs': {},
            'data': {},
            'queryset': User.objects.all(), # optional
        },
    }