Skip to content

Commit f4b82d1

Browse files
committed
add tests for persistence in date picker single and range
1 parent cc69b07 commit f4b82d1

File tree

1 file changed

+167
-0
lines changed

1 file changed

+167
-0
lines changed
Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
from datetime import datetime, timedelta
2+
3+
import pytest
4+
import dash
5+
import dash_html_components as html
6+
import dash_core_components as dcc
7+
from dash.dependencies import Input, Output
8+
9+
from selenium.webdriver.common.keys import Keys
10+
from selenium.webdriver.common.action_chains import ActionChains
11+
12+
13+
def test_rdpr001_persisted_dps(dash_dcc):
14+
def send_date_dps(target, date):
15+
(
16+
ActionChains(dash_dcc.driver)
17+
.move_to_element(target)
18+
.pause(0.2)
19+
.click(target)
20+
.send_keys(Keys.END)
21+
.key_down(Keys.SHIFT)
22+
.send_keys(Keys.HOME)
23+
.key_up(Keys.SHIFT)
24+
.send_keys(Keys.DELETE)
25+
.send_keys(str(date))
26+
.send_keys(Keys.ENTER)
27+
).perform()
28+
29+
app = dash.Dash(__name__)
30+
app.layout = html.Div(
31+
[
32+
html.Button("fire callback", id="btn"),
33+
html.Div(
34+
children=[
35+
dcc.DatePickerSingle(
36+
id="dps1",
37+
date=datetime.today(),
38+
persistence=True,
39+
persistence_type="session",
40+
),
41+
html.P("dps1", id="dps1-p"),
42+
html.Div(id="container"),
43+
html.P("dps2", id="dps2-p"),
44+
]
45+
),
46+
]
47+
)
48+
49+
@app.callback(Output("container", "children"), [Input("btn", "n_clicks")])
50+
def update_output(value):
51+
return dcc.DatePickerSingle(
52+
id="dps2",
53+
date=datetime.today(),
54+
persistence=True,
55+
persistence_type="session",
56+
)
57+
58+
@app.callback(Output("dps1-p", "children"), [Input("dps1", "date")])
59+
def display_dps1(value):
60+
return value
61+
62+
@app.callback(Output("dps2-p", "children"), [Input("dps2", "date")])
63+
def display_dps2(value):
64+
return value
65+
66+
dash_dcc.start_server(app)
67+
dps1 = dash_dcc.find_element("#dps1")
68+
dps2 = dash_dcc.find_element("#dps2")
69+
70+
send_date_dps(dps1, "01/01/2020")
71+
dash_dcc.wait_for_text_to_equal("#dps1-p", "2020-01-01")
72+
73+
send_date_dps(dps2, "01/01/2020")
74+
dash_dcc.wait_for_text_to_equal("#dps2-p", "2020-01-01")
75+
76+
dash_dcc.find_element("#btn").click()
77+
78+
dash_dcc.wait_for_text_to_equal("#dps1-p", "2020-01-01")
79+
dash_dcc.wait_for_text_to_equal("#dps2-p", "2020-01-01")
80+
81+
82+
def test_rdpr002_persisted_dpr(dash_dcc):
83+
def send_date_dpr(target, start_date, end_date):
84+
(
85+
ActionChains(dash_dcc.driver)
86+
.move_to_element(target)
87+
.click(target)
88+
.send_keys(Keys.END)
89+
.key_down(Keys.SHIFT)
90+
.send_keys(Keys.HOME)
91+
.key_up(Keys.SHIFT)
92+
.send_keys(str(start_date))
93+
.pause(0.2)
94+
.send_keys(Keys.END)
95+
.key_down(Keys.SHIFT)
96+
.send_keys(Keys.HOME)
97+
.key_up(Keys.SHIFT)
98+
.send_keys(str(end_date))
99+
).perform()
100+
101+
app = dash.Dash(__name__)
102+
app.layout = html.Div(
103+
[
104+
html.Button("fire callback", id="btn"),
105+
html.Div(
106+
children=[
107+
dcc.DatePickerRange(
108+
id="dpr1",
109+
start_date=datetime.today() - timedelta(days=3),
110+
end_date=datetime.today(),
111+
persistence=True,
112+
persistence_type="session",
113+
),
114+
html.P("dpr1", id="dpr1-p-start"),
115+
html.P("dpr1", id="dpr1-p-end"),
116+
html.Div(id="container"),
117+
html.P("dpr2", id="dpr2-p-start"),
118+
html.P("dpr2", id="dpr2-p-end"),
119+
]
120+
),
121+
]
122+
)
123+
124+
@app.callback(Output("container", "children"), [Input("btn", "n_clicks")])
125+
def update_output(value):
126+
return dcc.DatePickerRange(
127+
id="dpr2",
128+
start_date=datetime.today() - timedelta(days=3),
129+
end_date=datetime.today(),
130+
persistence=True,
131+
persistence_type="session",
132+
)
133+
134+
@app.callback(Output("dpr1-p-start", "children"), [Input("dpr1", "start_date")])
135+
def display_dps1(value):
136+
return value
137+
138+
@app.callback(Output("dpr1-p-end", "children"), [Input("dpr1", "end_date")])
139+
def display_dps1(value):
140+
return value
141+
142+
@app.callback(Output("dpr2-p-start", "children"), [Input("dpr2", "start_date")])
143+
def display_dps2(value):
144+
return value
145+
146+
@app.callback(Output("dpr2-p-end", "children"), [Input("dpr2", "end_date")])
147+
def display_dps2(value):
148+
return value
149+
150+
dash_dcc.start_server(app)
151+
dpr1 = dash_dcc.find_element("div#dpr1 div div div div .DateInput_input")
152+
dpr2 = dash_dcc.find_element("div#dpr2 div div div div .DateInput_input")
153+
154+
send_date_dpr(dpr1, "01/01/2020", "01/02/2020")
155+
dash_dcc.wait_for_text_to_equal("#dpr1-p-start", "2020-01-01")
156+
dash_dcc.wait_for_text_to_equal("#dpr1-p-end", "2020-01-02")
157+
158+
send_date_dpr(dpr2, "01/01/2020", "01/02/2020")
159+
dash_dcc.wait_for_text_to_equal("#dpr2-p-start", "2020-01-01")
160+
dash_dcc.wait_for_text_to_equal("#dpr2-p-end", "2020-01-02")
161+
162+
dash_dcc.find_element("#btn").click()
163+
164+
dash_dcc.wait_for_text_to_equal("#dpr1-p-start", "2020-01-01")
165+
dash_dcc.wait_for_text_to_equal("#dpr1-p-end", "2020-01-02")
166+
dash_dcc.wait_for_text_to_equal("#dpr2-p-start", "2020-01-01")
167+
dash_dcc.wait_for_text_to_equal("#dpr2-p-end", "2020-01-02")

0 commit comments

Comments
 (0)