Pytest plugin to test Plone addons
Project description
pytest-plone
pytest-plone is a pytest plugin providing fixtures and helpers to test Plone add-ons.
This package is built on top of gocept.pytestlayer.
Reasoning
Despite the fact Plone, and Zope, have their codebases tested with unittest
, over the years
pytest
became the most popular choice for testing in Python.
pytest
is more flexible and easier to use than unittest
and has a rich ecosystem of plugins that you can use to extend its functionality.
Warning
THIS PACKAGE IS NOT CONSIDERED TO BE STABLE AND FIXTURES COULD CHANGE BEFORE A FINAL RELEASE
Usage
In your top-level conftest.py
import your testing layers, and also import fixtures_factory
-- which will accept a iterator of tuples containing the testing layer and a prefix to be used to generate the needed pytest fixtures.
from Products.CMFPlone.testing import PRODUCTS_CMFPLONE_FUNCTIONAL_TESTING
from Products.CMFPlone.testing import PRODUCTS_CMFPLONE_INTEGRATION_TESTING
from pytest_plone import fixtures_factory
globals().update(
fixtures_factory(
(
(PRODUCTS_CMFPLONE_FUNCTIONAL_TESTING, "functional"),
(PRODUCTS_CMFPLONE_INTEGRATION_TESTING, "integration"),
)
)
)
In the code above, the following pytest fixtures will be available to your tests:
Fixture | Scope |
---|---|
functional_session | Session |
functional_class | Class |
functional | Function |
integration_session | Session |
integration_class | Class |
integration | Function |
Fixtures
portal
Description | Portal object |
Required Fixture | integration |
Scope | Function |
def test_portal_title(portal):
"""Test portal title."""
assert portal.title == "Plone Site"
http_request
Description | HTTP Request |
Required Fixture | integration |
Scope | Function |
from plone import api
def test_myproduct_controlpanel_view(portal, http_request):
"""Test myproduct_controlpanel browser view is available."""
view = api.content.get_view(
"myproduct-controlpanel", portal, http_request
)
assert view is not None
installer
Description | Installer browser view. Used to install/uninstall/check for an add-on. |
Required Fixture | integration |
Scope | Function |
import pytest
PACKAGE_NAME = "myproduct"
@pytest.fixture
def uninstall(installer):
"""Fixture to uninstall a package."""
installer.uninstall_product(PACKAGE_NAME)
def test_product_installed(installer):
"""Test if myproduct is installed."""
assert installer.is_product_installed(PACKAGE_NAME) is True
@pytest.mark.parametrize(
"package",
[
"collective.casestudy",
"pytest-plone",
]
)
def test_dependency_installed(installer, package):
"""Test if dependency is installed."""
assert installer.is_product_installed(package) is True
browser_layers
Description | List of available browser layers. Used to test if a specific browser layer is registered. |
Required Fixture | integration |
Scope | Function |
def test_browserlayer(browser_layers):
"""Test that IMyProductLayer is registered."""
from myproduct.interfaces import IMyProductLayer
assert IMyProductLayer in browser_layers
controlpanel_actions
Description | List of control panel actions ids. Used to test if a specific control panel is installed or not. |
Required Fixture | integration |
Scope | Function |
def test_configlet_install(controlpanel_actions):
"""Test if control panel is installed."""
assert "myproductcontrolpanel" in controlpanel_actions
Plugin Development
You need a working python
environment (system, virtualenv, pyenv, etc) version 3.8 or superior.
Then install the dependencies and a development instance using:
make build
To run tests for this package:
make test
By default we use the latest Plone version in the 6.x series.
License
The project is licensed under the GPLv2.
Changelog
0.1.0 (2023-01-04)
-
Fixtures
portal
,http_request
,installer
,browser_layers
,controlpanel_actions
[ericof] -
Initial release [ericof]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for pytest_plone-0.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 998f5d3744c8fabfc9abba903684852713cd7f4e25159ed864826b560d4636ef |
|
MD5 | b4e8bf8300012edc2210480c52f36100 |
|
BLAKE2b-256 | 2447d03b3d8a4a6eb7383e718762799ffbe345617dcfcc353f72a5fd8fe3c0a5 |