============================= test session starts ==============================
platform darwin -- Python 3.11.14, pytest-9.1.1, pluggy-1.6.0
rootdir: /Users/Mike/Development/git-ext/WebDuck
configfile: pyproject.toml
plugins: asyncio-1.4.0, anyio-4.14.2
asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function
collected 140 items

tests/test_api_admin.py   PASS  test_login_success
.  PASS  test_login_wrong_password
.  PASS  test_login_nonexistent_user
.  PASS  test_create_project
.  PASS  test_create_duplicate_project
.  PASS  test_list_projects
.  PASS  test_delete_project
.  PASS  test_delete_nonexistent_project
.  PASS  test_unauthorized_no_token
.  PASS  test_create_database
.  PASS  test_list_databases
.  PASS  test_delete_database
.  PASS  test_set_database_password
.  PASS  test_list_users
.  PASS  test_create_user
.  PASS  test_delete_user
.  PASS  test_cannot_delete_self
.                                [ 12%]
tests/test_api_db.py   PASS  test_select
.  PASS  test_invalid_sql
.  PASS  test_query_nonexistent_db
.  PASS  test_ddl_and_dml
.  PASS  test_no_project_key_no_password
.  PASS  test_wrong_password
.  PASS  test_password_set_no_header
.  PASS  test_list_tables
.  PASS  test_list_projects
.  PASS  test_list_databases
.                                          [ 19%]
tests/test_auth.py   PASS  test_create_and_verify_user
.  PASS  test_create_duplicate_user
.  PASS  test_verify_wrong_password
.  PASS  test_verify_nonexistent_user
.  PASS  test_user_exists
.  PASS  test_list_users
.  PASS  test_delete_user
.  PASS  test_delete_nonexistent_user
.  PASS  test_jwt_roundtrip
.  PASS  test_jwt_invalid_token
.  PASS  test_users_persist_to_file
.  PASS  test_set_and_verify_password
.  PASS  test_wrong_password
.  PASS  test_read_access_grants_write
.  PASS  test_read_does_not_grant_write
.  PASS  test_nonexistent_project
.                                      [ 30%]
tests/test_config.py   PASS  test_default_config
.  PASS  test_load_nonexistent_returns_defaults
.  PASS  test_save_and_load_roundtrip
.  PASS  test_save_config_serializes_path
.                                                [ 33%]
tests/test_full_api.py   PASS  test_login
.  PASS  test_login_wrong_password
.  PASS  test_login_nonexistent
.  PASS  test_admin_no_token
.  PASS  test_create_projects
.  PASS  test_verify_projects_gui
.  PASS  test_reorder_projects
.  PASS  test_verify_reorder_gui
.  PASS  test_duplicate_project
.  PASS  test_create_databases
.  PASS  test_verify_databases_gui
.  PASS  test_duplicate_database
.  PASS  test_reserved_database_name
.  PASS  test_set_password
.  PASS  test_verify_lock_icon_gui
.  PASS  test_query_no_key_rejected
.  PASS  test_query_wrong_key_rejected
.  PASS  test_query_correct_key
.  PASS  test_open_db_no_password
.  PASS  test_create_table
.  PASS  test_verify_table_gui
.  PASS  test_select_all
.  PASS  test_filtered_query
.  PASS  test_create_view
.  PASS  test_invalid_sql
.  PASS  test_import_csv
.  PASS  test_verify_import_gui
.  PASS  test_export_csv
.  PASS  test_import_nonexistent_file
.  PASS  test_import_parquet
.  PASS  test_verify_parquet_import
.  PASS  test_export_parquet
.  PASS  test_import_nonexistent_parquet
.  PASS  test_import_json
.  PASS  test_verify_json_import
.  PASS  test_export_json
.  PASS  test_import_nonexistent_json
.  PASS  test_list_projects_public
.  PASS  test_list_databases_public
.  PASS  test_delete_database
.  PASS  test_verify_database_deleted_gui
.  PASS  test_delete_project
.  PASS  test_verify_project_deleted_gui
.  PASS  test_delete_remaining
.  PASS  test_health
.  PASS  test_parallel_reads_over_http
.    [ 66%]
tests/test_logging.py   PASS  test_logging_disabled_by_default
.  PASS  test_logging_enabled_creates_file
.  PASS  test_log_query_does_nothing_when_disabled
.  PASS  test_log_query_writes_to_file
.  PASS  test_log_query_error
.  PASS  test_rotation_config
.  PASS  test_get_logger_returns_consistent_instance
.                                            [ 71%]
tests/test_sql_upload.py   PASS  test_all_statements_succeed
.  PASS  test_statement_count
.  PASS  test_tables_created
.  PASS  test_views_created
.  PASS  test_indexes_created
.  PASS  test_sequences_created
.  PASS  test_macros_created
.  PASS  test_custom_types_created
.  PASS  test_employee_count
.  PASS  test_department_count
.  PASS  test_project_count
.  PASS  test_task_count
.  PASS  test_view_query
.  PASS  test_macro_double_value
.  PASS  test_macro_is_high_salary
.  PASS  test_macro_full_name
.  PASS  test_full_script_succeeds
.  PASS  test_all_objects_dropped
.  PASS  test_stop_on_first_error
.  PASS  test_empty_sql_returns_empty
.  PASS  test_whitespace_only_sql
.                           [ 86%]
tests/test_storage.py   PASS  test_list_projects_empty
.  PASS  test_create_and_list_databases
.  PASS  test_create_duplicate_database
.  PASS  test_delete_database
.  PASS  test_delete_nonexistent_database
.  PASS  test_delete_project
.  PASS  test_delete_nonexistent_project
.  PASS  test_execute_query
.  PASS  test_query_nonexistent_database
.  PASS  test_query_syntax_error
.  PASS  test_get_table_info
.  PASS  test_import_export_csv
.  PASS  test_import_export_parquet
.  PASS  test_import_export_json
.  PASS  test_import_parquet_missing_file
.  PASS  test_import_json_missing_file
.  PASS  test_import_data_dispatch
.  PASS  test_detect_format
.  PASS  test_list_projects_finds_dirs
.                                [100%]

  140/140 tests passed

============================= 140 passed in 47.53s =============================
