Skip to content

Commit

Permalink
Add test for ConfirmDialogProvider.
Browse files Browse the repository at this point in the history
  • Loading branch information
T4rk1n committed Jun 22, 2018
1 parent f8a3b38 commit 21c9079
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 29 deletions.
6 changes: 1 addition & 5 deletions src/components/ConfirmDialogProvider.react.js
Expand Up @@ -8,7 +8,7 @@ import ConfirmDialog from './ConfirmDialog.react'
/**
* Wrap children onClick to send a confirmation dialog.
* You can add a button directly as a children:
* `dcc.ConfirmDialogProvider(dcc.Button('click me', id='btn'), id='confirm')`
* `dcc.ConfirmDialogProvider(html.Button('click me', id='btn'), id='confirm')`
*/
export default class ConfirmDialogProvider extends React.Component {
render() {
Expand Down Expand Up @@ -71,10 +71,6 @@ ConfirmDialogProvider.propTypes = {
* Number of times the popup was canceled.
*/
cancel_n_clicks: PropTypes.number,
/**
* Set to true to send the popup.
*/
send_confirm: PropTypes.bool,
/**
* Is the modal currently displayed.
*/
Expand Down
67 changes: 43 additions & 24 deletions test/test_integration.py
Expand Up @@ -5,6 +5,7 @@
import os
import sys
import time
import multiprocessing
import pandas as pd

import dash
Expand Down Expand Up @@ -529,47 +530,65 @@ def update_graph(n_clicks):
time.sleep(2)
self.snapshot('candlestick - 2 click')

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

app.layout = html.Div([
html.Button(id='button', children='Send confirm', n_clicks=0),
dcc.ConfirmDialog(id='confirm', message='Please confirm.'),
html.Div(id='confirmed')
])

@app.callback(Output('confirm', 'displayed'), [Input('button', 'n_clicks')])
def on_click_confirm(n_clicks):
if n_clicks:
return True
def _test_confirm(self, app, test_name):
count = multiprocessing.Value('i', 0)

@app.callback(Output('confirmed', 'children'),
[Input('confirm', 'n_clicks'), Input('confirm', 'submit_n_clicks'), Input('confirm', 'cancel_n_clicks')],)
def on_confirmed(n_clicks, submit_n_clicks, cancel_n_clicks):
[Input('confirm', 'n_clicks'),
Input('confirm', 'submit_n_clicks'),
Input('confirm', 'cancel_n_clicks')])
def _on_confirmed(n_clicks, submit_n_clicks, cancel_n_clicks):
if not n_clicks:
return
return ''
count.value += 1
if n_clicks == 1:
self.assertEqual(1, submit_n_clicks)
return 'confirmed'
elif n_clicks == 2:
self.assertEqual(1, cancel_n_clicks)
return 'canceled'

self.startServer(app)
self.snapshot(test_name + ' -> initial')
button = self.wait_for_element_by_css_selector('#button')
self.snapshot('confirmation -> initial')
time.sleep(1)

button.click()
time.sleep(1)

self.driver.switch_to.alert.accept()
self.wait_for_text_to_equal('#confirmed', 'confirmed')
self.snapshot(test_name + ' -> confirmed')

self.snapshot('confirmation -> confirmed')

time.sleep(0.2)
button.click()
time.sleep(1)
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))

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

app.layout = html.Div([
html.Button(id='button', children='Send confirm', n_clicks=0),
dcc.ConfirmDialog(id='confirm', message='Please confirm.'),
html.Div(id='confirmed')
])

@app.callback(Output('confirm', 'displayed'), [Input('button', 'n_clicks')])
def on_click_confirm(n_clicks):
if n_clicks:
return True

self._test_confirm(app, 'ConfirmDialog')

def test_confirm_dialog_provider(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.snapshot('confirmation -> canceled')
self._test_confirm(app, 'ConfirmDialogProvider')

0 comments on commit 21c9079

Please sign in to comment.