Skip to content

Commit

Permalink
Use Constant_Mocker in tests
Browse files Browse the repository at this point in the history
  • Loading branch information
rebeccahum committed Oct 25, 2023
1 parent 7efe2b1 commit 09e0e82
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 10 deletions.
16 changes: 16 additions & 0 deletions tests/mock-constants.php
Original file line number Diff line number Diff line change
Expand Up @@ -200,3 +200,19 @@ function constant( $constant ) {
return Constant_Mocker::constant( $constant );
}
}

namespace Automattic\VIP\Mail {
use Automattic\Test\Constant_Mocker;

function define( $constant, $value ) {
return Constant_Mocker::define( $constant, $value );
}

function defined( $constant ) {
return Constant_Mocker::defined( $constant );
}

function constant( $constant ) {
return Constant_Mocker::constant( $constant );
}
}
59 changes: 49 additions & 10 deletions tests/test-vip-mail.php
Original file line number Diff line number Diff line change
@@ -1,19 +1,28 @@
<?php
namespace Automattic\VIP\Mail;

use PHPMailer\PHPMailer\PHPMailer;
use Automattic\Test\Constant_Mocker;

// phpcs:disable WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase -- PHPMailer does not follow the conventions
// phpcs:disable WordPressVIPMinimum.Functions.RestrictedFunctions.wp_mail_wp_mail -- we are testing it

class VIP_Mail_Test extends WP_UnitTestCase {
class VIP_Mail_Test extends \WP_UnitTestCase {
public function setUp(): void {
parent::setUp();
reset_phpmailer_instance();
if ( ! defined( 'USE_VIP_PHPMAILER' ) ) {
define( 'USE_VIP_PHPMAILER', true );
if ( ! Constant_Mocker::defined( 'USE_VIP_PHPMAILER' ) ) {
Constant_Mocker::define( 'USE_VIP_PHPMAILER', true );
}
}

public function tearDown(): void {
parent::tearDown();

Constant_Mocker::clear();
remove_all_filters( 'vip_block_wp_mail' );
}

public function test__all_smtp_servers__not_array() {
$GLOBALS['all_smtp_servers'] = false;

Expand Down Expand Up @@ -67,7 +76,7 @@ public function test__has_tracking_header_with_key() {
}

public function test_load_VIP_PHPMailer() {
$this->assertTrue( class_exists( 'VIP_PHPMailer', false ) );
$this->assertTrue( class_exists( '\Automattic\VIP\Mail\VIP_PHPMailer', false ) );
}

/**
Expand Down Expand Up @@ -137,14 +146,14 @@ public function test_noop_mailer__filter_only() {
set_error_handler( // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_set_error_handler
static function ( $errno, $errstr ) {
restore_error_handler();
throw new Exception( $errstr, $errno ); // phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped
throw new \Exception( $errstr, $errno ); // phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped
},
E_ALL
);

add_filter( 'vip_block_wp_mail', '__return_true' );

$this->expectException( Exception::class );
$this->expectException( \Exception::class );
$this->expectExceptionMessage( 'VIP_Noop_Mailer::send: skipped sending email with subject `Test` to [email protected]' );

wp_mail( '[email protected]', 'Test', 'Should not be sent' );
Expand All @@ -156,20 +165,50 @@ public function test_noop_mailer__constant_and_filter() {
set_error_handler( // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_set_error_handler
static function ( $errno, $errstr ) {
restore_error_handler();
throw new Exception( $errstr, $errno ); // phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped
throw new \Exception( $errstr, $errno ); // phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped
},
E_ALL
);

define( 'VIP_BLOCK_WP_MAIL', true );

Constant_Mocker::define( 'VIP_BLOCK_WP_MAIL', true );
add_filter( 'vip_block_wp_mail', '__return_false' );

$this->expectException( Exception::class );
$this->expectException( \Exception::class );
$this->expectExceptionMessage( 'VIP_Noop_Mailer::send: skipped sending email with subject `Test` to [email protected]' );

wp_mail( '[email protected]', 'Test', 'Should not be sent' );

restore_error_handler();
}

public function test_noop_mailer__constant_only() {
set_error_handler( // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_set_error_handler
static function ( $errno, $errstr ) {
restore_error_handler();
throw new \Exception( $errstr, $errno ); // phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped
},
E_ALL
);

Constant_Mocker::define( 'VIP_BLOCK_WP_MAIL', true );

$this->expectException( \Exception::class );
$this->expectExceptionMessage( 'VIP_Noop_Mailer::send: skipped sending email with subject `Test` to [email protected]' );

wp_mail( '[email protected]', 'Test', 'Should not be sent' );

restore_error_handler();
}

public function test_noop_mailer__constant_filter_false() {
Constant_Mocker::define( 'VIP_BLOCK_WP_MAIL', false );
add_filter( 'vip_block_wp_mail', '__return_false' );

$body = 'Testing123';
wp_mail( '[email protected]', 'Test', $body );

$mailer = tests_retrieve_phpmailer_instance();

$this->assertEquals( $body, $mailer->Body );
}
}
1 change: 1 addition & 0 deletions vip-mail.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

// phpcs:disable Generic.Files.OneObjectStructurePerFile.MultipleFound -- needs refactoring
// phpcs:disable WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase -- PHPMailer does not follow the conventions
namespace Automattic\VIP\Mail;

use PHPMailer\PHPMailer\PHPMailer;

Expand Down

0 comments on commit 09e0e82

Please sign in to comment.