123 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			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.'
 | 
						|
		);
 | 
						|
	}
 | 
						|
}
 |