gradio/test/test_buttons.py
Abubakar Abid 4d5789e905
Allow mounted Gradio apps to work with external / arbitrary authentication providers (#7557)
* add parameter

* format

* add changeset

* docstrings

* changes

* changes

* docs

* mark flaky

* test

* docs

* docs

* push

* docs

* Update guides/01_getting-started/03_sharing-your-app.md

Co-authored-by: Ali Abdalla <ali.si3luwa@gmail.com>

* fix typecheck

* error

---------

Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com>
Co-authored-by: Ali Abdalla <ali.si3luwa@gmail.com>
2024-03-05 12:41:39 -08:00

56 lines
1.9 KiB
Python

from unittest.mock import patch
import pytest
import gradio as gr
class TestClearButton:
def test_clear_event_setup_correctly(self):
with gr.Blocks() as demo:
chatbot = gr.Chatbot([["Hello", "How are you?"]])
with gr.Row():
textbox = gr.Textbox(scale=3, interactive=True)
gr.ClearButton([textbox, chatbot], scale=1)
clear_event_trigger = demo.dependencies.pop()
assert not clear_event_trigger["backend_fn"]
assert clear_event_trigger["js"]
assert clear_event_trigger["outputs"] == [textbox._id, chatbot._id]
def test_clear_event_setup_correctly_with_state(self):
with gr.Blocks() as demo:
chatbot = gr.Chatbot([["Hello", "How are you?"]])
state = gr.State("")
gr.ClearButton([state, chatbot], scale=1)
clear_event_trigger_state = demo.dependencies.pop()
assert clear_event_trigger_state["backend_fn"]
class TestOAuthButtons:
@pytest.mark.flaky
def test_login_button_warns_when_not_on_spaces(self):
with pytest.warns(UserWarning):
with gr.Blocks():
gr.LoginButton()
@pytest.mark.flaky
def test_logout_button_warns_when_not_on_spaces(self):
with pytest.warns(UserWarning):
with gr.Blocks():
gr.LogoutButton()
@patch("gradio.oauth.get_space", lambda: "fake_space")
@patch("gradio.oauth._add_oauth_routes")
def test_login_button_setup_correctly(self, mock_add_oauth_routes):
with gr.Blocks() as demo:
button = gr.LoginButton()
login_event = demo.dependencies[0]
assert login_event["targets"][0][1] == "click"
assert not login_event["backend_fn"] # No Python code
assert login_event["js"] # But JS code instead
assert login_event["inputs"] == [button._id]
assert login_event["outputs"] == []