-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_alight.py
146 lines (104 loc) · 3.67 KB
/
test_alight.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
import pytest
from selenium.webdriver.common.keys import Keys
from autocomplete_light import * # noqa
def test_input_simple(browser):
browser.visit('http://localhost:8000')
al = AutocompleteLight(browser, 'input-simple')
# wait until web component has initialized
inpt = retry(al.input)
assert inpt
# box should not have been created yet: it's supposed to be lazy
assert not al.box()
# focus on input however, should create the box and display it
inpt.click()
# however we want to retry due to the async nature of the browser ofc
box = retry(al.box)
assert box
assert not box.get_property('hidden')
# all 4 test choices should be visible
assert retry(lambda: len(al.choices()) == 4)
# de-focus should hide the box
al.defocus()
assert retry(lambda: al.box().get_property('hidden'))
# let's try filtering out a choice
al.type('a')
# should show the box again
assert retry(lambda: not box.get_property('hidden'))
# 3 test choices should be visible
assert retry(lambda: len(al.choices()) == 3)
choices = al.choices()
# let's try some keyboard navigation ...
for i in range(3):
al.type(Keys.DOWN)
assert al.hilight() == choices[i]
# ... all the way back to the top!
al.type(Keys.DOWN)
assert al.hilight() == choices[0]
# and the other way around too ...
for i in range(3):
al.type(Keys.UP)
assert al.hilight() == choices[2 - i]
# ... back to the bottom!
al.type(Keys.UP)
assert al.hilight() == choices[2]
# try enter to select
expected = choices[2].text
al.type(Keys.ENTER)
assert retry(lambda: al.input().get_attribute('value')) == expected
def test_select_simple(browser):
browser.visit('http://localhost:8000')
al = AutocompleteSelect(browser, 'select-simple')
al.assert_selected('aab', 1)
# let's click to remove the selected choice
al.unselect(0)
# this should show the autocomplete input again
assert retry(lambda: not al.alight().get_property('hidden'))
# this should have removed the choice from the deck
assert retry(lambda: not al.selected())
# and emptied the select value
assert retry(lambda: not al.value())
# let's type something in the input then
al.type('a')
# this should create a suggestion box
box = retry(al.box)
assert box
# which should be displayed
assert retry(lambda: not box.get_property('hidden'))
# let's click a choice
al.choices()[2].click()
# should it all be like in the beginning but with this other value
al.assert_selected('abb', 2)
@pytest.mark.parametrize('name', [
'select-multiple',
'select-multiple-local',
])
def test_select_multiple(browser, name):
browser.visit('http://localhost:8000')
al = AutocompleteSelectMultiple(browser, name)
al.assert_selected(('aaa', 0), ('bbb', 3))
# ensure selected choices are hidden
al.focus()
assert not any([
choice.text in ('aaa', 'bbb')
for choice in al.choices()
])
# deselect the first option
al.unselect(0)
al.assert_selected(('bbb', 3))
# type something to select the second option
al.type('a')
# this should create a suggestion box
box = retry(al.box)
assert box
# which should be displayed
assert retry(lambda: not box.get_property('hidden'))
# let's click a choice
al.choices()[2].click()
# should it all be like in the beginning but with this other value
al.assert_selected(('bbb', 3), ('abb', 2))
# ensure selected choices are hidden
al.focus()
assert not any([
choice.text in ('bbb', 'abb')
for choice in al.choices()
])