kompass/plugins/pfadfinden-theme-updater/tests/Pfadfinden/WordPress/Tests/ThemeUpdaterSettingsTest.php
2023-12-30 14:28:21 +01:00

123 lines
3.1 KiB
PHP

<?php
namespace Pfadfinden\WordPress\Tests;
use Pfadfinden\WordPress\ThemeUpdaterSettings;
use PHPUnit_Framework_MockObject_MockObject as MockObject;
use PHPUnit_Framework_MockObject_Builder_InvocationMocker as BuilderInvocationMocker;
class ThemeUpdaterSettingsTest extends \WP_UnitTestCase
{
/**
* @return ThemeUpdaterSettings|MockObject {
* @method BuilderInvocationMocker method(string)
* }
*/
protected function createMock()
{
return $this->getMockBuilder( 'Pfadfinden\WordPress\ThemeUpdaterSettings' )
->enableProxyingToOriginalMethods()
->getMock();
}
/**
* @return array<array {
* @type array<string> $0
* }>
*/
public function pluginActionProvider()
{
return array(
array( array() ),
array( array( 'edit' => '<a href="edit-url.php">Edit</a>' ) ),
);
}
/**
* @dataProvider pluginActionProvider
* @param array<string> $old_actions
*/
public function testFilterPluginActions( array $old_actions )
{
$settings = $this->createMock();
$new_actions = $settings->filterPluginActions( $old_actions, 'pfadfinden-theme-updater/pfadfinden-theme-updater.php', array(), 'All' );
$this->assertCount( 1, array_diff_assoc( $new_actions, $old_actions ), 'Our action gets added.' );
$this->assertCount( 0, array_diff_assoc( $old_actions, $new_actions ), 'No actions are removed.' );
}
public function testRegisterSettings()
{
global $wp_settings_fields;
$settings = $this->createMock();
$settings->registerSettings();
$sections = $settings->getSections();
$this->assertCount( 1, $sections, 'One section is generated.' );
$fields = $settings->getFieldsForSection( $sections[0] );
$this->assertEquals( array( 'key', 'keep-settings' ), array_keys( $fields ), 'Known settings are there.' );
}
public function testSanitizeOptionDefaults()
{
$settings = $this->createMock();
$this->assertEquals(
$settings->getDefaults(),
$settings->sanitizeOptions( array() ),
'sanitizeOptions() adds in default values if missing.'
);
}
/**
* @return array<array {
* @type string $0
* @type string $1
* @type int $2
* }>
*/
public function keyProvider()
{
return array(
array( '', '', 0 ),
array( 'ABCDEFGHIJ', 'ABCDEFGHIJ', 0 ),
array( 'abcdefghij', 'abcdefghij', 0 ),
array( '1234567890', '1234567890', 0 ),
array( '123456789', '123456789', 1 ),
array( '12345678901', '12345678901', 1 ),
array( ' 1234567890', '1234567890', 0 ),
);
}
/**
* @dataProvider keyProvider
* @param string $key
* @param string $expected
* @param int $errorCount
*/
public function testSanitizeKeyOption( $key, $expected, $errorCount )
{
$settings = $this->createMock();
$sanitized = $settings->sanitizeOptions( array( 'key' => $key ) )['key'];
$this->assertEquals( $expected, $sanitized, 'Expected sanitized value.' );
$this->assertCount( $errorCount, $settings->getErrors(), 'Number of generated errors.' );
}
public function testDefaults()
{
$defaults = $this->createMock()->getDefaults();
$this->assertEquals(
array( 'key', 'keep-settings' ),
array_keys( $defaults ),
'Defaults for all options.'
);
}
}