fix: guard WP_Error cost access + add missing test constants
- Wrap cost_usd accumulation in is_wp_error() guard so WP_Error returns from generate_image_a/b don't crash on array access - Add PRAUTOBLOGGER_DEFAULT_IMAGE_STYLE_SUFFIX to test bootstrap - Add is_wp_error, sanitize_title, esc_html__ mocks to ImagePipelineTest Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -124,7 +124,9 @@ class PRAutoBlogger_Image_Pipeline {
|
|||||||
? $image_a_result->get_error_message()
|
? $image_a_result->get_error_message()
|
||||||
: 'Image A generation produced no attachment ID.';
|
: 'Image A generation produced no attachment ID.';
|
||||||
}
|
}
|
||||||
|
if ( ! is_wp_error( $image_a_result ) ) {
|
||||||
$result['cost_usd'] += $image_a_result['cost_usd'] ?? 0.0;
|
$result['cost_usd'] += $image_a_result['cost_usd'] ?? 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
// Generate Image B (source-driven prompt) if source data is available.
|
// Generate Image B (source-driven prompt) if source data is available.
|
||||||
if ( null !== $source_data && ! empty( $source_data ) ) {
|
if ( null !== $source_data && ! empty( $source_data ) ) {
|
||||||
@@ -136,8 +138,10 @@ class PRAutoBlogger_Image_Pipeline {
|
|||||||
? $image_b_result->get_error_message()
|
? $image_b_result->get_error_message()
|
||||||
: 'Image B generation produced no attachment ID.';
|
: 'Image B generation produced no attachment ID.';
|
||||||
}
|
}
|
||||||
|
if ( ! is_wp_error( $image_b_result ) ) {
|
||||||
$result['cost_usd'] += $image_b_result['cost_usd'] ?? 0.0;
|
$result['cost_usd'] += $image_b_result['cost_usd'] ?? 0.0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,6 +55,11 @@ if ( ! defined( 'PRAUTOBLOGGER_DEFAULT_EDITOR_MODEL' ) ) {
|
|||||||
define( 'PRAUTOBLOGGER_DEFAULT_EDITOR_MODEL', 'google/gemini-2.5-flash-lite' );
|
define( 'PRAUTOBLOGGER_DEFAULT_EDITOR_MODEL', 'google/gemini-2.5-flash-lite' );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Default image style suffix used by ImagePromptBuilder and settings UI.
|
||||||
|
if ( ! defined( 'PRAUTOBLOGGER_DEFAULT_IMAGE_STYLE_SUFFIX' ) ) {
|
||||||
|
define( 'PRAUTOBLOGGER_DEFAULT_IMAGE_STYLE_SUFFIX', 'Style: test infomercial style.' );
|
||||||
|
}
|
||||||
|
|
||||||
// WordPress database constants used in $wpdb queries.
|
// WordPress database constants used in $wpdb queries.
|
||||||
if ( ! defined( 'ARRAY_A' ) ) {
|
if ( ! defined( 'ARRAY_A' ) ) {
|
||||||
define( 'ARRAY_A', 'ARRAY_A' );
|
define( 'ARRAY_A', 'ARRAY_A' );
|
||||||
|
|||||||
@@ -19,6 +19,9 @@ class ImagePipelineTest extends BaseTestCase {
|
|||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
// Mock WordPress functions used by the pipeline and its dependencies.
|
// Mock WordPress functions used by the pipeline and its dependencies.
|
||||||
|
Functions\when( 'is_wp_error' )->alias( function ( $thing ) {
|
||||||
|
return $thing instanceof \WP_Error;
|
||||||
|
} );
|
||||||
Functions\when( 'wp_generate_uuid4' )->justReturn( 'test-uuid' );
|
Functions\when( 'wp_generate_uuid4' )->justReturn( 'test-uuid' );
|
||||||
Functions\when( 'get_option' )->alias( function ( $key, $default = false ) {
|
Functions\when( 'get_option' )->alias( function ( $key, $default = false ) {
|
||||||
static $options = [
|
static $options = [
|
||||||
@@ -32,6 +35,8 @@ class ImagePipelineTest extends BaseTestCase {
|
|||||||
return trim( strip_tags( $str ) );
|
return trim( strip_tags( $str ) );
|
||||||
} );
|
} );
|
||||||
Functions\when( 'update_post_meta' )->justReturn( true );
|
Functions\when( 'update_post_meta' )->justReturn( true );
|
||||||
|
Functions\when( 'sanitize_title' )->returnArg();
|
||||||
|
Functions\when( 'esc_html__' )->returnArg();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user