Skip to main content

Testing plugin for funcnodes

Project description

pytest-funcnodes

pytest_funcnodes is the maintained pytest plugin for FuncNodes modules. It replaces the legacy TestAllNodesBase harness by supplying decorators, fixtures, and coverage helpers that keep the runtime isolated and guarantee every node is exercised.

Key Features

  • @pytest_funcnodes.nodetest Marks async node tests, injects pytest.mark.asyncio, and records which node classes were covered. Every test that executes a node must use this decorator so the plugin can reset registries and track coverage.

  • @pytest_funcnodes.funcnodes_test Wraps sync or async tests that interact with funcnodes_core / funcnodes state (loading shelves, running flows, tweaking config). It toggles the same isolated test_context used for node tests, disabling file loggers and pointing configs at a per-test temp directory.

  • Autouse fixtures & CLI flag The plugin ships nodetest_setup_teardown / funcnodes_test_setup_teardown fixtures plus --nodetests-only, letting you run just node suites while keeping isolation guarantees.

  • Coverage helper pytest_funcnodes.all_nodes_tested(all_nodes, shelf, ignore=...) flattens shelves and asserts that every exported node class was covered by a @nodetest.

Installation

uv add pytest-funcnodes
# or
pip install pytest_funcnodes

Usage

1. Mark node tests

import pytest_funcnodes
import funcnodes as fn

@fn.NodeDecorator("demo.concat")
def concat(a: str, b: str) -> str:
    return a + b

@pytest_funcnodes.nodetest(concat)
async def test_concat():
    node = concat()
    node["a"] = "foo"
    node["b"] = "bar"
    await node
    assert node["out"].value == "foobar"

2. Mark runtime/integration tests

import pytest_funcnodes
from funcnodes_core import config as fnconfig

@pytest_funcnodes.funcnodes_test
def test_config_uses_temp_dir():
    cfg_dir = fnconfig.get_config_dir()
    assert cfg_dir.name.startswith("funcnodes_test_")

3. Enforce shelf coverage

from pytest_funcnodes import all_nodes_tested
import funcnodes_basic as fnmodule

def test_all_nodes_tested(all_nodes):
    all_nodes_tested(all_nodes, fnmodule.NODE_SHELF, ignore=[])

This assertion fails with a list of missing node classes if any exported node lacks a @nodetest.

4. CLI workflow

  • pytest --nodetests-only filters the run down to node suites.
  • The session fixture prints Session fixture setup/teardown, confirming the plugin activated.
  • No manual calls to funcnodes_core.testing.setup() / teardown() are required—the fixtures enter and exit test_context automatically.

Runtime Isolation Details

test_context (see pytest_funcnodes/testingsystem.py) rewrites the FuncNodes config directory into a temp folder per PID, clears leftovers between tests, disables file handlers, upgrades selected warnings (e.g., FuncNodesDeprecationWarning) to errors, and removes the temp directory on exit. This means:

  • Tests never leak global registry state (funcnodes_core.node.REGISTERED_NODES is cleared after each run).
  • File logs stay inside the temp dir and are removed after teardown.
  • Fail-fast behavior surfaces deprecated APIs that still fire warnings.

Always prefer the provided decorators over manual setup so these safeguards remain effective.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pytest_funcnodes-1.1.0.tar.gz (46.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pytest_funcnodes-1.1.0-py3-none-any.whl (31.9 kB view details)

Uploaded Python 3

File details

Details for the file pytest_funcnodes-1.1.0.tar.gz.

File metadata

  • Download URL: pytest_funcnodes-1.1.0.tar.gz
  • Upload date:
  • Size: 46.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pytest_funcnodes-1.1.0.tar.gz
Algorithm Hash digest
SHA256 0f3a9eab9d3df7158b773aa75a54a8caca1bbec92fa1cd9943505a2236d435af
MD5 a713bdfab8cb0dcdf448585bf854a957
BLAKE2b-256 ec7ac9a481b829d86b89cec6e78d97a8ddc8a155b32bb298113e011a2db990dd

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytest_funcnodes-1.1.0.tar.gz:

Publisher: version_publish_main.yml on Linkdlab/funcnodes_pytest

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pytest_funcnodes-1.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for pytest_funcnodes-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ce0a63d29218c3751051d73ea65a286cf5c4c9ec5886045c668084c71d477ab0
MD5 94a6a77a5bcfa47eb0bd7225db13e60d
BLAKE2b-256 28e671d9ec89409b12ac005be5104bfa267520b49c561ca976f38e1e9911bde4

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytest_funcnodes-1.1.0-py3-none-any.whl:

Publisher: version_publish_main.yml on Linkdlab/funcnodes_pytest

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page