|
6 | 6 | from django.utils.module_loading import import_string |
7 | 7 | from model_bakery import baker |
8 | 8 |
|
| 9 | +from django_simple_nav.nav import NavGroup |
| 10 | +from django_simple_nav.nav import NavItem |
| 11 | +from django_simple_nav.nav import RenderedNavItem |
9 | 12 | from tests.navs import DummyNav |
10 | 13 | from tests.utils import count_anchors |
11 | 14 |
|
@@ -96,3 +99,89 @@ def test_nav_render_from_request_with_template_name(req): |
96 | 99 | rendered_template = DummyNav.render_from_request(req, "tests/alternate.html") |
97 | 100 |
|
98 | 101 | assert "This is an alternate template." in rendered_template |
| 102 | + |
| 103 | + |
| 104 | +def test_extra_context(req): |
| 105 | + item = NavItem( |
| 106 | + title="Test", |
| 107 | + url="/test/", |
| 108 | + extra_context={"foo": "bar"}, |
| 109 | + ) |
| 110 | + |
| 111 | + rendered_item = RenderedNavItem(item, req) |
| 112 | + |
| 113 | + assert rendered_item.foo == "bar" |
| 114 | + |
| 115 | + |
| 116 | +def test_extra_context_with_no_extra_context(req): |
| 117 | + item = NavItem( |
| 118 | + title="Test", |
| 119 | + url="/test/", |
| 120 | + ) |
| 121 | + |
| 122 | + rendered_item = RenderedNavItem(item, req) |
| 123 | + |
| 124 | + with pytest.raises(AttributeError): |
| 125 | + assert rendered_item.foo == "bar" |
| 126 | + |
| 127 | + |
| 128 | +def test_extra_context_shadowing(req): |
| 129 | + item = NavItem( |
| 130 | + title="Test", |
| 131 | + url="/test/", |
| 132 | + extra_context={"title": "Shadowed"}, |
| 133 | + ) |
| 134 | + |
| 135 | + rendered_item = RenderedNavItem(item, req) |
| 136 | + |
| 137 | + assert rendered_item.title == "Test" |
| 138 | + |
| 139 | + |
| 140 | +def test_extra_context_iteration(req): |
| 141 | + item = NavItem( |
| 142 | + title="Test", |
| 143 | + url="/test/", |
| 144 | + extra_context={"foo": "bar", "baz": "qux"}, |
| 145 | + ) |
| 146 | + |
| 147 | + rendered_item = RenderedNavItem(item, req) |
| 148 | + |
| 149 | + assert rendered_item.extra_context == {"foo": "bar", "baz": "qux"} |
| 150 | + for key, value in rendered_item.extra_context.items(): |
| 151 | + assert getattr(rendered_item, key) == value |
| 152 | + |
| 153 | + |
| 154 | +def test_extra_context_builtins(req): |
| 155 | + item = NavGroup( |
| 156 | + title="Test", |
| 157 | + items=[ |
| 158 | + NavItem( |
| 159 | + title="Test", |
| 160 | + url="/test/", |
| 161 | + permissions=["is_staff"], |
| 162 | + extra_context={"foo": "bar"}, |
| 163 | + ), |
| 164 | + ], |
| 165 | + url="/test/", |
| 166 | + permissions=["is_staff"], |
| 167 | + extra_context={"baz": "qux"}, |
| 168 | + ) |
| 169 | + |
| 170 | + rendered_item = RenderedNavItem(item, req) |
| 171 | + |
| 172 | + assert rendered_item.title == "Test" |
| 173 | + assert rendered_item.url == "/test/" |
| 174 | + assert rendered_item.permissions == ["is_staff"] |
| 175 | + assert rendered_item.extra_context == {"baz": "qux"} |
| 176 | + assert rendered_item.baz == "qux" |
| 177 | + |
| 178 | + assert rendered_item.items is not None |
| 179 | + assert len(rendered_item.items) == 1 |
| 180 | + |
| 181 | + rendered_group_item = rendered_item.items[0] |
| 182 | + |
| 183 | + assert rendered_group_item.title == "Test" |
| 184 | + assert rendered_group_item.url == "/test/" |
| 185 | + assert rendered_group_item.permissions == ["is_staff"] |
| 186 | + assert rendered_group_item.extra_context == {"foo": "bar"} |
| 187 | + assert rendered_group_item.foo == "bar" |
0 commit comments