from collections import namedtuple import pytest from .. import breadcrumbs as b @pytest.fixture def nested_crumbs(): x = b.Crumb("nc.x", label="x") y = b.Crumb("nc.y", label="y", parent="nc.x") z = b.Crumb("nc.z", label="z", parent="nc.y") crumbs = (x, y, z) for crumb in crumbs: b.breadcrumbs[crumb.route] = crumb yield namedtuple("NestedCrumbs", "x y z")(*crumbs) for crumb in crumbs: del b.breadcrumbs[crumb.route] @pytest.fixture def crumb_match(nested_crumbs): return namedtuple("Match", "view_name")(nested_crumbs.z.route) class TestAdd: def test_inserts_a_breadcrumb_without_parent(self): route = "tests.add.insert" assert route not in b.breadcrumbs b.add(route, "some label") assert route in b.breadcrumbs assert b.breadcrumbs[route] == route route = b.breadcrumbs[route] assert route.label == "some label" assert route.parent is None def test_inserts_a_breadcrumb_with_parent(self): route = "tests.add.with_parent" parent = "tests.add.insert" assert route not in b.breadcrumbs b.add(route, "child label", parent) assert route in b.breadcrumbs assert b.breadcrumbs[route] == route route = b.breadcrumbs[route] assert route.label == "child label" assert route.parent == parent class TestFind: def test_finds_chain_of_crumbs(self, nested_crumbs, crumb_match): crumbs = b.find(crumb_match) assert len(crumbs) == 3 assert crumbs[0] == nested_crumbs.x assert crumbs[1] == nested_crumbs.y assert crumbs[2] == nested_crumbs.z