ReplyToGetSetClearTest: test the setting of reply-to address in more depth

This commit:
* Splits the primary tests previously contained in the `testAddressing()` method into two distinct test methods, each using a data provider to allow for adding additional test cases more easily.
* Enhances the tests by not only testing the return value of the `addReplyTo()` method, but also verifying that the `ReplyTo property has been set correctly and contains the expected information.

Includes adding `@covers` tags for these specific methods.
This commit is contained in:
jrfnl 2021-07-11 21:03:48 +02:00
parent badac1cb8e
commit 6ba19a260f
1 changed files with 104 additions and 10 deletions

View File

@ -22,6 +22,110 @@ use PHPMailer\Test\PreSendTestCase;
final class ReplyToGetSetClearTest extends PreSendTestCase
{
/**
* Test adding a non-IDN reply-to address.
*
* @covers \PHPMailer\PHPMailer\PHPMailer::addReplyTo
* @covers \PHPMailer\PHPMailer\PHPMailer::addOrEnqueueAnAddress
* @covers \PHPMailer\PHPMailer\PHPMailer::addAnAddress
* @covers \PHPMailer\PHPMailer\PHPMailer::getReplyToAddresses
*
* @dataProvider dataAddReplyToValidAddressNonIdn
*
* @param string $address The email address to set.
* @param string $name Optional. The name to set.
*/
public function testAddReplyToValidAddressNonIdn($address, $name = null)
{
if (isset($name)) {
$result = $this->Mail->addReplyTo($address, $name);
} else {
$result = $this->Mail->addReplyTo($address);
$name = '';
}
// Test the setting is successful.
self::assertTrue($result, 'Replyto Addressing failed');
// Verify that the address was correctly added to the array.
$retrieved = $this->Mail->getReplyToAddresses();
self::assertIsArray($retrieved, 'ReplyTo property is not an array');
self::assertCount(1, $retrieved, 'ReplyTo property does not contain exactly one address');
self::assertArrayHasKey(
$address,
$retrieved,
'ReplyTo property does not contain an entry with this address as the key'
);
self::assertCount(
2,
$retrieved[$address],
'ReplyTo array for this address does not contain exactly two array items'
);
self::assertSame(
$address,
$retrieved[$address][0],
'ReplyTo array for this address does not contain added address'
);
self::assertSame(
$name,
$retrieved[$address][1],
'ReplyTo array for this address does not contain added name'
);
}
/**
* Data provider.
*
* @return array
*/
public function dataAddReplyToValidAddressNonIdn()
{
return [
'Valid address' => [
'address' => 'a@example.com',
],
'Valid address with name' => [
'address' => 'a@example.com',
'name' => 'ReplyTo name',
],
];
}
/**
* Test adding an invalid non-IDN reply-to address.
*
* @covers \PHPMailer\PHPMailer\PHPMailer::addOrEnqueueAnAddress
* @covers \PHPMailer\PHPMailer\PHPMailer::addAnAddress
*
* @dataProvider dataAddReplyToInvalidAddressNonIdn
*
* @param string $address The email address to set.
*/
public function testAddReplyToInvalidAddressNonIdn($address)
{
// Test the setting fails.
$result = $this->Mail->addReplyTo($address);
self::assertFalse($result, 'Invalid Replyto address accepted');
// Verify that the address was not added to the array.
$retrieved = $this->Mail->getReplyToAddresses();
self::assertIsArray($retrieved, 'ReplyTo property is not an array');
self::assertCount(0, $retrieved, 'ReplyTo property is not empty');
}
/**
* Data provider.
*
* @return array
*/
public function dataAddReplyToInvalidAddressNonIdn()
{
return [
'Invalid domain' => ['a@example..com'],
];
}
/**
* Test low priority.
*/
@ -36,16 +140,6 @@ final class ReplyToGetSetClearTest extends PreSendTestCase
self::assertTrue($this->Mail->preSend(), $this->Mail->ErrorInfo);
}
/**
* Test addressing.
*/
public function testAddressing()
{
self::assertTrue($this->Mail->addReplyTo('a@example.com'), 'Replyto Addressing failed');
self::assertFalse($this->Mail->addReplyTo('a@example..com'), 'Invalid Replyto address accepted');
$this->Mail->clearReplyTos();
}
/**
* Tests CharSet and Unicode -> ASCII conversions for addresses with IDN.
*