{"version":1,"defects":{"AdminPagesTest::test_home_page_renders_without_errors":3,"AuthHandlerTest::test_is_client_logged_in_true_with_valid_session":3,"CryptoTest::test_decrypt_corrupted_base64_returns_empty":4,"PluginTest::test_get_admin_color_scheme_css_returns_string":3,"SpreadsheetHandlerTest::test_ajax_load_requires_nonce":3,"SpreadsheetHandlerTest::test_ajax_save_requires_nonce":3,"ClientHandlerTest::test_sanitize_clients_sanitizes_last_login_negative":3},"times":{"AdminPagesTest::test_home_page_renders_without_errors":0.056,"AdminPagesTest::test_clients_page_renders_without_errors":0.036,"AdminPagesTest::test_clients_page_shows_no_clients_message":0.035,"AdminPagesTest::test_clients_page_renders_with_clients":0.042,"AdminPagesTest::test_settings_page_renders_without_errors":0.037,"AdminPagesTest::test_settings_page_contains_form":0.038,"AdminPagesTest::test_settings_page_contains_color_inputs":0.036,"AdminPagesTest::test_settings_page_contains_reset_button":0.039,"AdminPagesTest::test_team_page_renders_without_errors":0.039,"AdminPagesTest::test_smtp_page_renders_without_errors":0.041,"AuthHandlerTest::test_is_client_logged_in_false_when_no_cookies":0.004,"AuthHandlerTest::test_is_client_logged_in_false_when_empty_client_id":0.003,"AuthHandlerTest::test_is_client_logged_in_false_when_invalid_client_id_chars":0.003,"AuthHandlerTest::test_is_client_logged_in_false_when_no_auth_cookie":0.007,"AuthHandlerTest::test_is_client_logged_in_false_when_client_not_exists":0.005,"AuthHandlerTest::test_is_client_logged_in_false_when_nonce_invalid":0.006,"AuthHandlerTest::test_is_client_logged_in_true_with_valid_session":0.007,"AuthHandlerTest::test_get_logged_in_client_returns_null_when_not_logged_in":0.003,"AuthHandlerTest::test_get_logged_in_client_returns_client_data":0.007,"AuthHandlerTest::test_get_logged_in_client_includes_db_id":0.007,"ClientHandlerTest::test_sanitize_clients_returns_empty_for_non_array":0.004,"ClientHandlerTest::test_sanitize_clients_returns_empty_for_empty_array":0.003,"ClientHandlerTest::test_sanitize_clients_sanitizes_fields":0.003,"ClientHandlerTest::test_sanitize_clients_handles_missing_fields":0.003,"ClientHandlerTest::test_sanitize_clients_generates_slug_from_client_id":0.003,"ClientHandlerTest::test_sanitize_clients_preserves_multiple_clients":0.004,"ClientHandlerTest::test_sanitize_clients_sanitizes_email":0.003,"ClientHandlerTest::test_sanitize_clients_valid_email":0.003,"CryptoTest::test_method_constant_is_aes256cbc":0.002,"CryptoTest::test_prefix_constant":0.002,"CryptoTest::test_encrypt_empty_string_returns_empty":0.002,"CryptoTest::test_encrypt_returns_prefixed_string":0.002,"CryptoTest::test_encrypt_already_encrypted_returns_same":0.002,"CryptoTest::test_encrypt_produces_different_ciphertext_each_call":0.002,"CryptoTest::test_encrypt_decrypt_roundtrip with data set \"short\"":0.002,"CryptoTest::test_encrypt_decrypt_roundtrip with data set \"medium\"":0.002,"CryptoTest::test_encrypt_decrypt_roundtrip with data set \"unicode\"":0.002,"CryptoTest::test_encrypt_decrypt_roundtrip with data set \"long\"":0.002,"CryptoTest::test_encrypt_decrypt_roundtrip with data set \"special\"":0.002,"CryptoTest::test_encrypt_decrypt_roundtrip with data set \"whitespace\"":0.002,"CryptoTest::test_decrypt_empty_string_returns_empty":0.002,"CryptoTest::test_decrypt_plain_text_returns_as_is":0.002,"CryptoTest::test_decrypt_garbage_prefixed_returns_empty":0.002,"CryptoTest::test_decrypt_corrupted_base64_returns_empty":0.002,"CryptoTest::test_is_encrypted_true_for_prefixed":0.002,"CryptoTest::test_is_encrypted_false_for_plain":0.002,"CryptoTest::test_is_encrypted_false_for_empty":0.002,"CryptoTest::test_is_encrypted_false_for_non_string":0.002,"CryptoTest::test_is_encrypted_false_for_prefix_in_middle":0.002,"EmailHandlerTest::test_is_smtp_configured_false_when_disabled":0.012,"EmailHandlerTest::test_is_smtp_configured_false_when_no_host":0.016,"EmailHandlerTest::test_is_smtp_configured_false_when_no_username":0.015,"EmailHandlerTest::test_is_smtp_configured_true_when_all_set":0.016,"EmailHandlerTest::test_is_smtp_configured_false_by_default":0.011,"EmailHandlerTest::test_send_credentials_email_returns_false_for_missing_email":0.01,"EmailHandlerTest::test_send_credentials_email_returns_false_for_invalid_email":0.009,"EmailHandlerTest::test_send_credentials_email_returns_false_for_empty_password":0.012,"EmailHandlerTest::test_send_new_files_notification_returns_true_for_empty_files":0.009,"EmailHandlerTest::test_send_new_files_notification_returns_false_for_invalid_email":0.009,"EmailTemplateTest::test_credentials_template_contains_client_name":0.004,"EmailTemplateTest::test_credentials_template_contains_client_id":0.004,"EmailTemplateTest::test_credentials_template_contains_portal_url":0.004,"EmailTemplateTest::test_credentials_template_contains_site_name":0.004,"EmailTemplateTest::test_credentials_template_contains_password":0.004,"EmailTemplateTest::test_credentials_template_is_valid_html":0.004,"EmailTemplateTest::test_credentials_template_escapes_special_chars":0.004,"EmailTemplateTest::test_credentials_template_handles_missing_fields":0.004,"EmailTemplateTest::test_new_files_template_lists_files":0.004,"EmailTemplateTest::test_new_files_template_contains_client_name":0.004,"EmailTemplateTest::test_new_files_template_is_valid_html":0.004,"EmailTemplateTest::test_new_files_template_contains_portal_link":0.004,"EmailTemplateTest::test_new_files_template_escapes_filenames":0.004,"FileHelperTest::test_get_file_icon_returns_svg_for_known_extension with data set \"pdf\"":0.002,"FileHelperTest::test_get_file_icon_returns_svg_for_known_extension with data set \"xlsx\"":0.002,"FileHelperTest::test_get_file_icon_returns_svg_for_known_extension with data set \"xls\"":0.002,"FileHelperTest::test_get_file_icon_returns_svg_for_known_extension with data set \"doc\"":0.002,"FileHelperTest::test_get_file_icon_returns_svg_for_known_extension with data set \"docx\"":0.002,"FileHelperTest::test_get_file_icon_returns_svg_for_known_extension with data set \"png\"":0.002,"FileHelperTest::test_get_file_icon_returns_svg_for_known_extension with data set \"jpg\"":0.002,"FileHelperTest::test_get_file_icon_returns_svg_for_known_extension with data set \"jpeg\"":0.002,"FileHelperTest::test_get_file_icon_returns_svg_for_known_extension with data set \"gif\"":0.002,"FileHelperTest::test_get_file_icon_returns_svg_for_known_extension with data set \"zip\"":0.002,"FileHelperTest::test_get_file_icon_returns_svg_for_known_extension with data set \"rar\"":0.002,"FileHelperTest::test_get_file_icon_returns_default_for_unknown_extension":0.002,"FileHelperTest::test_get_file_icon_case_insensitive":0.002,"FileHelperTest::test_get_file_icon_no_extension":0.002,"FileHelperTest::test_is_viewable_file_returns_true with data set \"pdf\"":0.002,"FileHelperTest::test_is_viewable_file_returns_true with data set \"jpg\"":0.002,"FileHelperTest::test_is_viewable_file_returns_true with data set \"jpeg\"":0.002,"FileHelperTest::test_is_viewable_file_returns_true with data set \"png\"":0.002,"FileHelperTest::test_is_viewable_file_returns_true with data set \"gif\"":0.002,"FileHelperTest::test_is_viewable_file_returns_true with data set \"webp\"":0.002,"FileHelperTest::test_is_viewable_file_returns_true with data set \"PDF\"":0.002,"FileHelperTest::test_is_viewable_file_returns_false with data set \"docx\"":0.002,"FileHelperTest::test_is_viewable_file_returns_false with data set \"xlsx\"":0.002,"FileHelperTest::test_is_viewable_file_returns_false with data set \"zip\"":0.002,"FileHelperTest::test_is_viewable_file_returns_false with data set \"txt\"":0.002,"FileHelperTest::test_is_viewable_file_returns_false with data set \"none\"":0.002,"FileHelperTest::test_is_image_file_returns_true with data set \"jpg\"":0.002,"FileHelperTest::test_is_image_file_returns_true with data set \"jpeg\"":0.002,"FileHelperTest::test_is_image_file_returns_true with data set \"png\"":0.002,"FileHelperTest::test_is_image_file_returns_true with data set \"gif\"":0.002,"FileHelperTest::test_is_image_file_returns_true with data set \"webp\"":0.002,"FileHelperTest::test_is_image_file_returns_false_for_pdf":0.002,"FileHelperTest::test_is_image_file_returns_false_for_docx":0.003,"FileHelperTest::test_normalize_returns_empty_when_key_missing":0.002,"FileHelperTest::test_normalize_single_file_upload":0.002,"FileHelperTest::test_normalize_multi_file_upload":0.002,"FileHelperTest::test_normalize_returns_empty_when_name_not_set":0.002,"FolderHelperTest::test_sanitize_folder_name with data set \"simple\"":0.006,"FolderHelperTest::test_sanitize_folder_name with data set \"with_spaces\"":0.005,"FolderHelperTest::test_sanitize_folder_name with data set \"leading_trailing\"":0.004,"FolderHelperTest::test_sanitize_folder_name with data set \"multiple_spaces\"":0.004,"FolderHelperTest::test_sanitize_folder_name with data set \"hyphens_underscores\"":0.004,"FolderHelperTest::test_sanitize_folder_name with data set \"strips_slashes\"":0.005,"FolderHelperTest::test_sanitize_folder_name with data set \"strips_dots\"":0.004,"FolderHelperTest::test_sanitize_folder_name with data set \"strips_special\"":0.004,"FolderHelperTest::test_sanitize_folder_name with data set \"empty_after_strip\"":0.004,"FolderHelperTest::test_sanitize_folder_name with data set \"empty_input\"":0.005,"FolderHelperTest::test_sanitize_folder_name with data set \"unicode_stripped\"":0.006,"FolderHelperTest::test_sanitize_folder_name with data set \"numbers_only\"":0.006,"FolderHelperTest::test_sanitize_folder_name with data set \"mixed\"":0.006,"FolderHelperTest::test_get_client_folder_structure_nonexistent_dir":0.005,"FolderHelperTest::test_get_folder_meta_root_returns_defaults":0.004,"FolderHelperTest::test_get_folder_meta_missing_returns_defaults":0.007,"FolderHelperTest::test_save_folder_meta_and_retrieve":0.015,"FolderHelperTest::test_save_folder_meta_ignores_root":0.008,"FolderHelperTest::test_save_folder_meta_sanitizes_invalid_color":0.009,"FolderHelperTest::test_save_folder_meta_sanitizes_invalid_icon":0.008,"FolderHelperTest::test_delete_folder_meta":0.009,"FolderHelperTest::test_delete_folder_meta_preserves_other_folders":0.01,"FolderHelperTest::test_delete_folder_meta_no_op_when_not_exists":0.007,"FolderHelperTest::test_save_and_get_file_meta":0.009,"FolderHelperTest::test_save_file_meta_merges":0.009,"FolderHelperTest::test_get_file_meta_missing_returns_empty":0.007,"FolderHelperTest::test_delete_file_meta":0.009,"FolderHelperTest::test_delete_file_meta_no_op_when_not_exists":0.006,"FolderHelperTest::test_render_folder_icon_contains_svg":0.004,"FolderHelperTest::test_render_folder_icon_with_color":0.005,"FolderHelperTest::test_render_folder_icon_unknown_falls_back_to_folder":0.004,"PluginTest::test_capability_constant":0.005,"PluginTest::test_capability_settings_constant":0.005,"PluginTest::test_filevue_version_defined":0.005,"PluginTest::test_filevue_plugin_dir_defined":0.006,"PluginTest::test_filevue_plugin_url_defined":0.009,"PluginTest::test_filevue_plugin_file_defined":0.008,"PluginTest::test_register_roles_creates_portal_manager":0.006,"PluginTest::test_register_roles_creates_portal_contributor":0.006,"PluginTest::test_register_roles_grants_caps_to_administrator":0.008,"PluginTest::test_register_roles_is_idempotent":0.006,"PluginTest::test_get_portal_page_returns_page_with_shortcode":0.034,"PluginTest::test_get_portal_page_returns_null_when_no_page":0.01,"PluginTest::test_is_contributor_no_delete_false_for_admin":0.06,"PluginTest::test_is_user_portal_only_true_for_manager":0.073,"PluginTest::test_is_user_portal_only_true_for_contributor":0.036,"PluginTest::test_is_user_portal_only_false_for_administrator":0.033,"PluginTest::test_is_user_portal_only_false_for_subscriber":0.034,"PluginTest::test_get_admin_color_scheme_css_returns_string":0.003,"PluginTest::test_shortcode_filevue_client_files_registered":0.003,"PortalTest::test_render_shows_login_form_when_not_logged_in":0.005,"PortalTest::test_render_login_form_contains_nonce":0.005,"PortalTest::test_render_login_form_contains_client_id_field":0.005,"PortalTest::test_render_login_form_contains_password_field":0.005,"PortalTest::test_render_shows_error_message_on_failed_login":0.005,"PortalTest::test_render_shows_expired_error":0.005,"PortalTest::test_render_shows_welcome_and_logout_when_logged_in_no_files":0.007,"SettingsPageTest::test_portal_defaults_has_expected_keys":0.008,"SettingsPageTest::test_display_filename_shows_extension_by_default":0.01,"SettingsPageTest::test_display_filename_hides_extension_when_option_on":0.011,"SettingsPageTest::test_display_filename_hides_extension_multiple_dots":0.011,"SettingsPageTest::test_display_filename_no_extension_returns_as_is":0.011,"SettingsPageTest::test_display_filename_empty_string":0.01,"SettingsPageTest::test_get_portal_inline_css_empty_when_all_defaults":0.011,"SettingsPageTest::test_get_portal_inline_css_returns_css_when_custom_btn_bg":0.013,"SettingsPageTest::test_get_portal_inline_css_contains_hover_states":0.013,"SettingsPageTest::test_get_portal_inline_css_contains_radius":0.013,"SettingsPageTest::test_get_portal_inline_css_sanitizes_invalid_hex":0.013,"SettingsPageTest::test_get_portal_inline_css_clamps_radius":0.013,"SettingsPageTest::test_get_portal_inline_css_handles_accent_color":0.013,"SettingsPageTest::test_get_portal_inline_css_handles_short_hex_via_darken":0.013,"SettingsPageTest::test_invalid_hex_falls_back_to_black with data set \"no_hash\"":0.012,"SettingsPageTest::test_invalid_hex_falls_back_to_black with data set \"too_short\"":0.014,"SettingsPageTest::test_invalid_hex_falls_back_to_black with data set \"too_long\"":0.013,"SettingsPageTest::test_invalid_hex_falls_back_to_black with data set \"invalid_char\"":0.013,"SettingsPageTest::test_invalid_hex_falls_back_to_black with data set \"empty\"":0.014,"SettingsPageTest::test_invalid_hex_falls_back_to_black with data set \"word\"":0.015,"SettingsPageTest::test_valid_hex_passes_through with data set \"six_digit\"":0.012,"SettingsPageTest::test_valid_hex_passes_through with data set \"three_digit\"":0.012,"SettingsPageTest::test_valid_hex_passes_through with data set \"uppercase\"":0.012,"SettingsPageTest::test_valid_hex_passes_through with data set \"mixed_case\"":0.013,"SpreadsheetHandlerTest::test_ajax_load_requires_nonce":0.012,"SpreadsheetHandlerTest::test_ajax_save_requires_nonce":0.004,"UninstallTest::test_delete_data_option_defaults_to_false":0.015,"UninstallTest::test_delete_data_option_can_be_enabled":0.016,"UninstallTest::test_all_plugin_options_are_deletable":0.05,"UninstallTest::test_plugin_roles_can_be_removed":0.016,"UninstallTest::test_admin_caps_can_be_removed":0.021,"PluginTest::test_get_admin_color_scheme_css_returns_string_or_false":0.003,"SpreadsheetHandlerTest::test_ajax_load_action_is_registered":0.004,"SpreadsheetHandlerTest::test_ajax_save_action_is_registered":0.004,"SpreadsheetHandlerTest::test_ajax_load_frontend_action_is_registered":0.004,"AuthHandlerTest::test_record_last_login_saves_timestamp":0.008,"AuthHandlerTest::test_record_last_login_ignores_invalid_id":0.007,"AuthHandlerTest::test_get_last_seen_label_never_when_no_login":0.004,"AuthHandlerTest::test_get_last_seen_label_never_when_zero":0.003,"AuthHandlerTest::test_get_last_seen_label_shows_relative_time":0.005,"AuthHandlerTest::test_record_last_login_updates_existing_value":0.009,"ClientHandlerTest::test_sanitize_clients_preserves_last_login":0.003,"ClientHandlerTest::test_sanitize_clients_defaults_last_login_to_zero":0.004,"ClientHandlerTest::test_sanitize_clients_sanitizes_last_login_negative":0.003,"ClientHandlerTest::test_sanitize_clients_sanitizes_last_login_string":0.003,"PluginTest::test_dashboard_glance_returns_items_with_count_zero":0.035,"PluginTest::test_dashboard_glance_singular_with_one_client":0.037,"PluginTest::test_dashboard_glance_plural_with_many_clients":0.036,"PluginTest::test_dashboard_glance_skipped_without_capability":0.034,"PluginTest::test_dashboard_glance_filter_registered":0.003,"PluginTest::test_admin_bar_menu_action_registered":0.003}}