option > none * ──────────────────────────────────────────────────────────────────────── */ echo "\nGroup 3: Resolver precedence\n"; prv_test_reset(); // None scenario. prv_assert_equals( '', PRV_Key_Store::get_key(), 'get_key() returns "" when no source' ); // Option scenario (no constant defined yet). PRV_Key_Store::store_key( $plaintext ); prv_assert_equals( $plaintext, PRV_Key_Store::get_key(), 'get_key() returns plaintext from encrypted option' ); // Constant wins over option. define( 'PRV_OPENROUTER_API_KEY', 'sk-or-constant-key-xyz' ); prv_assert_equals( 'sk-or-constant-key-xyz', PRV_Key_Store::get_key(), 'Constant takes precedence over option' ); prv_assert( PRV_Key_Store::constant_is_set(), 'constant_is_set() true when constant is defined' ); prv_assert_equals( PRV_Key_Store::SOURCE_CONSTANT, PRV_Key_Store::get_source(), 'get_source() == CONSTANT when constant defined' ); /* ───────────────────────────────────────────────────────────────────────── * Group 4: Write-only — key value never in rendered HTML output * ──────────────────────────────────────────────────────────────────────── */ echo "\nGroup 4: Write-only render — key not in output\n"; prv_test_reset(); PRV_Key_Store::store_key( $plaintext ); // Load rendering dependencies. require_once PRV_PLUGIN_DIR . 'includes/core/class-prv-settings-page.php'; require_once PRV_PLUGIN_DIR . 'includes/core/class-prv-key-manager-renderer.php'; $html = prv_capture( function () { ( new PRV_Key_Manager_Renderer() )->render(); } ); prv_assert( '' !== $html, 'Key manager card renders non-empty HTML' ); // Plaintext key must be absent everywhere. prv_assert( false === strpos( $html, $plaintext ), 'Plaintext key absent from rendered HTML' ); prv_assert( false === strpos( $html, 'sk-or-test' ), 'Key value prefix absent from rendered HTML' ); prv_assert( false === strpos( $html, 'sk-or-constant-key-xyz' ), 'Constant key value absent from rendered HTML' ); // Password input must render with empty value. prv_assert( false !== strpos( $html, 'type="password"' ), 'Password input is present in output' ); prv_assert( false !== strpos( $html, 'value=""' ), 'Password input has empty value attribute' ); prv_assert( false === strpos( $html, 'value="sk-' ), 'No key value in any value= attribute' ); /* ───────────────────────────────────────────────────────────────────────── * Group 5: Remove clears the encrypted option * ──────────────────────────────────────────────────────────────────────── */ echo "\nGroup 5: Remove clears encrypted option\n"; prv_test_reset(); PRV_Key_Store::store_key( $plaintext ); prv_assert( '' !== get_option( PRV_Key_Store::OPTION_ENC, '' ), 'Key present before remove' ); PRV_Key_Store::clear_key(); prv_assert_equals( '', get_option( PRV_Key_Store::OPTION_ENC, '' ), 'Option empty after clear_key()' ); // get_key() falls back to constant when present. prv_assert_equals( 'sk-or-constant-key-xyz', PRV_Key_Store::get_key(), 'get_key() returns constant after option cleared' ); /* ───────────────────────────────────────────────────────────────────────── * Summary * ──────────────────────────────────────────────────────────────────────── */ exit( prv_test_summary() );