1
1
import pytest
2
+ from playwright .sync_api import expect
2
3
3
4
from testapp .models import Book
4
5
@@ -24,19 +25,21 @@ def get_end_order(direction):
24
25
25
26
@pytest .fixture
26
27
def adminpage (live_server , page , slug ):
27
- page .goto (f'{ live_server .url } /admin/testapp/{ slug } /{ js_the_good_parts_id } /change/' )
28
+ url = f'{ live_server .url } /admin/testapp/{ slug } /{ js_the_good_parts_id } /change/'
29
+ page .goto (url )
28
30
return page
29
31
30
32
31
- def is_fieldset_ordered (inline_elem , direction ):
33
+ def expect_fieldset_is_ordered (inline_elem , direction ):
34
+ expect (inline_elem ).to_be_visible ()
32
35
start_order = get_start_order (direction )
33
- for counter , row in enumerate (inline_elem .query_selector_all ('div.inline-related.has_original' )):
34
- order_field = row .query_selector ('fieldset input._reorder_' )
35
- assert order_field is not None
36
+ inline_related = inline_elem .locator ('div.inline-related.has_original' )
37
+ for counter in range (inline_related .count ()):
38
+ row = inline_related .nth (counter )
39
+ order_field = row .locator ('fieldset input._reorder_' )
40
+ expect (order_field ).to_be_hidden ()
36
41
order = start_order + direction * counter
37
- if order_field .input_value () != str (order ):
38
- return False
39
- return True
42
+ expect (order_field ).to_have_value (str (order ))
40
43
41
44
42
45
@pytest .fixture
@@ -53,55 +56,68 @@ def chapter(slug):
53
56
return '#chapter'
54
57
55
58
59
+ @pytest .fixture
60
+ def drag_selector (slug ):
61
+ if slug in ['book5' ]:
62
+ return '> td > p'
63
+ return '> h3'
64
+
65
+
56
66
@pytest .mark .parametrize ('slug' , slugs )
57
- def test_drag_down (adminpage , slug , direction , chapter ):
58
- inline_locator = adminpage .locator (f'{ chapter } _set-group' )
59
- assert is_fieldset_ordered ( inline_locator . element_handle () , direction )
67
+ def test_drag_down (adminpage , slug , direction , chapter , drag_selector ):
68
+ group_locator = adminpage .locator (f'{ chapter } _set-group' )
69
+ expect_fieldset_is_ordered ( group_locator , direction )
60
70
start_order = get_start_order (direction )
61
- assert inline_locator .locator (f'{ chapter } _set-0 input._reorder_' ).input_value () == str (start_order )
62
- drag_handle = inline_locator .locator (f'{ chapter } _set-0 :is(h3, p)' )
63
- drag_handle .drag_to (inline_locator .locator (f'{ chapter } _set-4' ))
64
- assert inline_locator .locator (f'{ chapter } _set-0 input._reorder_' ).input_value () == str (start_order + direction * 4 )
65
- assert inline_locator .locator (f'{ chapter } _set-1 input._reorder_' ).input_value () == str (start_order )
66
- assert is_fieldset_ordered (inline_locator .element_handle (), direction )
71
+ expect (group_locator .locator (f'{ chapter } _set-0 input._reorder_' )).to_have_value (str (start_order ))
72
+ if slug in ['book6' ]:
73
+ adminpage .screenshot (path = f'../workdir/screenshot-{ slug } -before.png' )
74
+ drag_kwargs = {'source_position' : {'x' : 200 , 'y' : 10 }, 'target_position' : {'x' : 200 , 'y' : 10 }}
75
+ drag_handle = group_locator .locator (f'{ chapter } _set-0 { drag_selector } ' )
76
+ expect (drag_handle ).to_be_visible ()
77
+ drag_handle .drag_to (group_locator .locator (f'{ chapter } _set-4' ), ** drag_kwargs )
78
+ if slug in ['book6' ]:
79
+ adminpage .screenshot (path = f'../workdir/screenshot-{ slug } -after.png' )
80
+ expect (group_locator .locator (f'{ chapter } _set-0 input._reorder_' )).to_have_value (str (start_order + direction * 4 ))
81
+ expect (group_locator .locator (f'{ chapter } _set-1 input._reorder_' )).to_have_value (str (start_order ))
82
+ expect_fieldset_is_ordered (group_locator , direction )
67
83
68
84
69
85
@pytest .mark .parametrize ('slug' , slugs )
70
- def test_drag_up (adminpage , slug , direction , chapter ):
71
- inline_locator = adminpage .locator (f'{ chapter } _set-group' )
72
- assert is_fieldset_ordered ( inline_locator . element_handle () , direction )
86
+ def test_drag_up (adminpage , slug , direction , chapter , drag_selector ):
87
+ group_locator = adminpage .locator (f'{ chapter } _set-group' )
88
+ expect_fieldset_is_ordered ( group_locator , direction )
73
89
start_order = get_start_order (direction )
74
- reorder_field = inline_locator .locator (f'{ chapter } _set-5 input._reorder_' )
75
- assert reorder_field . input_value () == str ( start_order + direction * 5 )
76
- drag_handle = inline_locator .locator (f'{ chapter } _set-5 :is(h3, p) ' )
77
- drag_handle .drag_to (inline_locator .locator (f'{ chapter } _set-1' ))
78
- assert inline_locator .locator (f'{ chapter } _set-5 input._reorder_' ). input_value () == str (start_order + direction )
79
- assert inline_locator .locator (f'{ chapter } _set-1 input._reorder_' ). input_value () == str (start_order + direction * 2 )
80
- assert is_fieldset_ordered ( inline_locator . element_handle () , direction )
90
+ expect ( group_locator .locator (f'{ chapter } _set-5 input._reorder_' )). to_have_value ( str ( start_order + direction * 5 ) )
91
+ drag_kwargs = { 'source_position' : { 'x' : 200 , 'y' : 10 }, 'target_position' : { 'x' : 200 , 'y' : 10 }}
92
+ drag_handle = group_locator .locator (f'{ chapter } _set-5 { drag_selector } ' )
93
+ drag_handle .drag_to (group_locator .locator (f'{ chapter } _set-1' ), ** drag_kwargs )
94
+ expect ( group_locator .locator (f'{ chapter } _set-5 input._reorder_' )). to_have_value ( str (start_order + direction ) )
95
+ expect ( group_locator .locator (f'{ chapter } _set-1 input._reorder_' )). to_have_value ( str (start_order + direction * 2 ) )
96
+ expect_fieldset_is_ordered ( group_locator , direction )
81
97
82
98
83
99
@pytest .mark .parametrize ('slug' , ['book1' , 'book2' , 'book5' ])
84
- def test_move_end (adminpage , slug , direction , chapter ):
100
+ def test_move_end (adminpage , slug , direction , chapter , drag_selector ):
85
101
inline_locator = adminpage .locator (f'{ chapter } _set-group' )
86
- assert is_fieldset_ordered (inline_locator . element_handle () , direction )
102
+ expect_fieldset_is_ordered (inline_locator , direction )
87
103
start_order = get_start_order (direction )
88
104
end_order = get_end_order (direction )
89
- assert inline_locator .locator (f'{ chapter } _set-2 input._reorder_' ). input_value () == str (start_order + direction * 2 )
90
- move_end_button = inline_locator .locator (f'{ chapter } _set-2 :is(h3, p) .move-end' ).element_handle ()
105
+ expect ( inline_locator .locator (f'{ chapter } _set-2 input._reorder_' )). to_have_value ( str (start_order + direction * 2 ) )
106
+ move_end_button = inline_locator .locator (f'{ chapter } _set-2 { drag_selector } .move-end' ).element_handle ()
91
107
move_end_button .click ()
92
- assert inline_locator .locator (f'{ chapter } _set-2 input._reorder_' ). input_value () == str (end_order )
93
- assert inline_locator .locator (f'{ chapter } _set-3 input._reorder_' ). input_value () == str (start_order + direction * 2 )
94
- assert is_fieldset_ordered (inline_locator . element_handle () , direction )
108
+ expect ( inline_locator .locator (f'{ chapter } _set-2 input._reorder_' )). to_have_value ( str (end_order ) )
109
+ expect ( inline_locator .locator (f'{ chapter } _set-3 input._reorder_' )). to_have_value ( str (start_order + direction * 2 ) )
110
+ expect_fieldset_is_ordered (inline_locator , direction )
95
111
96
112
97
113
@pytest .mark .parametrize ('slug' , ['book1' , 'book2' , 'book5' ])
98
- def test_move_begin (adminpage , slug , direction , chapter ):
114
+ def test_move_begin (adminpage , slug , direction , chapter , drag_selector ):
99
115
inline_locator = adminpage .locator (f'{ chapter } _set-group' )
100
- assert is_fieldset_ordered (inline_locator . element_handle () , direction )
116
+ expect_fieldset_is_ordered (inline_locator , direction )
101
117
start_order = get_start_order (direction )
102
- assert inline_locator .locator (f'{ chapter } _set-8 input._reorder_' ). input_value () == str (start_order + direction * 8 )
103
- move_end_button = inline_locator .locator (f'{ chapter } _set-8 :is(h3, p) .move-begin' ). element_handle ( )
118
+ expect ( inline_locator .locator (f'{ chapter } _set-8 input._reorder_' )). to_have_value ( str (start_order + direction * 8 ) )
119
+ move_end_button = inline_locator .locator (f'{ chapter } _set-8 { drag_selector } .move-begin' )
104
120
move_end_button .click ()
105
- assert inline_locator .locator (f'{ chapter } _set-8 input._reorder_' ). input_value () == str (start_order )
106
- assert inline_locator .locator (f'{ chapter } _set-3 input._reorder_' ). input_value () == str (start_order + direction * 4 )
107
- assert is_fieldset_ordered (inline_locator . element_handle () , direction )
121
+ expect ( inline_locator .locator (f'{ chapter } _set-8 input._reorder_' )). to_have_value ( str (start_order ) )
122
+ expect ( inline_locator .locator (f'{ chapter } _set-3 input._reorder_' )). to_have_value ( str (start_order + direction * 4 ) )
123
+ expect_fieldset_is_ordered (inline_locator , direction )
0 commit comments