Skip to content
This repository has been archived by the owner on Jun 3, 2024. It is now read-only.

Commit

Permalink
Add tests for ConfirmDialog without callbacks.
Browse files Browse the repository at this point in the history
  • Loading branch information
T4rk1n committed Aug 13, 2018
1 parent 04779b5 commit 0f96813
Showing 1 changed file with 66 additions and 20 deletions.
86 changes: 66 additions & 20 deletions test/test_integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -639,23 +639,24 @@ def update_text(n):
output = self.wait_for_element_by_css_selector('#output')
self.assertEqual(output.text, '2')

def _test_confirm(self, app, test_name):
def _test_confirm(self, app, test_name, add_callback=True):
count = Value('i', 0)

@app.callback(Output('confirmed', 'children'),
[Input('confirm', 'submit_n_clicks'),
Input('confirm', 'cancel_n_clicks')],
[State('confirm', 'submit_n_clicks_timestamp'),
State('confirm', 'cancel_n_clicks_timestamp')])
def _on_confirmed(submit_n_clicks, cancel_n_clicks,
submit_timestamp, cancel_timestamp):
if not submit_n_clicks and not cancel_n_clicks:
return ''
count.value = submit_n_clicks + cancel_n_clicks
if submit_timestamp > cancel_timestamp:
return 'confirmed'
else:
return 'canceled'
if add_callback:
@app.callback(Output('confirmed', 'children'),
[Input('confirm', 'submit_n_clicks'),
Input('confirm', 'cancel_n_clicks')],
[State('confirm', 'submit_n_clicks_timestamp'),
State('confirm', 'cancel_n_clicks_timestamp')])
def _on_confirmed(submit_n_clicks, cancel_n_clicks,
submit_timestamp, cancel_timestamp):
if not submit_n_clicks and not cancel_n_clicks:
return ''
count.value += 1
if submit_timestamp > cancel_timestamp:
return 'confirmed'
else:
return 'canceled'

self.startServer(app)
self.snapshot(test_name + ' -> initial')
Expand All @@ -664,17 +665,23 @@ def _on_confirmed(submit_n_clicks, cancel_n_clicks,
button.click()
time.sleep(1)
self.driver.switch_to.alert.accept()
self.wait_for_text_to_equal('#confirmed', 'confirmed')
self.snapshot(test_name + ' -> confirmed')

if add_callback:
self.wait_for_text_to_equal('#confirmed', 'confirmed')
self.snapshot(test_name + ' -> confirmed')

button.click()
time.sleep(0.5)
self.driver.switch_to.alert.dismiss()
time.sleep(0.5)
self.wait_for_text_to_equal('#confirmed', 'canceled')
self.snapshot(test_name + ' -> canceled')

self.assertEqual(2, count.value, 'Expected 2 callback but got ' + str(count.value))
if add_callback:
self.wait_for_text_to_equal('#confirmed', 'canceled')
self.snapshot(test_name + ' -> canceled')

if add_callback:
self.assertEqual(2, count.value,
'Expected 2 callback but got ' + str(count.value))

def test_confirm(self):
app = dash.Dash(__name__)
Expand Down Expand Up @@ -704,3 +711,42 @@ def test_confirm_dialog_provider(self):
])

self._test_confirm(app, 'ConfirmDialogProvider')

def test_confirm_without_callback(self):
app = dash.Dash(__name__)
app.layout = html.Div([
dcc.ConfirmDialogProvider(
html.Button('click me', id='button'),
id='confirm', message='Please confirm.'),
html.Div(id='confirmed')
])
self._test_confirm(app, 'ConfirmDialogProviderWithoutCallback',
add_callback=False)

def test_confirm_as_children(self):
app = dash.Dash(__name__)

app.layout = html.Div([
html.Button(id='button', children='Send confirm'),
html.Div(id='confirm-container'),
dcc.Location(id='dummy-location')
])

@app.callback(Output('confirm-container', 'children'),
[Input('button', 'n_clicks')])
def on_click(n_clicks):
if n_clicks:
return dcc.ConfirmDialog(
displayed=True,
id='confirm',
key='confirm-{}'.format(time.time()),
message='Please confirm.')

self.startServer(app)

button = self.wait_for_element_by_css_selector('#button')

button.click()
time.sleep(2)

self.driver.switch_to.alert.accept()

0 comments on commit 0f96813

Please sign in to comment.