Add tests and fix issues
This commit is contained in:
34
tests/conftest.py
Normal file
34
tests/conftest.py
Normal file
@@ -0,0 +1,34 @@
|
||||
import logging
|
||||
import os
|
||||
|
||||
import pytest
|
||||
from alembic import config
|
||||
from pytest_alembic.config import Config
|
||||
from streamlit.testing.v1 import AppTest
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def setup_database(alembic_runner):
|
||||
logger.info("Running database migrations")
|
||||
alembic_runner.migrate_up_to('heads')
|
||||
yield
|
||||
logger.info("Resetting database")
|
||||
alembic_runner.migrate_down_to('base')
|
||||
|
||||
@pytest.fixture
|
||||
def alembic_config() -> Config:
|
||||
logging.info("Setting up alembic config")
|
||||
alembic_cfg = config.Config(toml_file="pyproject.toml")
|
||||
alembic_cfg.set_main_option("sqlalchemy.url", os.getenv("DATABASE_URL", ""))
|
||||
return Config(alembic_config=alembic_cfg)
|
||||
|
||||
@pytest.fixture
|
||||
def app() -> AppTest:
|
||||
return AppTest.from_file("app/streamlit_app.py")
|
||||
|
||||
def delete_database():
|
||||
file = os.getenv("DATABASE_FILE")
|
||||
if file and os.path.isfile(file):
|
||||
logger.info(f"Deleting database file {file}")
|
||||
os.remove(file)
|
||||
9
tests/pytest.ini
Normal file
9
tests/pytest.ini
Normal file
@@ -0,0 +1,9 @@
|
||||
[pytest]
|
||||
log_cli = 1
|
||||
log_cli_level = INFO
|
||||
log_cli_format = %(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s)
|
||||
log_cli_date_format=%Y-%m-%d %H:%M:%S
|
||||
env =
|
||||
DATABASE_FILE=testdb.sqlite
|
||||
DATABASE_URL=sqlite:///testdb.sqlite?cache=shared
|
||||
|
||||
59
tests/ui/counters_test.py
Normal file
59
tests/ui/counters_test.py
Normal file
@@ -0,0 +1,59 @@
|
||||
import queries.crud
|
||||
from enums import CounterType
|
||||
|
||||
def test_initial_state(app):
|
||||
app.run()
|
||||
assert not app.exception
|
||||
assert not app.error
|
||||
assert len(app.header) == 0 # No counter currently present
|
||||
|
||||
def test_add_counter(app):
|
||||
app.run()
|
||||
|
||||
# Open new counter dialog
|
||||
app.button(key="new_counter_button").click().run()
|
||||
|
||||
# Fill in details and submit
|
||||
app.text_input(key="new_counter_title").set_value("Walk")
|
||||
app.selectbox(key='new_counter_type').select(CounterType.DAILY.name)
|
||||
app.radio(key='new_counter_color_selector').set_value("020122")
|
||||
app.button(key="create_counter_submit_btn").click()
|
||||
app.run()
|
||||
|
||||
assert not app.exception
|
||||
assert not app.error
|
||||
assert len(app.text_input) == 0 # dialog closed, back in the main screen
|
||||
|
||||
# Simulate button listener due to bug https://github.com/streamlit/streamlit/issues/9786
|
||||
queries.crud.create_counter("Walk", CounterType.DAILY, "020122")
|
||||
app.run()
|
||||
|
||||
assert len(app.header) == 1 # A new counter was added
|
||||
assert app.header[0].value == ":material/calendar_clock: Walk"
|
||||
|
||||
def test_remove_counter(app):
|
||||
|
||||
# Create a counter to remove
|
||||
queries.crud.create_counter("Remove me", CounterType.SIMPLE, "020122")
|
||||
|
||||
app.run()
|
||||
|
||||
assert not app.exception
|
||||
assert not app.error
|
||||
assert len(app.header) == 1 # One counter exists
|
||||
|
||||
# Remove the counter
|
||||
app.button("remove_counter_1").click().run()
|
||||
|
||||
# Confirmation
|
||||
assert app.subheader[0].value == 'Are you sure?'
|
||||
app.button(key="remove_counter_submit_btn").click()
|
||||
app.run()
|
||||
|
||||
assert len(app.text_input) == 0 # dialog closed, back in the main screen
|
||||
|
||||
# Simulate button listener due to bug https://github.com/streamlit/streamlit/issues/9786
|
||||
queries.crud.remove_counter(1)
|
||||
app.run()
|
||||
|
||||
assert len(app.header) == 0 # No counter exists
|
||||
Reference in New Issue
Block a user