gabriel / musehub public
refactor BREAKING tests dev
gabriel · 166 days ago · Apr 12, 2026 · Diff

refactor(tests): strip _sectionN suffixes from all test filenames

43 files renamed/deleted, 38 files created with clean names. Conflict pairs merged into single files: - test_migrations.py (was section36 + section53) - test_rate_limiting.py (was section34 + section4) - test_security_hardening.py (was section8 + section82)

sha256:1023a5ce87c517287e801d82ad4243278310d0420cd8d628b253ebdff5caa80b sha
+242 ~12 −417 symbols
sha256:71ffeb57de2965a492414923c46e62ad7384fd8c53657b85edf8a9b5476216b3 snapshot
+242
symbols added
~12
symbols modified
−417
symbols removed
0
dead code introduced
Semantic Changes 671 symbols
~ tests/test_mcp_elicitation_section16.py .py 84 symbols removed
− TestDataIntegrityElicitation class class TestDataIntegrityElicitation L415–443 → moved to tests/test_mcp_elicitation.py
− test_accepted_content_preserved_in_result method async_method test_accepted_content_preserved_in_result L416–424 → moved to tests/test_mcp_elicitation.py
− test_build_form_requested_schema_is_schemas_entry method method test_build_form_requested_schema_is_schemas_entry L436–439 → moved to tests/test_mcp_elicitation.py
− test_build_url_elicitation_id_in_params method method test_build_url_elicitation_id_in_params L441–443 → moved to tests/test_mcp_elicitation.py
− test_declined_action_in_result method async_method test_declined_action_in_result L426–434 → moved to tests/test_mcp_elicitation.py
− TestE2EDawConnectRoute class class TestE2EDawConnectRoute L349–374 → moved to tests/test_mcp_elicitation.py
− test_invalid_daw_slug_returns_404 method async_method test_invalid_daw_slug_returns_404 L350–356 → moved to tests/test_mcp_elicitation.py
− test_unauthenticated_valid_daw_redirects method async_method test_unauthenticated_valid_daw_redirects L358–374 → moved to tests/test_mcp_elicitation.py
− TestE2EElicitationCallbackRoute class class TestE2EElicitationCallbackRoute L301–316 → moved to tests/test_mcp_elicitation.py
− test_callback_accepted_returns_200 method async_method test_callback_accepted_returns_200 L302–308 → moved to tests/test_mcp_elicitation.py
− test_callback_declined_returns_200 method async_method test_callback_declined_returns_200 L310–316 → moved to tests/test_mcp_elicitation.py
− TestE2EPlatformConnectRoute class class TestE2EPlatformConnectRoute L319–346 → moved to tests/test_mcp_elicitation.py
− test_invalid_platform_slug_returns_404 method async_method test_invalid_platform_slug_returns_404 L320–326 → moved to tests/test_mcp_elicitation.py
− test_unauthenticated_valid_platform_redirects method async_method test_unauthenticated_valid_platform_redirects L328–346 → moved to tests/test_mcp_elicitation.py
− TestIntegrationPendingElicitation class class TestIntegrationPendingElicitation L205–245 → moved to tests/test_mcp_elicitation.py
− test_create_pending_stores_future method async_method test_create_pending_stores_future L206–214 → moved to tests/test_mcp_elicitation.py
− test_resolve_already_done_future_returns_false method async_method test_resolve_already_done_future_returns_false L236–245 → moved to tests/test_mcp_elicitation.py
− test_resolve_matching_id_returns_true method async_method test_resolve_matching_id_returns_true L216–225 → moved to tests/test_mcp_elicitation.py
− test_resolve_non_matching_id_returns_false method async_method test_resolve_non_matching_id_returns_false L227–234 → moved to tests/test_mcp_elicitation.py
− TestIntegrationSignalElicitation class class TestIntegrationSignalElicitation L248–295 → moved to tests/test_mcp_elicitation.py
− test_delete_session_cancels_pending_futures method async_method test_delete_session_cancels_pending_futures L286–295 → moved to tests/test_mcp_elicitation.py
− test_signal_no_matching_session_returns_zero method async_method test_signal_no_matching_session_returns_zero L279–284 → moved to tests/test_mcp_elicitation.py
− test_signal_pushes_sse_notification_to_queue method async_method test_signal_pushes_sse_notification_to_queue L262–277 → moved to tests/test_mcp_elicitation.py
− test_signal_resolves_matching_future method async_method test_signal_resolves_matching_future L249–260 → moved to tests/test_mcp_elicitation.py
− TestPerformanceElicitation class class TestPerformanceElicitation L481–508 → moved to tests/test_mcp_elicitation.py
− test_1000_build_form_under_50ms method method test_1000_build_form_under_50ms L482–488 → moved to tests/test_mcp_elicitation.py
− test_1000_build_url_under_50ms method method test_1000_build_url_under_50ms L490–495 → moved to tests/test_mcp_elicitation.py
− test_100_pending_create_and_resolve_under_100ms method async_method test_100_pending_create_and_resolve_under_100ms L497–508 → moved to tests/test_mcp_elicitation.py
− TestSecurityElicitation class class TestSecurityElicitation L449–476 → moved to tests/test_mcp_elicitation.py
− test_callback_unknown_id_does_not_crash method async_method test_callback_unknown_id_does_not_crash L450–457 → moved to tests/test_mcp_elicitation.py
− test_double_resolve_returns_false method async_method test_double_resolve_returns_false L466–476 → moved to tests/test_mcp_elicitation.py
− test_platform_unknown_slug_returns_404_not_500 method async_method test_platform_unknown_slug_returns_404_not_500 L459–464 → moved to tests/test_mcp_elicitation.py
− TestStressElicitation class class TestStressElicitation L380–409 → moved to tests/test_mcp_elicitation.py
− test_50_pending_elicitations_no_collision method async_method test_50_pending_elicitations_no_collision L381–392 → moved to tests/test_mcp_elicitation.py
− test_signal_resolves_across_5_sessions method async_method test_signal_resolves_across_5_sessions L394–409 → moved to tests/test_mcp_elicitation.py
− TestUnitAvailableLists class class TestUnitAvailableLists L169–180 → moved to tests/test_mcp_elicitation.py
− test_available_daw_clouds_non_empty method method test_available_daw_clouds_non_empty L173–174 → moved to tests/test_mcp_elicitation.py
− test_available_platforms_non_empty method method test_available_platforms_non_empty L170–171 → moved to tests/test_mcp_elicitation.py
− test_daw_clouds_are_strings method method test_daw_clouds_are_strings L179–180 → moved to tests/test_mcp_elicitation.py
− test_platforms_are_strings method method test_platforms_are_strings L176–177 → moved to tests/test_mcp_elicitation.py
− TestUnitComposePreferencesSchema class class TestUnitComposePreferencesSchema L183–199 → moved to tests/test_mcp_elicitation.py
− test_schema_has_key_property method method test_schema_has_key_property L188–190 → moved to tests/test_mcp_elicitation.py
− test_schema_has_tempo_bpm_property method method test_schema_has_tempo_bpm_property L192–194 → moved to tests/test_mcp_elicitation.py
− test_schema_is_object_type method method test_schema_is_object_type L184–186 → moved to tests/test_mcp_elicitation.py
− test_tempo_bpm_has_min_max_constraints method method test_tempo_bpm_has_min_max_constraints L196–199 → moved to tests/test_mcp_elicitation.py
− TestUnitElicitationTypesDicts class class TestUnitElicitationTypesDicts L141–166 → moved to tests/test_mcp_elicitation.py
− test_elicitation_action_has_action_field method method test_elicitation_action_has_action_field L142–144 → moved to tests/test_mcp_elicitation.py
− test_elicitation_action_with_content method method test_elicitation_action_with_content L146–148 → moved to tests/test_mcp_elicitation.py
− test_elicitation_request_form_shape method method test_elicitation_request_form_shape L150–157 → moved to tests/test_mcp_elicitation.py
− test_elicitation_request_url_shape method method test_elicitation_request_url_shape L159–166 → moved to tests/test_mcp_elicitation.py
− TestUnitSchemaBuilders class class TestUnitSchemaBuilders L108–138 → moved to tests/test_mcp_elicitation.py
− test_build_form_all_schema_keys method method test_build_form_all_schema_keys L109–115 → moved to tests/test_mcp_elicitation.py
− test_build_form_schema_matches_schemas_dict method method test_build_form_schema_matches_schemas_dict L117–121 → moved to tests/test_mcp_elicitation.py
− test_build_url_auto_generates_id_when_omitted method method test_build_url_auto_generates_id_when_omitted L128–132 → moved to tests/test_mcp_elicitation.py
− test_build_url_caller_supplied_id_preserved method method test_build_url_caller_supplied_id_preserved L123–126 → moved to tests/test_mcp_elicitation.py
− test_build_url_mode_and_url_set method method test_build_url_mode_and_url_set L134–138 → moved to tests/test_mcp_elicitation.py
− anyio_backend function function anyio_backend L92–93 → moved to tests/test_mcp_elicitation.py
− http_client function async_function http_client L97–102 → moved to tests/test_mcp_elicitation.py
− ASGITransport import import ASGITransport L63–63
− AVAILABLE_DAW_CLOUDS import import AVAILABLE_DAW_CLOUDS L69–69
− AVAILABLE_PLATFORMS import import AVAILABLE_PLATFORMS L69–69
− AsyncClient import import AsyncClient L63–63 → moved to tests/test_mcp_elicitation.py
− AsyncSession import import AsyncSession L65–65
− ElicitationAction import import ElicitationAction L67–67
− ElicitationRequest import import ElicitationRequest L67–67 → moved to tests/test_mcp_elicitation.py
− MCPSession import import MCPSession L78–78
− SCHEMAS import import SCHEMAS L69–69
− annotations import import annotations L55–55
− app import import app L68–68 → moved to tests/test_mcp_elicitation.py
− asyncio import import asyncio L57–57
− build_form_elicitation import import build_form_elicitation L69–69
− build_url_elicitation import import build_url_elicitation L69–69
− create_pending_elicitation import import create_pending_elicitation L78–78
− create_session import import create_session L78–78
− daw_cloud_connect_url import import daw_cloud_connect_url L69–69
− delete_session import import delete_session L78–78
− get_type_hints import import get_type_hints L59–59 → moved to tests/test_mcp_elicitation.py
− oauth_connect_url import import oauth_connect_url L69–69 → moved to tests/test_mcp_elicitation.py
− patch import import patch L64–64
− push_to_session import import push_to_session L78–78
− pytest import import pytest L61–61
− pytest_asyncio import import pytest_asyncio L62–62
− resolve_elicitation import import resolve_elicitation L78–78
− time import import time L58–58
~ tests/test_migrations_section36.py .py 85 symbols removed
− TestMigrationDataIntegrity class class TestMigrationDataIntegrity L531–624 → moved to tests/test_migrations.py
− test_musehub_auth_keys_fingerprint_unique_index method method test_musehub_auth_keys_fingerprint_unique_index L588–594 → moved to tests/test_migrations.py
− test_musehub_auth_keys_has_algorithm_column method method test_musehub_auth_keys_has_algorithm_column L571–578 → moved to tests/test_migrations.py
− test_musehub_collaborators_has_identity_handle_column method method test_musehub_collaborators_has_identity_handle_column L596–604 → moved to tests/test_migrations.py
− test_musehub_identities_has_agent_columns method method test_musehub_identities_has_agent_columns L543–551 → moved to tests/test_migrations.py
− test_musehub_identities_has_no_legacy_user_id method method test_musehub_identities_has_no_legacy_user_id L553–560 → moved to tests/test_migrations.py
− test_musehub_issue_comments_has_no_state_refs method method test_musehub_issue_comments_has_no_state_refs L562–569 → moved to tests/test_migrations.py
− test_musehub_repos_has_required_columns method method test_musehub_repos_has_required_columns L534–541 → moved to tests/test_migrations.py
− test_musehub_repos_unique_owner_slug_index_exists method method test_musehub_repos_unique_owner_slug_index_exists L580–586 → moved to tests/test_migrations.py
− test_musehub_snapshot_entries_exists_and_has_key_columns method method test_musehub_snapshot_entries_exists_and_has_key_columns L606–612 → moved to tests/test_migrations.py
− test_sessions_table_exists method method test_sessions_table_exists L620–624 → moved to tests/test_migrations.py
− test_wire_tags_table_exists method method test_wire_tags_table_exists L614–618 → moved to tests/test_migrations.py
− TestMigrationE2E class class TestMigrationE2E L387–457 → moved to tests/test_migrations.py
− test_each_migration_step_is_individually_runnable method method test_each_migration_step_is_individually_runnable L451–457 → moved to tests/test_migrations.py
− test_identity_row_survives_upgrade_chain method method test_identity_row_survives_upgrade_chain L421–449 → moved to tests/test_migrations.py
− test_repo_data_survives_incremental_upgrade method method test_repo_data_survives_incremental_upgrade L390–419 → moved to tests/test_migrations.py
− TestMigrationIntegration class class TestMigrationIntegration L331–379 → moved to tests/test_migrations.py
− test_current_revision_tracked_in_alembic_version method method test_current_revision_tracked_in_alembic_version L341–351 → moved to tests/test_migrations.py
− test_downgrade_then_upgrade_returns_to_head method method test_downgrade_then_upgrade_returns_to_head L367–372 → moved to tests/test_migrations.py
− test_full_downgrade_to_base_then_re_upgrade method method test_full_downgrade_to_base_then_re_upgrade L374–379 → moved to tests/test_migrations.py
− test_legacy_tables_absent_at_head method method test_legacy_tables_absent_at_head L360–365 → moved to tests/test_migrations.py
− test_required_tables_exist_at_head method method test_required_tables_exist_at_head L353–358 → moved to tests/test_migrations.py
− test_upgrade_to_head_succeeds method method test_upgrade_to_head_succeeds L334–339 → moved to tests/test_migrations.py
− TestMigrationPerformance class class TestMigrationPerformance L714–765 → moved to tests/test_migrations.py
− test_index_introspection_under_200ms method method test_index_introspection_under_200ms L756–765 → moved to tests/test_migrations.py
− test_schema_introspection_under_500ms method method test_schema_introspection_under_500ms L747–754 → moved to tests/test_migrations.py
− test_single_step_downgrade_under_5_seconds method method test_single_step_downgrade_under_5_seconds L728–745 → moved to tests/test_migrations.py
− test_single_step_upgrade_under_5_seconds method method test_single_step_upgrade_under_5_seconds L717–726 → moved to tests/test_migrations.py
− TestMigrationSecurity class class TestMigrationSecurity L632–706 → moved to tests/test_migrations.py
− test_downgrade_does_not_expose_dropped_columns method method test_downgrade_does_not_expose_dropped_columns L661–675 → moved to tests/test_migrations.py
− test_legacy_auth_tables_dropped_at_head method method test_legacy_auth_tables_dropped_at_head L635–641 → moved to tests/test_migrations.py
− test_musehub_auth_keys_has_fingerprint_unique_constraint method method test_musehub_auth_keys_has_fingerprint_unique_constraint L643–650 → moved to tests/test_migrations.py
− test_musehub_identities_handle_unique method method test_musehub_identities_handle_unique L652–659 → moved to tests/test_migrations.py
− test_repos_owner_slug_uniqueness_enforced method method test_repos_owner_slug_uniqueness_enforced L677–706 → moved to tests/test_migrations.py
− TestMigrationStress class class TestMigrationStress L465–523 → moved to tests/test_migrations.py
− test_100_identity_inserts_survive_step_cycle method method test_100_identity_inserts_survive_step_cycle L494–523 → moved to tests/test_migrations.py
− test_full_downgrade_completes_under_60_seconds method method test_full_downgrade_completes_under_60_seconds L476–484 → moved to tests/test_migrations.py
− test_full_upgrade_completes_under_60_seconds method method test_full_upgrade_completes_under_60_seconds L468–474 → moved to tests/test_migrations.py
− test_three_consecutive_upgrade_to_head_idempotent method method test_three_consecutive_upgrade_to_head_idempotent L486–492 → moved to tests/test_migrations.py
− TestMigrationUnit class class TestMigrationUnit L238–323 → moved to tests/test_migrations.py
− test_alembic_ini_points_to_correct_script_location method method test_alembic_ini_points_to_correct_script_location L312–318 → moved to tests/test_migrations.py
− test_all_42_migrations_present method method test_all_42_migrations_present L268–271 → moved to tests/test_migrations.py
− test_each_migration_has_upgrade_and_downgrade method method test_each_migration_has_upgrade_and_downgrade L295–310 → moved to tests/test_migrations.py
− test_env_py_imports_all_model_bases method method test_env_py_imports_all_model_bases L320–323 → moved to tests/test_migrations.py
− test_head_revision_is_0042 method method test_head_revision_is_0042 L273–293 → moved to tests/test_migrations.py
− test_revision_chain_is_linear method method test_revision_chain_is_linear L241–266 → moved to tests/test_migrations.py
− _ADMIN_URL variable variable _ADMIN_URL L57–57 → moved to tests/test_migrations.py
− _ALL_REVISIONS variable variable _ALL_REVISIONS L63–70 → moved to tests/test_migrations.py
− _HEAD variable variable _HEAD L71–71 → moved to tests/test_migrations.py
− _LEGACY_TABLES variable variable _LEGACY_TABLES L92–95 → moved to tests/test_migrations.py
− _PERF_TEST_DB variable variable _PERF_TEST_DB L60–60 → moved to tests/test_migrations.py
− _PERF_TEST_URL variable variable _PERF_TEST_URL L61–61 → moved to tests/test_migrations.py
− _PROJECT_ROOT variable variable _PROJECT_ROOT L43–43 → moved to tests/test_migrations.py
− _REQUIRED_TABLES variable variable _REQUIRED_TABLES L76–89 → moved to tests/test_migrations.py
− _TEST_DB variable variable _TEST_DB L55–55 → moved to tests/test_migrations.py
− _TEST_URL variable variable _TEST_URL L56–56 → moved to tests/test_migrations.py
− _columns function async_function _columns L174–183 → moved to tests/test_migrations.py
− _current_rev function function _current_rev L138–148 → moved to tests/test_migrations.py
− _downgrade function function _downgrade L134–135 → moved to tests/test_migrations.py
− _fresh_db function function _fresh_db L186–198 → moved to tests/test_migrations.py
− _indexes_for function async_function _indexes_for L162–171 → moved to tests/test_migrations.py
− _perf_fresh_db function function _perf_fresh_db L201–213 → moved to tests/test_migrations.py
− _raw_db_url variable variable _raw_db_url L49–49 → moved to tests/test_migrations.py
− _run_alembic function function _run_alembic L101–127 → moved to tests/test_migrations.py
− _tables function async_function _tables L151–159 → moved to tests/test_migrations.py
− _upgrade function function _upgrade L130–131 → moved to tests/test_migrations.py
− Any import import Any L33–33
− AsyncConnection import import AsyncConnection L39–39
− AsyncEngine import import AsyncEngine L39–39
− AsyncGenerator import import AsyncGenerator L32–32
− Generator import import Generator L32–32 → moved to tests/test_migrations.py
− NullPool import import NullPool L40–40 → moved to tests/test_migrations.py
− _urlparse import import _urlparse L34–34 → moved to tests/test_migrations.py
− annotations import import annotations L25–25
− asyncio import import asyncio L27–27 → moved to tests/test_migrations.py
− create_async_engine import import create_async_engine L39–39 → moved to tests/test_migrations.py
− inspect import import inspect L38–38
− os import import os L28–28
− pathlib import import pathlib L29–29
− pytest import import pytest L36–36
− pytest_asyncio import import pytest_asyncio L37–37
− text import import text L38–38 → moved to tests/test_migrations.py
− time import import time L30–30
− uuid import import uuid L31–31
− migrated_engine function function migrated_engine L220–230 → moved to tests/test_migrations.py
~ tests/test_object_store_section52.py .py 24 symbols removed
− _add_object function async_function _add_object L35–55 → moved to tests/test_object_store.py
− _sha256_id function function _sha256_id L31–32
− AsyncMock import import AsyncMock L18–18
− AsyncSession import import AsyncSession L21–21 → moved to tests/test_mcp_elicitation.py
− MagicMock import import MagicMock L18–18
− Path import import Path L17–17
− _MusehubObject import import _MusehubObject L23–23 → moved to tests/test_object_store.py
− annotations import import annotations L12–12
− create_repo import import create_repo L24–24
− hashlib import import hashlib L14–14
− patch import import patch L18–18
− pytest import import pytest L20–20
− stat import import stat L15–15 → moved to tests/test_object_store.py
− tempfile import import tempfile L16–16 → moved to tests/test_object_store.py
− test_integrity_scan_clean function async_function test_integrity_scan_clean L101–118 → moved to tests/test_object_store.py
− test_integrity_scan_detects_hash_mismatch function async_function test_integrity_scan_detects_hash_mismatch L150–169 → moved to tests/test_object_store.py
− test_integrity_scan_detects_missing_object function async_function test_integrity_scan_detects_missing_object L125–143 → moved to tests/test_object_store.py
− test_local_backend_write_sets_readonly function function test_local_backend_write_sets_readonly L62–78 → moved to tests/test_object_store.py
− test_local_backend_write_skips_existing_file function function test_local_backend_write_skips_existing_file L81–94 → moved to tests/test_object_store.py
− test_reaper_removes_objects_past_retention function async_function test_reaper_removes_objects_past_retention L206–235 → moved to tests/test_object_store.py
− test_reaper_spares_objects_within_retention function async_function test_reaper_spares_objects_within_retention L238–262 → moved to tests/test_object_store.py
− test_soft_delete_sets_deleted_at function async_function test_soft_delete_sets_deleted_at L176–192 → moved to tests/test_object_store.py
− test_soft_delete_unknown_object_returns_false function async_function test_soft_delete_unknown_object_returns_false L195–199 → moved to tests/test_object_store.py
− test_wire_push_rejects_when_repo_quota_exceeded function async_function test_wire_push_rejects_when_repo_quota_exceeded L269–298 → moved to tests/test_object_store.py
~ tests/test_rate_limiting_section4.py .py 18 symbols removed
− AsyncClient import import AsyncClient L5–5
− annotations import import annotations L2–2
− pytest import import pytest L4–4
− test_api_search_rate_limited_on_429 function async_function test_api_search_rate_limited_on_429 L37–44 → moved to tests/test_rate_limiting.py
− test_auth_limit_is_strict function function test_auth_limit_is_strict L24–32 → moved to tests/test_rate_limiting.py
− test_bot_ua_scrapy_is_blocked_on_write function async_function test_bot_ua_scrapy_is_blocked_on_write L123–134 → moved to tests/test_rate_limiting.py
− test_bot_ua_sqlmap_is_blocked_on_write function async_function test_bot_ua_sqlmap_is_blocked_on_write L147–154 → moved to tests/test_rate_limiting.py
− test_bot_ua_wget_is_blocked_on_write function async_function test_bot_ua_wget_is_blocked_on_write L137–144 → moved to tests/test_rate_limiting.py
− test_global_rate_limit_configured function function test_global_rate_limit_configured L10–19 → moved to tests/test_rate_limiting.py
− test_healthz_exempt_from_bot_check function async_function test_healthz_exempt_from_bot_check L184–188 → moved to tests/test_rate_limiting.py
− test_legitimate_browser_ua_passes function async_function test_legitimate_browser_ua_passes L166–172 → moved to tests/test_rate_limiting.py
− test_missing_ua_post_non_cdn_path_is_blocked function async_function test_missing_ua_post_non_cdn_path_is_blocked L157–163 → moved to tests/test_rate_limiting.py
− test_muse_cli_ua_passes function async_function test_muse_cli_ua_passes L175–181 → moved to tests/test_rate_limiting.py
− test_object_download_has_rate_limit_decorator function function test_object_download_has_rate_limit_decorator L75–84 → moved to tests/test_rate_limiting.py
− test_retry_after_added_to_429 function function test_retry_after_added_to_429 L89–118 → moved to tests/test_rate_limiting.py
− test_search_routes_have_rate_limit_decorator function function test_search_routes_have_rate_limit_decorator L47–70 → moved to tests/test_rate_limiting.py
− test_webhook_backoff_configured function function test_webhook_backoff_configured L203–209 → moved to tests/test_rate_limiting.py
− test_webhook_max_attempts_capped function function test_webhook_max_attempts_capped L193–200 → moved to tests/test_rate_limiting.py
− TestCommitIdForgery class class TestCommitIdForgery L370–433 → moved to tests/test_security_hardening.py
− test_require_signed_commits_setting_exists method method test_require_signed_commits_setting_exists L371–375 → moved to tests/test_security_hardening.py
− test_wire_push_enforces_when_setting_true method method test_wire_push_enforces_when_setting_true L377–385 → moved to tests/test_security_hardening.py
− test_wire_push_rejects_unsigned_when_enforcement_on method async_method test_wire_push_rejects_unsigned_when_enforcement_on L387–414 → moved to tests/test_security_hardening.py
− test_wire_push_source_has_unsigned_warning_not_rejection method method test_wire_push_source_has_unsigned_warning_not_rejection L416–433 → moved to tests/test_security_hardening.py
− TestMassAssignment class class TestMassAssignment L217–254 → moved to tests/test_security_hardening.py
− _route_files method method _route_files L218–219 → moved to tests/test_security_hardening.py
− test_no_kwargs_splat_from_request_body method method test_no_kwargs_splat_from_request_body L221–234 → moved to tests/test_security_hardening.py
− test_route_handler_body_params_are_pydantic_or_primitive method method test_route_handler_body_params_are_pydantic_or_primitive L236–248 → moved to tests/test_security_hardening.py
− test_webhook_create_uses_pydantic_not_raw_dict method method test_webhook_create_uses_pydantic_not_raw_dict L250–254 → moved to tests/test_security_hardening.py
− TestObjectEnumeration class class TestObjectEnumeration L307–363 → moved to tests/test_security_hardening.py
− _db_models_src method method _db_models_src L308–309 → moved to tests/test_security_hardening.py
− test_issue_number_is_per_repo_not_global method method test_issue_number_is_per_repo_not_global L334–342 → moved to tests/test_security_hardening.py
− test_issue_primary_key_is_uuid_string method method test_issue_primary_key_is_uuid_string L326–332 → moved to tests/test_security_hardening.py
− test_no_autoincrement_primary_keys_on_main_entities method method test_no_autoincrement_primary_keys_on_main_entities L344–363 → moved to tests/test_security_hardening.py
− test_repo_primary_key_is_uuid_string method method test_repo_primary_key_is_uuid_string L311–324 → moved to tests/test_security_hardening.py
− TestRegexDos class class TestRegexDos L440–494 → moved to tests/test_security_hardening.py
− _search_service_src method method _search_service_src L441–442 → moved to tests/test_security_hardening.py
− test_global_search_uses_sql_or_python_in method method test_global_search_uses_sql_or_python_in L485–494 → moved to tests/test_security_hardening.py
− test_no_user_supplied_regex_in_search_routes method method test_no_user_supplied_regex_in_search_routes L477–483 → moved to tests/test_security_hardening.py
− test_search_by_ask_uses_fixed_tokenizer_not_user_regex method method test_search_by_ask_uses_fixed_tokenizer_not_user_regex L462–475 → moved to tests/test_security_hardening.py
− test_search_by_pattern_uses_python_in_not_regex method method test_search_by_pattern_uses_python_in_not_regex L444–460 → moved to tests/test_security_hardening.py
− TestSsrfCheckUrlSafe class class TestSsrfCheckUrlSafe L36–92 → moved to tests/test_security_hardening.py
− _check method method _check L37–39 → moved to tests/test_security_hardening.py
− test_empty_string_blocked method method test_empty_string_blocked L90–92 → moved to tests/test_security_hardening.py
− test_file_scheme_blocked method method test_file_scheme_blocked L53–55 → moved to tests/test_security_hardening.py
− test_ftp_scheme_blocked method method test_ftp_scheme_blocked L49–51 → moved to tests/test_security_hardening.py
− test_hostname_with_path_allowed method method test_hostname_with_path_allowed L82–84 → moved to tests/test_security_hardening.py
− test_http_scheme_blocked method method test_http_scheme_blocked L45–47 → moved to tests/test_security_hardening.py
− test_https_public_url_allowed method method test_https_public_url_allowed L41–43 → moved to tests/test_security_hardening.py
− test_link_local_169_254_blocked method method test_link_local_169_254_blocked L77–80 → moved to tests/test_security_hardening.py
− test_loopback_127_blocked method method test_loopback_127_blocked L57–59 → moved to tests/test_security_hardening.py
− test_loopback_127_other_blocked method method test_loopback_127_other_blocked L61–63 → moved to tests/test_security_hardening.py
− test_no_hostname_blocked method method test_no_hostname_blocked L86–88 → moved to tests/test_security_hardening.py
− test_rfc1918_10_blocked method method test_rfc1918_10_blocked L65–67 → moved to tests/test_security_hardening.py
− test_rfc1918_172_16_blocked method method test_rfc1918_172_16_blocked L69–71 → moved to tests/test_security_hardening.py
− test_rfc1918_192_168_blocked method method test_rfc1918_192_168_blocked L73–75 → moved to tests/test_security_hardening.py
− TestSsrfValidateOutboundUrl class class TestSsrfValidateOutboundUrl L99–141 → moved to tests/test_security_hardening.py
− test_bare_ip_does_not_do_dns method async_method test_bare_ip_does_not_do_dns L134–141 → moved to tests/test_security_hardening.py
− test_dns_resolves_to_loopback_blocked method async_method test_dns_resolves_to_loopback_blocked L118–124 → moved to tests/test_security_hardening.py
− test_dns_resolves_to_private_blocked method async_method test_dns_resolves_to_private_blocked L109–116 → moved to tests/test_security_hardening.py
− test_public_hostname_allowed method async_method test_public_hostname_allowed L100–107 → moved to tests/test_security_hardening.py
− test_unresolvable_hostname_blocked method async_method test_unresolvable_hostname_blocked L126–132 → moved to tests/test_security_hardening.py
− TestTarBomb class class TestTarBomb L501–516 → moved to tests/test_security_hardening.py
− test_no_archive_extraction_in_codebase method method test_no_archive_extraction_in_codebase L502–516 → moved to tests/test_security_hardening.py
− TestTimingAttacks class class TestTimingAttacks L261–300 → moved to tests/test_security_hardening.py
− test_compare_digest_used_not_equal_for_secrets method method test_compare_digest_used_not_equal_for_secrets L279–300 → moved to tests/test_security_hardening.py
− test_crypto_keys_uses_compare_digest method method test_crypto_keys_uses_compare_digest L273–277 → moved to tests/test_security_hardening.py
− test_request_signing_uses_cryptographic_verify method method test_request_signing_uses_cryptographic_verify L262–271 → moved to tests/test_security_hardening.py
− TestWebhookCreateSsrf class class TestWebhookCreateSsrf L148–175 → moved to tests/test_security_hardening.py
− _create method method _create L149–151 → moved to tests/test_security_hardening.py
− test_aws_metadata_endpoint_rejected method method test_aws_metadata_endpoint_rejected L172–175 → moved to tests/test_security_hardening.py
− test_http_rejected_at_model_parse method method test_http_rejected_at_model_parse L157–160 → moved to tests/test_security_hardening.py
− test_https_public_accepted method method test_https_public_accepted L153–155 → moved to tests/test_security_hardening.py
− test_loopback_rejected_at_model_parse method method test_loopback_rejected_at_model_parse L167–170 → moved to tests/test_security_hardening.py
− test_rfc1918_rejected_at_model_parse method method test_rfc1918_rejected_at_model_parse L162–165 → moved to tests/test_security_hardening.py
− TestWebhookDeliveryDefenseInDepth class class TestWebhookDeliveryDefenseInDepth L182–210 → moved to tests/test_security_hardening.py
− test_delivery_blocked_when_ssrf_check_fails method async_method test_delivery_blocked_when_ssrf_check_fails L183–204 → moved to tests/test_security_hardening.py
− test_dispatcher_imports_ssrf_module method method test_dispatcher_imports_ssrf_module L206–210 → moved to tests/test_security_hardening.py
− _CONFIG variable variable _CONFIG L29–29
− _DISPATCHER variable variable _DISPATCHER L27–27
− _MUSEHUB_PKG variable variable _MUSEHUB_PKG L24–24
− _ROOT variable variable _ROOT L23–23
− _SSRF_MODULE variable variable _SSRF_MODULE L25–25 → moved to tests/test_security_hardening.py
− _WEBHOOK_MODEL variable variable _WEBHOOK_MODEL L26–26 → moved to tests/test_security_hardening.py
− _WIRE_SVC variable variable _WIRE_SVC L28–28
− AsyncMock import import AsyncMock L19–19
− MagicMock import import MagicMock L19–19
− Path import import Path L18–18
− annotations import import annotations L14–14
− ast import import ast L16–16 → moved to tests/test_security_hardening.py
− patch import import patch L19–19
− pytest import import pytest L21–21
− re import import re L17–17
~ tests/test_mcp_elicitation.py .py 69 symbols added, 42 symbols removed, 12 symbols modified
− AsyncMock import import AsyncMock L34–34
− MagicMock import import MagicMock L34–34 → moved to tests/test_object_store.py
− PROMPT_CATALOGUE import import PROMPT_CATALOGUE L46–46
− ToolCallContext import import ToolCallContext L38–38
− cancel_elicitation import import cancel_elicitation L47–47
− get_prompt import import get_prompt L46–46
− json import import json L33–33
− sse_event import import sse_event L56–56
− sse_notification import import sse_notification L56–56
− sse_request import import sse_request L56–56
− sse_response import import sse_response L56–56
− test_build_form_elicitation function function test_build_form_elicitation L144–150
− test_build_form_elicitation_unknown_key_raises function function test_build_form_elicitation_unknown_key_raises L153–156
− test_build_url_elicitation function function test_build_url_elicitation L159–166
− test_build_url_elicitation_stable_id function function test_build_url_elicitation_stable_id L169–175
− test_compose_preferences_schema_required_fields function function test_compose_preferences_schema_required_fields L133–141
− test_create_release_interactive_bypass_tag_only function async_function test_create_release_interactive_bypass_tag_only L446–463
− test_create_release_interactive_no_session_no_params function async_function test_create_release_interactive_no_session_no_params L324–333
− test_daw_cloud_connect_url_format function function test_daw_cloud_connect_url_format L186–190
− test_elicit_form_accepted_returns_content function async_function test_elicit_form_accepted_returns_content L203–221
− test_elicit_form_declined_returns_none function async_function test_elicit_form_declined_returns_none L224–239
− test_elicit_form_no_form_capability_returns_none function async_function test_elicit_form_no_form_capability_returns_none L242–248
− test_elicit_form_no_session_returns_none function async_function test_elicit_form_no_session_returns_none L196–200
− test_elicit_url_accepted_returns_true function async_function test_elicit_url_accepted_returns_true L261–276
− test_elicit_url_no_session_returns_false function async_function test_elicit_url_no_session_returns_false L254–258
− test_notifications_cancelled_handled function async_function test_notifications_cancelled_handled L360–369
− test_notifications_cancelled_resolves_future function async_function test_notifications_cancelled_resolves_future L384–401
− test_notifications_elicitation_complete_handled function async_function test_notifications_elicitation_complete_handled L372–381
− test_oauth_connect_url_format function function test_oauth_connect_url_format L178–183
− test_onboard_prompt_assembles function function test_onboard_prompt_assembles L339–348
− test_onboard_prompt_in_catalogue function function test_onboard_prompt_in_catalogue L351–354
− test_progress_no_session_is_noop function async_function test_progress_no_session_is_noop L282–285
− test_progress_with_session_pushes_sse_event function async_function test_progress_with_session_pushes_sse_event L288–306
− test_review_proposal_interactive_bypass_dimension_and_depth function async_function test_review_proposal_interactive_bypass_dimension_and_depth L407–426
− test_review_proposal_interactive_bypass_dimension_only function async_function test_review_proposal_interactive_bypass_dimension_only L429–443
− test_review_proposal_interactive_no_session function async_function test_review_proposal_interactive_no_session L312–321
− test_schemas_has_all_expected_keys function function test_schemas_has_all_expected_keys L121–130
− test_sse_event_basic_format function function test_sse_event_basic_format L67–75
− test_sse_event_with_id_and_type function function test_sse_event_with_id_and_type L78–82
− test_sse_notification_format function function test_sse_notification_format L85–93
− test_sse_request_format function function test_sse_request_format L96–104
− test_sse_response_format function function test_sse_response_format L107–115
+ TestDataIntegrityElicitation class class TestDataIntegrityElicitation L415–443 ← moved from tests/test_mcp_elicitation_section16.py
+ test_accepted_content_preserved_in_result method async_method test_accepted_content_preserved_in_result L416–424 ← moved from tests/test_mcp_elicitation_section16.py
+ test_build_form_requested_schema_is_schemas_entry method method test_build_form_requested_schema_is_schemas_entry L436–439 ← moved from tests/test_mcp_elicitation_section16.py
+ test_build_url_elicitation_id_in_params method method test_build_url_elicitation_id_in_params L441–443 ← moved from tests/test_mcp_elicitation_section16.py
+ test_declined_action_in_result method async_method test_declined_action_in_result L426–434 ← moved from tests/test_mcp_elicitation_section16.py
+ TestE2EDawConnectRoute class class TestE2EDawConnectRoute L349–374 ← moved from tests/test_mcp_elicitation_section16.py
+ test_invalid_daw_slug_returns_404 method async_method test_invalid_daw_slug_returns_404 L350–356 ← moved from tests/test_mcp_elicitation_section16.py
+ test_unauthenticated_valid_daw_redirects method async_method test_unauthenticated_valid_daw_redirects L358–374 ← moved from tests/test_mcp_elicitation_section16.py
+ TestE2EElicitationCallbackRoute class class TestE2EElicitationCallbackRoute L301–316 ← moved from tests/test_mcp_elicitation_section16.py
+ test_callback_accepted_returns_200 method async_method test_callback_accepted_returns_200 L302–308 ← moved from tests/test_mcp_elicitation_section16.py
+ test_callback_declined_returns_200 method async_method test_callback_declined_returns_200 L310–316 ← moved from tests/test_mcp_elicitation_section16.py
+ TestE2EPlatformConnectRoute class class TestE2EPlatformConnectRoute L319–346 ← moved from tests/test_mcp_elicitation_section16.py
+ test_invalid_platform_slug_returns_404 method async_method test_invalid_platform_slug_returns_404 L320–326 ← moved from tests/test_mcp_elicitation_section16.py
+ test_unauthenticated_valid_platform_redirects method async_method test_unauthenticated_valid_platform_redirects L328–346 ← moved from tests/test_mcp_elicitation_section16.py
+ TestIntegrationPendingElicitation class class TestIntegrationPendingElicitation L205–245 ← moved from tests/test_mcp_elicitation_section16.py
+ test_create_pending_stores_future method async_method test_create_pending_stores_future L206–214 ← moved from tests/test_mcp_elicitation_section16.py
+ test_resolve_already_done_future_returns_false method async_method test_resolve_already_done_future_returns_false L236–245 ← moved from tests/test_mcp_elicitation_section16.py
+ test_resolve_matching_id_returns_true method async_method test_resolve_matching_id_returns_true L216–225 ← moved from tests/test_mcp_elicitation_section16.py
+ test_resolve_non_matching_id_returns_false method async_method test_resolve_non_matching_id_returns_false L227–234 ← moved from tests/test_mcp_elicitation_section16.py
+ TestIntegrationSignalElicitation class class TestIntegrationSignalElicitation L248–295 ← moved from tests/test_mcp_elicitation_section16.py
+ test_delete_session_cancels_pending_futures method async_method test_delete_session_cancels_pending_futures L286–295 ← moved from tests/test_mcp_elicitation_section16.py
+ test_signal_no_matching_session_returns_zero method async_method test_signal_no_matching_session_returns_zero L279–284 ← moved from tests/test_mcp_elicitation_section16.py
+ test_signal_pushes_sse_notification_to_queue method async_method test_signal_pushes_sse_notification_to_queue L262–277 ← moved from tests/test_mcp_elicitation_section16.py
+ test_signal_resolves_matching_future method async_method test_signal_resolves_matching_future L249–260 ← moved from tests/test_mcp_elicitation_section16.py
+ TestPerformanceElicitation class class TestPerformanceElicitation L481–508 ← moved from tests/test_mcp_elicitation_section16.py
+ test_1000_build_form_under_50ms method method test_1000_build_form_under_50ms L482–488 ← moved from tests/test_mcp_elicitation_section16.py
+ test_1000_build_url_under_50ms method method test_1000_build_url_under_50ms L490–495 ← moved from tests/test_mcp_elicitation_section16.py
+ test_100_pending_create_and_resolve_under_100ms method async_method test_100_pending_create_and_resolve_under_100ms L497–508 ← moved from tests/test_mcp_elicitation_section16.py
+ TestSecurityElicitation class class TestSecurityElicitation L449–476 ← moved from tests/test_mcp_elicitation_section16.py
+ test_callback_unknown_id_does_not_crash method async_method test_callback_unknown_id_does_not_crash L450–457 ← moved from tests/test_mcp_elicitation_section16.py
+ test_double_resolve_returns_false method async_method test_double_resolve_returns_false L466–476 ← moved from tests/test_mcp_elicitation_section16.py
+ test_platform_unknown_slug_returns_404_not_500 method async_method test_platform_unknown_slug_returns_404_not_500 L459–464 ← moved from tests/test_mcp_elicitation_section16.py
+ TestStressElicitation class class TestStressElicitation L380–409 ← moved from tests/test_mcp_elicitation_section16.py
+ test_50_pending_elicitations_no_collision method async_method test_50_pending_elicitations_no_collision L381–392 ← moved from tests/test_mcp_elicitation_section16.py
+ test_signal_resolves_across_5_sessions method async_method test_signal_resolves_across_5_sessions L394–409 ← moved from tests/test_mcp_elicitation_section16.py
+ TestUnitAvailableLists class class TestUnitAvailableLists L169–180 ← moved from tests/test_mcp_elicitation_section16.py
+ test_available_daw_clouds_non_empty method method test_available_daw_clouds_non_empty L173–174 ← moved from tests/test_mcp_elicitation_section16.py
+ test_available_platforms_non_empty method method test_available_platforms_non_empty L170–171 ← moved from tests/test_mcp_elicitation_section16.py
+ test_daw_clouds_are_strings method method test_daw_clouds_are_strings L179–180 ← moved from tests/test_mcp_elicitation_section16.py
+ test_platforms_are_strings method method test_platforms_are_strings L176–177 ← moved from tests/test_mcp_elicitation_section16.py
+ TestUnitComposePreferencesSchema class class TestUnitComposePreferencesSchema L183–199 ← moved from tests/test_mcp_elicitation_section16.py
+ test_schema_has_key_property method method test_schema_has_key_property L188–190 ← moved from tests/test_mcp_elicitation_section16.py
+ test_schema_has_tempo_bpm_property method method test_schema_has_tempo_bpm_property L192–194 ← moved from tests/test_mcp_elicitation_section16.py
+ test_schema_is_object_type method method test_schema_is_object_type L184–186 ← moved from tests/test_mcp_elicitation_section16.py
+ test_tempo_bpm_has_min_max_constraints method method test_tempo_bpm_has_min_max_constraints L196–199 ← moved from tests/test_mcp_elicitation_section16.py
+ TestUnitElicitationTypesDicts class class TestUnitElicitationTypesDicts L141–166 ← moved from tests/test_mcp_elicitation_section16.py
+ test_elicitation_action_has_action_field method method test_elicitation_action_has_action_field L142–144 ← moved from tests/test_mcp_elicitation_section16.py
+ test_elicitation_action_with_content method method test_elicitation_action_with_content L146–148 ← moved from tests/test_mcp_elicitation_section16.py
+ test_elicitation_request_form_shape method method test_elicitation_request_form_shape L150–157 ← moved from tests/test_mcp_elicitation_section16.py
+ test_elicitation_request_url_shape method method test_elicitation_request_url_shape L159–166 ← moved from tests/test_mcp_elicitation_section16.py
+ TestUnitSchemaBuilders class class TestUnitSchemaBuilders L108–138 ← moved from tests/test_mcp_elicitation_section16.py
+ test_build_form_all_schema_keys method method test_build_form_all_schema_keys L109–115 ← moved from tests/test_mcp_elicitation_section16.py
+ test_build_form_schema_matches_schemas_dict method method test_build_form_schema_matches_schemas_dict L117–121 ← moved from tests/test_mcp_elicitation_section16.py
+ test_build_url_auto_generates_id_when_omitted method method test_build_url_auto_generates_id_when_omitted L128–132 ← moved from tests/test_mcp_elicitation_section16.py
+ test_build_url_caller_supplied_id_preserved method method test_build_url_caller_supplied_id_preserved L123–126 ← moved from tests/test_mcp_elicitation_section16.py
+ test_build_url_mode_and_url_set method method test_build_url_mode_and_url_set L134–138 ← moved from tests/test_mcp_elicitation_section16.py
+ anyio_backend function function anyio_backend L92–93 ← moved from tests/test_mcp_elicitation_section16.py
+ http_client function async_function http_client L97–102 ← moved from tests/test_mcp_elicitation_section16.py
+ ASGITransport import import ASGITransport L63–63
+ AVAILABLE_DAW_CLOUDS import import AVAILABLE_DAW_CLOUDS L69–69
+ AVAILABLE_PLATFORMS import import AVAILABLE_PLATFORMS L69–69 ← moved from tests/test_mcp_elicitation_section16.py
+ AsyncClient import import AsyncClient L63–63 ← moved from tests/test_mcp_elicitation_section16.py
+ AsyncSession import import AsyncSession L65–65 ← moved from tests/test_object_store_section52.py
+ ElicitationAction import import ElicitationAction L67–67
+ ElicitationRequest import import ElicitationRequest L67–67 ← moved from tests/test_mcp_elicitation_section16.py
+ app import import app L68–68 ← moved from tests/test_mcp_elicitation_section16.py
+ get_type_hints import import get_type_hints L59–59 ← moved from tests/test_mcp_elicitation_section16.py
+ pytest_asyncio import import pytest_asyncio L62–62
+ time import import time L58–58
~ patch
~ tests/test_object_store.py .py 17 symbols added, 90 symbols removed
− TestContentType class class TestContentType L241–255
− test_json_content_type method method test_json_content_type L249–251
− test_png_content_type method method test_png_content_type L244–247
− test_webp_content_type method method test_webp_content_type L253–255
− TestDataIntegrity class class TestDataIntegrity L648–756
− test_content_round_trip_via_http method async_method test_content_round_trip_via_http L689–713
− test_disk_path_points_to_real_file_after_wire_push method async_method test_disk_path_points_to_real_file_after_wire_push L650–686
− test_idempotent_push_stores_object_once method async_method test_idempotent_push_stores_object_once L716–745
− test_local_backend_put_idempotent_does_not_overwrite method async_method test_local_backend_put_idempotent_does_not_overwrite L748–756
− TestDetectFileType class class TestDetectFileType L209–238
− test_jpeg_is_image method method test_jpeg_is_image L224–226
− test_json_is_json method method test_json_is_json L212–214
− test_no_ext_is_other method method test_no_ext_is_other L236–238
− test_png_is_image method method test_png_is_image L216–218
− test_unknown_ext_is_other method method test_unknown_ext_is_other L232–234
− test_webp_is_image method method test_webp_is_image L220–222
− test_xml_is_xml method method test_xml_is_xml L228–230
− TestGetBlobMetaEndpoint class class TestGetBlobMetaEndpoint L454–563
− test_binary_file_has_no_content_text method async_method test_binary_file_has_no_content_text L524–563
− test_private_repo_without_auth_returns_401 method async_method test_private_repo_without_auth_returns_401 L516–521
− test_returns_blob_metadata method async_method test_returns_blob_metadata L456–498
− test_unknown_path_returns_404 method async_method test_unknown_path_returns_404 L501–506
− test_unknown_repo_returns_404 method async_method test_unknown_repo_returns_404 L509–513
− TestGetObjectContentEndpoint class class TestGetObjectContentEndpoint L396–451
− test_missing_disk_file_returns_410 method async_method test_missing_disk_file_returns_410 L429–439
− test_private_repo_without_auth_returns_401 method async_method test_private_repo_without_auth_returns_401 L442–451
− test_returns_file_bytes method async_method test_returns_file_bytes L398–411
− test_unknown_object_returns_404 method async_method test_unknown_object_returns_404 L414–419
− test_unknown_repo_returns_404 method async_method test_unknown_repo_returns_404 L422–426
− TestListObjectsEndpoint class class TestListObjectsEndpoint L340–393
− test_private_repo_with_auth_returns_200 method async_method test_private_repo_with_auth_returns_200 L382–393
− test_private_repo_without_auth_returns_401 method async_method test_private_repo_without_auth_returns_401 L374–379
− test_public_repo_empty_list method async_method test_public_repo_empty_list L342–348
− test_public_repo_returns_metadata method async_method test_public_repo_returns_metadata L351–364
− test_unknown_repo_returns_404 method async_method test_unknown_repo_returns_404 L367–371
− TestLocalBackendAsyncOps class class TestLocalBackendAsyncOps L146–202
− test_delete_noop_on_missing method async_method test_delete_noop_on_missing L191–194
− test_delete_removes_file method async_method test_delete_removes_file L184–188
− test_exists_false_before_put method async_method test_exists_false_before_put L173–175
− test_exists_true_after_put method async_method test_exists_true_after_put L178–181
− test_get_returns_correct_bytes method async_method test_get_returns_correct_bytes L165–170
− test_get_returns_none_for_missing method async_method test_get_returns_none_for_missing L159–162
− test_put_returns_uri_and_file_exists method async_method test_put_returns_uri_and_file_exists L150–156
− test_separate_repos_share_global_storage method async_method test_separate_repos_share_global_storage L197–202
− TestLocalBackendPath class class TestLocalBackendPath L74–117
− test_colon_in_object_id_sanitised method method test_colon_in_object_id_sanitised L82–86
− test_dotdot_in_object_id_is_sanitised method method test_dotdot_in_object_id_is_sanitised L94–100
− test_normal_path_does_not_raise method method test_normal_path_does_not_raise L102–105
− test_safe_path_is_under_root method method test_safe_path_is_under_root L77–80
− test_slash_in_object_id_sanitised method method test_slash_in_object_id_sanitised L88–92
− test_uri_for_embeds_absolute_path method method test_uri_for_embeds_absolute_path L107–117
− TestLocalBackendWrite class class TestLocalBackendWrite L120–143
− test_write_creates_file method method test_write_creates_file L123–128
− test_write_creates_parent_dirs method method test_write_creates_parent_dirs L138–143
− test_write_is_idempotent method method test_write_is_idempotent L130–136
− TestObjectStorePerformance class class TestObjectStorePerformance L831–901
− test_get_object_content_1mb_under_500ms method async_method test_get_object_content_1mb_under_500ms L883–901
− test_list_objects_100_rows_under_200ms method async_method test_list_objects_100_rows_under_200ms L859–880
− test_local_backend_get_1kb_under_10ms method async_method test_local_backend_get_1kb_under_10ms L846–856
− test_local_backend_put_1kb_under_50ms method async_method test_local_backend_put_1kb_under_50ms L833–843
− TestObjectStoreSecurity class class TestObjectStoreSecurity L763–824
− test_cross_repo_object_not_visible_in_other_repo method async_method test_cross_repo_object_not_visible_in_other_repo L806–824
− test_object_id_double_slash_is_sanitised method method test_object_id_double_slash_is_sanitised L779–783
− test_object_id_with_dotdot_is_sanitised method method test_object_id_with_dotdot_is_sanitised L764–769
− test_private_repo_content_requires_auth method async_method test_private_repo_content_requires_auth L794–803
− test_private_repo_list_objects_requires_auth method async_method test_private_repo_list_objects_requires_auth L786–791
− test_traversal_via_object_id_colon_is_sanitised method method test_traversal_via_object_id_colon_is_sanitised L771–777
− TestObjectStoreStress class class TestObjectStoreStress L583–641
− test_20_repo_fan_out_isolated method async_method test_20_repo_fan_out_isolated L615–641
− test_50_objects_push_then_list_all_present method async_method test_50_objects_push_then_list_all_present L585–612
− TestServiceGetObjectRow class class TestServiceGetObjectRow L298–332
− test_returns_none_when_missing method async_method test_returns_none_when_missing L314–318
− test_returns_row_when_found method async_method test_returns_row_when_found L300–311
− test_wrong_repo_returns_none method async_method test_wrong_repo_returns_none L321–332
− TestServiceListObjects class class TestServiceListObjects L262–295
− test_empty_repo_returns_empty_list method async_method test_empty_repo_returns_empty_list L264–268
− test_isolated_to_repo method async_method test_isolated_to_repo L286–295
− test_returns_all_objects_sorted_by_path method async_method test_returns_all_objects_sorted_by_path L271–283
− _insert_object function async_function _insert_object L48–67
− _wire_push function function _wire_push L570–580
− AsyncClient import import AsyncClient L30–30
− JSONObject import import JSONObject L37–37
− LocalBackend import import LocalBackend L35–35
− StrDict import import StrDict L37–37
− db import import db L34–34
− os import import os L23–23
− pytest_asyncio import import pytest_asyncio L29–29 → moved to tests/test_migrations.py
− settings import import settings L33–33
− time import import time L24–24 → moved to tests/test_migrations.py
− uuid import import uuid L25–25 → moved to tests/test_migrations.py
+ _add_object function async_function _add_object L35–55 ← moved from tests/test_object_store_section52.py
+ AsyncMock import import AsyncMock L18–18
+ MagicMock import import MagicMock L18–18
+ _MusehubObject import import _MusehubObject L23–23 ← moved from tests/test_object_store_section52.py
+ patch import import patch L18–18 ← moved from tests/test_mcp_elicitation.py
+ stat import import stat L15–15 ← moved from tests/test_object_store_section52.py
+ tempfile import import tempfile L16–16 ← moved from tests/test_object_store_section52.py
+ test_integrity_scan_clean function async_function test_integrity_scan_clean L101–118 ← moved from tests/test_object_store_section52.py
+ test_integrity_scan_detects_hash_mismatch function async_function test_integrity_scan_detects_hash_mismatch L150–169 ← moved from tests/test_object_store_section52.py
+ test_integrity_scan_detects_missing_object function async_function test_integrity_scan_detects_missing_object L125–143 ← moved from tests/test_object_store_section52.py
+ test_local_backend_write_sets_readonly function function test_local_backend_write_sets_readonly L62–78 ← moved from tests/test_object_store_section52.py
+ test_local_backend_write_skips_existing_file function function test_local_backend_write_skips_existing_file L81–94 ← moved from tests/test_object_store_section52.py
+ test_reaper_removes_objects_past_retention function async_function test_reaper_removes_objects_past_retention L206–235 ← moved from tests/test_object_store_section52.py
+ test_reaper_spares_objects_within_retention function async_function test_reaper_spares_objects_within_retention L238–262 ← moved from tests/test_object_store_section52.py
+ test_soft_delete_sets_deleted_at function async_function test_soft_delete_sets_deleted_at L176–192 ← moved from tests/test_object_store_section52.py
+ test_soft_delete_unknown_object_returns_false function async_function test_soft_delete_unknown_object_returns_false L195–199 ← moved from tests/test_object_store_section52.py
+ test_wire_push_rejects_when_repo_quota_exceeded function async_function test_wire_push_rejects_when_repo_quota_exceeded L269–298 ← moved from tests/test_object_store_section52.py
~ tests/test_api_contracts.py .py moved from tests/test_api_contracts_section37.py
~ tests/test_api_performance.py .py moved from tests/test_api_performance_section62.py
~ tests/test_auth_authorization.py .py moved from tests/test_auth_authorization_section12.py
~ tests/test_collaborators.py .py moved from tests/test_collaborators_section27.py
~ tests/test_compliance.py .py moved from tests/test_compliance_section9.py
~ tests/test_context.py .py moved from tests/test_context_section23.py
~ tests/test_cross_repo.py .py moved from tests/test_cross_repo_section24.py
~ tests/test_data_integrity.py .py moved from tests/test_data_integrity_section51.py
~ tests/test_database.py .py moved from tests/test_database_section61.py
~ tests/test_deployment.py .py moved from tests/test_deployment_section73.py
~ tests/test_divergence.py .py moved from tests/test_divergence_section26.py
~ tests/test_domains.py .py moved from tests/test_domains_section25.py
~ tests/test_environments.py .py moved from tests/test_environments_section71.py
~ tests/test_escape_like.py .py moved from tests/test_escape_like_section22.py
~ tests/test_gc_background_tasks.py .py moved from tests/test_gc_background_tasks_section41.py
~ tests/test_gc.py .py moved from tests/test_gc_section32.py
~ tests/test_install_script.py .py moved from tests/test_install_script_section43.py
~ tests/test_load_readiness.py .py moved from tests/test_load_readiness_section64.py
~ tests/test_logging_alerting.py .py moved from tests/test_logging_alerting_section74.py
~ tests/test_markdown_sanitization.py .py moved from tests/test_markdown_sanitization_section23.py
~ tests/test_migrations.py .py moved from tests/test_migrations_section53.py; 79 added
+ TestMigrationDataIntegrity class class TestMigrationDataIntegrity L530–623 ← moved from tests/test_migrations_section36.py
+ test_musehub_auth_keys_fingerprint_unique_index method method test_musehub_auth_keys_fingerprint_unique_index L587–593 ← moved from tests/test_migrations_section36.py
+ test_musehub_auth_keys_has_algorithm_column method method test_musehub_auth_keys_has_algorithm_column L570–577 ← moved from tests/test_migrations_section36.py
+ test_musehub_collaborators_has_identity_handle_column method method test_musehub_collaborators_has_identity_handle_column L595–603 ← moved from tests/test_migrations_section36.py
+ test_musehub_identities_has_agent_columns method method test_musehub_identities_has_agent_columns L542–550 ← moved from tests/test_migrations_section36.py
+ test_musehub_identities_has_no_legacy_user_id method method test_musehub_identities_has_no_legacy_user_id L552–559 ← moved from tests/test_migrations_section36.py
+ test_musehub_issue_comments_has_no_state_refs method method test_musehub_issue_comments_has_no_state_refs L561–568 ← moved from tests/test_migrations_section36.py
+ test_musehub_repos_has_required_columns method method test_musehub_repos_has_required_columns L533–540 ← moved from tests/test_migrations_section36.py
+ test_musehub_repos_unique_owner_slug_index_exists method method test_musehub_repos_unique_owner_slug_index_exists L579–585 ← moved from tests/test_migrations_section36.py
+ test_musehub_snapshot_entries_exists_and_has_key_columns method method test_musehub_snapshot_entries_exists_and_has_key_columns L605–611 ← moved from tests/test_migrations_section36.py
+ test_sessions_table_exists method method test_sessions_table_exists L619–623 ← moved from tests/test_migrations_section36.py
+ test_wire_tags_table_exists method method test_wire_tags_table_exists L613–617 ← moved from tests/test_migrations_section36.py
+ TestMigrationE2E class class TestMigrationE2E L386–456 ← moved from tests/test_migrations_section36.py
+ test_each_migration_step_is_individually_runnable method method test_each_migration_step_is_individually_runnable L450–456 ← moved from tests/test_migrations_section36.py
+ test_identity_row_survives_upgrade_chain method method test_identity_row_survives_upgrade_chain L420–448 ← moved from tests/test_migrations_section36.py
+ test_repo_data_survives_incremental_upgrade method method test_repo_data_survives_incremental_upgrade L389–418 ← moved from tests/test_migrations_section36.py
+ TestMigrationIntegration class class TestMigrationIntegration L330–378 ← moved from tests/test_migrations_section36.py
+ test_current_revision_tracked_in_alembic_version method method test_current_revision_tracked_in_alembic_version L340–350 ← moved from tests/test_migrations_section36.py
+ test_downgrade_then_upgrade_returns_to_head method method test_downgrade_then_upgrade_returns_to_head L366–371 ← moved from tests/test_migrations_section36.py
+ test_full_downgrade_to_base_then_re_upgrade method method test_full_downgrade_to_base_then_re_upgrade L373–378 ← moved from tests/test_migrations_section36.py
+ test_legacy_tables_absent_at_head method method test_legacy_tables_absent_at_head L359–364 ← moved from tests/test_migrations_section36.py
+ test_required_tables_exist_at_head method method test_required_tables_exist_at_head L352–357 ← moved from tests/test_migrations_section36.py
+ test_upgrade_to_head_succeeds method method test_upgrade_to_head_succeeds L333–338 ← moved from tests/test_migrations_section36.py
+ TestMigrationPerformance class class TestMigrationPerformance L713–764 ← moved from tests/test_migrations_section36.py
+ test_index_introspection_under_200ms method method test_index_introspection_under_200ms L755–764 ← moved from tests/test_migrations_section36.py
+ test_schema_introspection_under_500ms method method test_schema_introspection_under_500ms L746–753 ← moved from tests/test_migrations_section36.py
+ test_single_step_downgrade_under_5_seconds method method test_single_step_downgrade_under_5_seconds L727–744 ← moved from tests/test_migrations_section36.py
+ test_single_step_upgrade_under_5_seconds method method test_single_step_upgrade_under_5_seconds L716–725 ← moved from tests/test_migrations_section36.py
+ TestMigrationSecurity class class TestMigrationSecurity L631–705 ← moved from tests/test_migrations_section36.py
+ test_downgrade_does_not_expose_dropped_columns method method test_downgrade_does_not_expose_dropped_columns L660–674 ← moved from tests/test_migrations_section36.py
+ test_legacy_auth_tables_dropped_at_head method method test_legacy_auth_tables_dropped_at_head L634–640 ← moved from tests/test_migrations_section36.py
+ test_musehub_auth_keys_has_fingerprint_unique_constraint method method test_musehub_auth_keys_has_fingerprint_unique_constraint L642–649 ← moved from tests/test_migrations_section36.py
+ test_musehub_identities_handle_unique method method test_musehub_identities_handle_unique L651–658 ← moved from tests/test_migrations_section36.py
+ test_repos_owner_slug_uniqueness_enforced method method test_repos_owner_slug_uniqueness_enforced L676–705 ← moved from tests/test_migrations_section36.py
+ TestMigrationStress class class TestMigrationStress L464–522 ← moved from tests/test_migrations_section36.py
+ test_100_identity_inserts_survive_step_cycle method method test_100_identity_inserts_survive_step_cycle L493–522 ← moved from tests/test_migrations_section36.py
+ test_full_downgrade_completes_under_60_seconds method method test_full_downgrade_completes_under_60_seconds L475–483 ← moved from tests/test_migrations_section36.py
+ test_full_upgrade_completes_under_60_seconds method method test_full_upgrade_completes_under_60_seconds L467–473 ← moved from tests/test_migrations_section36.py
+ test_three_consecutive_upgrade_to_head_idempotent method method test_three_consecutive_upgrade_to_head_idempotent L485–491 ← moved from tests/test_migrations_section36.py
+ TestMigrationUnit class class TestMigrationUnit L237–322 ← moved from tests/test_migrations_section36.py
+ test_alembic_ini_points_to_correct_script_location method method test_alembic_ini_points_to_correct_script_location L311–317 ← moved from tests/test_migrations_section36.py
+ test_all_42_migrations_present method method test_all_42_migrations_present L267–270 ← moved from tests/test_migrations_section36.py
+ test_each_migration_has_upgrade_and_downgrade method method test_each_migration_has_upgrade_and_downgrade L294–309 ← moved from tests/test_migrations_section36.py
+ test_env_py_imports_all_model_bases method method test_env_py_imports_all_model_bases L319–322 ← moved from tests/test_migrations_section36.py
+ test_head_revision_is_0042 method method test_head_revision_is_0042 L272–292 ← moved from tests/test_migrations_section36.py
+ test_revision_chain_is_linear method method test_revision_chain_is_linear L240–265 ← moved from tests/test_migrations_section36.py
+ _ADMIN_URL variable variable _ADMIN_URL L56–56 ← moved from tests/test_migrations_section36.py
+ _ALL_REVISIONS variable variable _ALL_REVISIONS L62–69 ← moved from tests/test_migrations_section36.py
+ _HEAD variable variable _HEAD L70–70 ← moved from tests/test_migrations_section36.py
+ _LEGACY_TABLES variable variable _LEGACY_TABLES L91–94 ← moved from tests/test_migrations_section36.py
+ _PERF_TEST_DB variable variable _PERF_TEST_DB L59–59 ← moved from tests/test_migrations_section36.py
+ _PERF_TEST_URL variable variable _PERF_TEST_URL L60–60 ← moved from tests/test_migrations_section36.py
+ _PROJECT_ROOT variable variable _PROJECT_ROOT L42–42 ← moved from tests/test_migrations_section36.py
+ _REQUIRED_TABLES variable variable _REQUIRED_TABLES L75–88 ← moved from tests/test_migrations_section36.py
+ _TEST_DB variable variable _TEST_DB L54–54 ← moved from tests/test_migrations_section36.py
+ _TEST_URL variable variable _TEST_URL L55–55 ← moved from tests/test_migrations_section36.py
+ _columns function async_function _columns L173–182 ← moved from tests/test_migrations_section36.py
+ _current_rev function function _current_rev L137–147 ← moved from tests/test_migrations_section36.py
+ _downgrade function function _downgrade L133–134 ← moved from tests/test_migrations_section36.py
+ _fresh_db function function _fresh_db L185–197 ← moved from tests/test_migrations_section36.py
+ _indexes_for function async_function _indexes_for L161–170 ← moved from tests/test_migrations_section36.py
+ _perf_fresh_db function function _perf_fresh_db L200–212 ← moved from tests/test_migrations_section36.py
+ _raw_db_url variable variable _raw_db_url L48–48 ← moved from tests/test_migrations_section36.py
+ _run_alembic function function _run_alembic L100–126 ← moved from tests/test_migrations_section36.py
+ _tables function async_function _tables L150–158 ← moved from tests/test_migrations_section36.py
+ _upgrade function function _upgrade L129–130 ← moved from tests/test_migrations_section36.py
+ AsyncConnection import import AsyncConnection L38–38
+ AsyncEngine import import AsyncEngine L38–38
+ AsyncGenerator import import AsyncGenerator L32–32
+ Generator import import Generator L32–32 ← moved from tests/test_migrations_section36.py
+ NullPool import import NullPool L39–39 ← moved from tests/test_migrations_section36.py
+ _urlparse import import _urlparse L33–33 ← moved from tests/test_migrations_section36.py
+ asyncio import import asyncio L27–27 ← moved from tests/test_migrations_section36.py
+ create_async_engine import import create_async_engine L38–38 ← moved from tests/test_migrations_section36.py
+ pytest_asyncio import import pytest_asyncio L36–36 ← moved from tests/test_object_store.py
+ text import import text L37–37 ← moved from tests/test_migrations_section36.py
+ time import import time L30–30 ← moved from tests/test_object_store.py
+ uuid import import uuid L31–31 ← moved from tests/test_object_store.py
+ migrated_engine function function migrated_engine L219–229 ← moved from tests/test_migrations_section36.py
~ tests/test_msign.py .py moved from tests/test_msign_section35.py
~ tests/test_network_transport.py .py moved from tests/test_network_transport_section3.py
~ tests/test_object_integrity.py .py moved from tests/test_object_integrity_section24.py
~ tests/test_pagination.py .py moved from tests/test_pagination_section39.py
~ tests/test_protocol_introspection.py .py moved from tests/test_protocol_introspection_section42.py
~ tests/test_rate_limiting.py .py moved from tests/test_rate_limiting_section34.py; 15 added
+ test_api_search_rate_limited_on_429 function async_function test_api_search_rate_limited_on_429 L667–674 ← moved from tests/test_rate_limiting_section4.py
+ test_auth_limit_is_strict function function test_auth_limit_is_strict L654–662 ← moved from tests/test_rate_limiting_section4.py
+ test_bot_ua_scrapy_is_blocked_on_write function async_function test_bot_ua_scrapy_is_blocked_on_write L753–764 ← moved from tests/test_rate_limiting_section4.py
+ test_bot_ua_sqlmap_is_blocked_on_write function async_function test_bot_ua_sqlmap_is_blocked_on_write L777–784 ← moved from tests/test_rate_limiting_section4.py
+ test_bot_ua_wget_is_blocked_on_write function async_function test_bot_ua_wget_is_blocked_on_write L767–774 ← moved from tests/test_rate_limiting_section4.py
+ test_global_rate_limit_configured function function test_global_rate_limit_configured L640–649 ← moved from tests/test_rate_limiting_section4.py
+ test_healthz_exempt_from_bot_check function async_function test_healthz_exempt_from_bot_check L814–818 ← moved from tests/test_rate_limiting_section4.py
+ test_legitimate_browser_ua_passes function async_function test_legitimate_browser_ua_passes L796–802 ← moved from tests/test_rate_limiting_section4.py
+ test_missing_ua_post_non_cdn_path_is_blocked function async_function test_missing_ua_post_non_cdn_path_is_blocked L787–793 ← moved from tests/test_rate_limiting_section4.py
+ test_muse_cli_ua_passes function async_function test_muse_cli_ua_passes L805–811 ← moved from tests/test_rate_limiting_section4.py
+ test_object_download_has_rate_limit_decorator function function test_object_download_has_rate_limit_decorator L705–714 ← moved from tests/test_rate_limiting_section4.py
+ test_retry_after_added_to_429 function function test_retry_after_added_to_429 L719–748 ← moved from tests/test_rate_limiting_section4.py
+ test_search_routes_have_rate_limit_decorator function function test_search_routes_have_rate_limit_decorator L677–700 ← moved from tests/test_rate_limiting_section4.py
+ test_webhook_backoff_configured function function test_webhook_backoff_configured L833–839 ← moved from tests/test_rate_limiting_section4.py
+ test_webhook_max_attempts_capped function function test_webhook_max_attempts_capped L823–830 ← moved from tests/test_rate_limiting_section4.py
~ tests/test_search.py .py moved from tests/test_search_section17.py
~ tests/test_secrets_management.py .py moved from tests/test_secrets_management_section72.py
~ tests/test_security_hardening.py .py moved from tests/test_security_hardening_section82.py; 62 added
+ TestCommitIdForgery class class TestCommitIdForgery L370–433 ← moved from tests/test_security_hardening_section8.py
+ test_require_signed_commits_setting_exists method method test_require_signed_commits_setting_exists L371–375 ← moved from tests/test_security_hardening_section8.py
+ test_wire_push_enforces_when_setting_true method method test_wire_push_enforces_when_setting_true L377–385 ← moved from tests/test_security_hardening_section8.py
+ test_wire_push_rejects_unsigned_when_enforcement_on method async_method test_wire_push_rejects_unsigned_when_enforcement_on L387–414 ← moved from tests/test_security_hardening_section8.py
+ test_wire_push_source_has_unsigned_warning_not_rejection method method test_wire_push_source_has_unsigned_warning_not_rejection L416–433 ← moved from tests/test_security_hardening_section8.py
+ TestMassAssignment class class TestMassAssignment L217–254 ← moved from tests/test_security_hardening_section8.py
+ _route_files method method _route_files L218–219 ← moved from tests/test_security_hardening_section8.py
+ test_no_kwargs_splat_from_request_body method method test_no_kwargs_splat_from_request_body L221–234 ← moved from tests/test_security_hardening_section8.py
+ test_route_handler_body_params_are_pydantic_or_primitive method method test_route_handler_body_params_are_pydantic_or_primitive L236–248 ← moved from tests/test_security_hardening_section8.py
+ test_webhook_create_uses_pydantic_not_raw_dict method method test_webhook_create_uses_pydantic_not_raw_dict L250–254 ← moved from tests/test_security_hardening_section8.py
+ TestObjectEnumeration class class TestObjectEnumeration L307–363 ← moved from tests/test_security_hardening_section8.py
+ _db_models_src method method _db_models_src L308–309 ← moved from tests/test_security_hardening_section8.py
+ test_issue_number_is_per_repo_not_global method method test_issue_number_is_per_repo_not_global L334–342 ← moved from tests/test_security_hardening_section8.py
+ test_issue_primary_key_is_uuid_string method method test_issue_primary_key_is_uuid_string L326–332 ← moved from tests/test_security_hardening_section8.py
+ test_no_autoincrement_primary_keys_on_main_entities method method test_no_autoincrement_primary_keys_on_main_entities L344–363 ← moved from tests/test_security_hardening_section8.py
+ test_repo_primary_key_is_uuid_string method method test_repo_primary_key_is_uuid_string L311–324 ← moved from tests/test_security_hardening_section8.py
+ TestRegexDos class class TestRegexDos L440–494 ← moved from tests/test_security_hardening_section8.py
+ _search_service_src method method _search_service_src L441–442 ← moved from tests/test_security_hardening_section8.py
+ test_global_search_uses_sql_or_python_in method method test_global_search_uses_sql_or_python_in L485–494 ← moved from tests/test_security_hardening_section8.py
+ test_no_user_supplied_regex_in_search_routes method method test_no_user_supplied_regex_in_search_routes L477–483 ← moved from tests/test_security_hardening_section8.py
+ test_search_by_ask_uses_fixed_tokenizer_not_user_regex method method test_search_by_ask_uses_fixed_tokenizer_not_user_regex L462–475 ← moved from tests/test_security_hardening_section8.py
+ test_search_by_pattern_uses_python_in_not_regex method method test_search_by_pattern_uses_python_in_not_regex L444–460 ← moved from tests/test_security_hardening_section8.py
+ TestSsrfCheckUrlSafe class class TestSsrfCheckUrlSafe L36–92 ← moved from tests/test_security_hardening_section8.py
+ _check method method _check L37–39 ← moved from tests/test_security_hardening_section8.py
+ test_empty_string_blocked method method test_empty_string_blocked L90–92 ← moved from tests/test_security_hardening_section8.py
+ test_file_scheme_blocked method method test_file_scheme_blocked L53–55 ← moved from tests/test_security_hardening_section8.py
+ test_ftp_scheme_blocked method method test_ftp_scheme_blocked L49–51 ← moved from tests/test_security_hardening_section8.py
+ test_hostname_with_path_allowed method method test_hostname_with_path_allowed L82–84 ← moved from tests/test_security_hardening_section8.py
+ test_http_scheme_blocked method method test_http_scheme_blocked L45–47 ← moved from tests/test_security_hardening_section8.py
+ test_https_public_url_allowed method method test_https_public_url_allowed L41–43 ← moved from tests/test_security_hardening_section8.py
+ test_link_local_169_254_blocked method method test_link_local_169_254_blocked L77–80 ← moved from tests/test_security_hardening_section8.py
+ test_loopback_127_blocked method method test_loopback_127_blocked L57–59 ← moved from tests/test_security_hardening_section8.py
+ test_loopback_127_other_blocked method method test_loopback_127_other_blocked L61–63 ← moved from tests/test_security_hardening_section8.py
+ test_no_hostname_blocked method method test_no_hostname_blocked L86–88 ← moved from tests/test_security_hardening_section8.py
+ test_rfc1918_10_blocked method method test_rfc1918_10_blocked L65–67 ← moved from tests/test_security_hardening_section8.py
+ test_rfc1918_172_16_blocked method method test_rfc1918_172_16_blocked L69–71 ← moved from tests/test_security_hardening_section8.py
+ test_rfc1918_192_168_blocked method method test_rfc1918_192_168_blocked L73–75 ← moved from tests/test_security_hardening_section8.py
+ TestSsrfValidateOutboundUrl class class TestSsrfValidateOutboundUrl L99–141 ← moved from tests/test_security_hardening_section8.py
+ test_bare_ip_does_not_do_dns method async_method test_bare_ip_does_not_do_dns L134–141 ← moved from tests/test_security_hardening_section8.py
+ test_dns_resolves_to_loopback_blocked method async_method test_dns_resolves_to_loopback_blocked L118–124 ← moved from tests/test_security_hardening_section8.py
+ test_dns_resolves_to_private_blocked method async_method test_dns_resolves_to_private_blocked L109–116 ← moved from tests/test_security_hardening_section8.py
+ test_public_hostname_allowed method async_method test_public_hostname_allowed L100–107 ← moved from tests/test_security_hardening_section8.py
+ test_unresolvable_hostname_blocked method async_method test_unresolvable_hostname_blocked L126–132 ← moved from tests/test_security_hardening_section8.py
+ TestTarBomb class class TestTarBomb L501–516 ← moved from tests/test_security_hardening_section8.py
+ test_no_archive_extraction_in_codebase method method test_no_archive_extraction_in_codebase L502–516 ← moved from tests/test_security_hardening_section8.py
+ TestTimingAttacks class class TestTimingAttacks L261–300 ← moved from tests/test_security_hardening_section8.py
+ test_compare_digest_used_not_equal_for_secrets method method test_compare_digest_used_not_equal_for_secrets L279–300 ← moved from tests/test_security_hardening_section8.py
+ test_crypto_keys_uses_compare_digest method method test_crypto_keys_uses_compare_digest L273–277 ← moved from tests/test_security_hardening_section8.py
+ test_request_signing_uses_cryptographic_verify method method test_request_signing_uses_cryptographic_verify L262–271 ← moved from tests/test_security_hardening_section8.py
+ TestWebhookCreateSsrf class class TestWebhookCreateSsrf L148–175 ← moved from tests/test_security_hardening_section8.py
+ _create method method _create L149–151 ← moved from tests/test_security_hardening_section8.py
+ test_aws_metadata_endpoint_rejected method method test_aws_metadata_endpoint_rejected L172–175 ← moved from tests/test_security_hardening_section8.py
+ test_http_rejected_at_model_parse method method test_http_rejected_at_model_parse L157–160 ← moved from tests/test_security_hardening_section8.py
+ test_https_public_accepted method method test_https_public_accepted L153–155 ← moved from tests/test_security_hardening_section8.py
+ test_loopback_rejected_at_model_parse method method test_loopback_rejected_at_model_parse L167–170 ← moved from tests/test_security_hardening_section8.py
+ test_rfc1918_rejected_at_model_parse method method test_rfc1918_rejected_at_model_parse L162–165 ← moved from tests/test_security_hardening_section8.py
+ TestWebhookDeliveryDefenseInDepth class class TestWebhookDeliveryDefenseInDepth L182–210 ← moved from tests/test_security_hardening_section8.py
+ test_delivery_blocked_when_ssrf_check_fails method async_method test_delivery_blocked_when_ssrf_check_fails L183–204 ← moved from tests/test_security_hardening_section8.py
+ test_dispatcher_imports_ssrf_module method method test_dispatcher_imports_ssrf_module L206–210 ← moved from tests/test_security_hardening_section8.py
+ _SSRF_MODULE variable variable _SSRF_MODULE L25–25 ← moved from tests/test_security_hardening_section8.py
+ _WEBHOOK_MODEL variable variable _WEBHOOK_MODEL L26–26 ← moved from tests/test_security_hardening_section8.py
+ ast import import ast L16–16 ← moved from tests/test_security_hardening_section8.py
~ tests/test_sessions.py .py moved from tests/test_sessions_section30.py
~ tests/test_static_assets.py .py moved from tests/test_static_assets_section63.py
~ tests/test_storage_backends.py .py moved from tests/test_storage_backends_section33.py
~ tests/test_ui_ssr.py .py moved from tests/test_ui_ssr_section38.py
~ tests/test_url_validation.py .py moved from tests/test_url_validation_section21.py
~ tests/test_webhook_crypto.py .py moved from tests/test_webhook_crypto_section40.py
~ tests/test_webhooks.py .py moved from tests/test_webhooks_section19.py
~ tests/test_wire_tags.py .py moved from tests/test_wire_tags_section31.py
← Older Oldest on dev
All commits
Newer → Latest on dev

0 comments

No comments yet. Be the first to start the discussion.

To add a comment, use the Muse CLI: muse hub commit comment sha256:1023a5ce87c517287e801d82ad4243278310d0420cd8d628b253ebdff5caa80b --body "your comment"