djangocms-testing

Testing utilities for Django CMS


License
BSD-3-Clause
Install
pip install djangocms-testing==0.1

Documentation

DjangoCMS Testing

A set of utils to simplify testing on Django CMS plugins and pages

Usage

Testing all plugins

import os

from .base import BaseTestCase

from filer.models import Image
from djangocms_testing.integrity import CMSPluginIntegrity


class DSMPluginIntegrityTestCase(BaseTestCase, CMSPluginIntegrity):

    plugin_exclude_list = [
        'SomePluginsToExclude',
        'AnotherPluginToExclude',
    ]

    def setUp(self):
        self.homepage = self.create_page('Homepage')

        # Create any data that may be necessary for the plugins

        # Example: Creating an image
        photo_path = os.path.join(os.path.dirname(__file__), 'files', 'sample_image.jpg')
        self.test_image = Image.objects.create(file=photo_path)

        # Update the plugin list
        self.plugin_list = [
            ('CategoryPlugin', {'title': 'Top Category'}),
            ('BannerPlugin', {'icon': self.test_image, 'link': self.homepage}),
            ('LinkToPagePlugin', {'page': self.homepage}),
        ]

Loading Pages

There's a management command that allows you to create pages from a YAML description.

The page description looks like this:

---
# Required page data
title: Regression Test Page
slug: regression-test-page
template: generic_page      # (generic_page is provided. You can use other templates by overriding _get_template)

# Optional page data        # Default value
publish: no                 # no    (yes | no)
language: en                # en    (en | es)
apphook: null               # null  (string)
apphook_namespace: null     # null  (string)
soft_root: no               # no    (yes | no)

# Placeholder variables
#
# Provided:
# $loremispum   1 paragraph of lorem ipsum text.
#
# You can add other variables by overriding _generate_sample_data
# $image        JPEG image
# $svg          SVG Tiger iimage

# Placeholders vary per template but its no problem to define them all
# in advance, and later just switch the template type:
#
# generic_page > content

placeholders:
  content:

    - CategoryPlugin:
        title: Category 1
        subplugins:

          - QuestionPlugin:
              question: >
                This is a question
              author: Author, 21
              subplugins:

                - AnswerPlugin:
                    body: >
                      This is the text's body

Create the page: manage.py page simple_test.yaml