9
9
10
10
class MenuTests (TestCase ):
11
11
def setUp (self ):
12
+ # allow the title of kids3-2 to be changed
13
+ self .kids3_2_desired_title = None
14
+ def kids3_2_title (request ):
15
+ if self .kids3_2_desired_title is not None :
16
+ return "-" .join ([request .path , self .kids3_2_desired_title ])
17
+ return 'kids3-2'
18
+
19
+ # hide kids2-2 whenever the request path ends with /hidden
20
+ def kids2_2_check (request ):
21
+ if request .path .endswith ('/hidden' ):
22
+ return False
23
+ return True
24
+
12
25
kids2 = [
13
26
MenuItem ("kids2-1" , "/parent2/kids2-1" , weight = 999 ),
14
- MenuItem ("kids2-2" , "/kids2-2" )
27
+ MenuItem ("kids2-2" , "/kids2-2" , check = kids2_2_check )
15
28
]
16
29
kids3 = [
17
30
MenuItem ("kids3-1" , "/parent3/kids3-1" , children = [
18
- MenuItem ("kids3-1-1" , "/parent3/kids3-1/kid1" )
31
+ MenuItem ("kids3-1-1" , "/parent3/kids3-1/kid1" , exact_url = True )
19
32
]),
20
- MenuItem ("kids3-2" , "/parent3/kids3-2" )
33
+ MenuItem (kids3_2_title , "/parent3/kids3-2" )
21
34
]
22
35
23
36
Menu .items = {}
@@ -29,6 +42,41 @@ def setUp(self):
29
42
30
43
self .factory = RequestFactory ()
31
44
45
+ def test_exact_url (self ):
46
+ """
47
+ Ensure that the exact_url setting works
48
+ """
49
+ # the extra stuff will still cause kids3-2 to be selected
50
+ request = self .factory .get ('/parent3/kids3-2/extra_stuff_here' )
51
+ Menu .process (request , 'test' )
52
+ self .assertEqual (Menu .items ['test' ][1 ].children [1 ].selected , True )
53
+
54
+ # but here it won't, because exact_url is set
55
+ request = self .factory .get ('/parent3/kids3-1/kid1/extra_stuff_here' )
56
+ Menu .process (request , 'test' )
57
+ self .assertEqual (Menu .items ['test' ][1 ].children [0 ].children [0 ].selected , False )
58
+
59
+ def test_callable_title (self ):
60
+ """
61
+ Ensure callable titles work
62
+ """
63
+ self .kids3_2_desired_title = "fun"
64
+ request = self .factory .get ('/parent3' )
65
+ Menu .process (request , 'test' )
66
+ self .assertEqual (Menu .items ['test' ][1 ].children [1 ].title , "/parent3-fun" )
67
+
68
+ def test_checks (self ):
69
+ """
70
+ Ensure checks on menus work
71
+ """
72
+ request = self .factory .get ('/kids2-2/visible' )
73
+ Menu .process (request , 'test' )
74
+ self .assertEqual (len (Menu .items ['test' ][0 ].children ), 2 )
75
+
76
+ request = self .factory .get ('/kids2-2/hidden' )
77
+ Menu .process (request , 'test' )
78
+ self .assertEqual (len (Menu .items ['test' ][0 ].children ), 1 )
79
+
32
80
def test_select_parents (self ):
33
81
"""
34
82
Ensure the MENU_SELECT_PARENTS setting works
@@ -37,21 +85,21 @@ def test_select_parents(self):
37
85
request = self .factory .get ('/parent2/kids2-1' )
38
86
Menu .process (request , 'test' )
39
87
self .assertEqual (Menu .items ['test' ][0 ].selected , True )
40
- self .assertEqual (Menu .items ['test' ][1 ].selected , False )
41
88
self .assertEqual (Menu .items ['test' ][0 ].children [1 ].selected , True )
89
+ self .assertEqual (Menu .items ['test' ][1 ].selected , False )
42
90
43
91
request = self .factory .get ('/kids2-2' )
44
92
Menu .process (request , 'test' )
45
93
self .assertEqual (Menu .items ['test' ][0 ].selected , False )
46
- self .assertEqual (Menu .items ['test' ][1 ].selected , False )
47
94
self .assertEqual (Menu .items ['test' ][0 ].children [0 ].selected , True )
95
+ self .assertEqual (Menu .items ['test' ][1 ].selected , False )
48
96
49
97
settings .MENU_SELECT_PARENTS = True
50
98
request = self .factory .get ('/kids2-2' )
51
99
Menu .process (request , 'test' )
52
100
self .assertEqual (Menu .items ['test' ][0 ].selected , True )
53
- self .assertEqual (Menu .items ['test' ][1 ].selected , False )
54
101
self .assertEqual (Menu .items ['test' ][0 ].children [0 ].selected , True )
102
+ self .assertEqual (Menu .items ['test' ][1 ].selected , False )
55
103
56
104
request = self .factory .get ('/parent3/kids3-1/kid1' )
57
105
Menu .process (request , 'test' )
0 commit comments