<?php use SkyVerge\WooCommerce\PluginFramework\v5_10_0\Settings_API\Setting; use SkyVerge\WooCommerce\PluginFramework\v5_10_0\SV_WC_Plugin_Exception; class SettingTest extends \Codeception\TestCase\WPTestCase { /** @var \IntegrationTester */ protected $tester; protected function _before() { } protected function _after() { } /** Tests *********************************************************************************************************/ /** * @see Setting::set_default() * * @param mixed $value default value to try and set * @param string $expected expected default value * @param bool $is_multi whether the setting should be multi * * @dataProvider provider_set_default */ public function test_set_default( $value, $expected, $is_multi = false ) { $setting = new Setting(); $setting->set_type( Setting::TYPE_STRING ); $setting->set_is_multi( $is_multi ); $setting->set_default( $value ); $this->assertSame( $expected, $setting->get_default() ); } /** @see test_set_default() */ public function provider_set_default() { return [ [ 'valid', 'valid' ], [ 1, null ], [ [ 'string-0', 'string-1' ], [ 'string-0', 'string-1' ], true ], [ [ 'string-0', 1 ], [ 'string-0' ], true ], [ [ 1, 2 ], null, true ], [ [], null, true ], [ 'valid', [ 'valid' ], true ], [ 1, null, true ], [ null, null ], [ null, null, true ], ]; } /** * @see Setting::update_value() * * @param mixed $value value to pass to method * @param string $type setting type * @param array $options setting options * @param mixed $expected setting value after execution * @param bool $exception whether an exception is expected * * @dataProvider provider_update_value */ public function test_update_value( $value, $type, $options, $expected, $exception ) { if ( $exception ) { $this->expectException( SV_WC_Plugin_Exception::class ); } $setting = new Setting(); $setting->set_type( $type ); $setting->set_options( $options ); $setting->update_value( $value ); $this->assertSame( $expected, $setting->get_value() ); } /** * Provider for test_update_value() * * @return array */ public function provider_update_value() { require_once( 'woocommerce/Settings_API/Setting.php' ); return [ [ 'valid', Setting::TYPE_STRING, [], 'valid', false ], [ 123, Setting::TYPE_STRING, [], null, true ], [ 'green', Setting::TYPE_STRING, [ 'green', 'red' ], 'green', false ], [ 'not an option', Setting::TYPE_STRING, [ 'green', 'red' ], null, true ], [ 'https://skyverge.com/', Setting::TYPE_URL, [], 'https://skyverge.com/', false ], [ 'file:///tmp/', Setting::TYPE_URL, [], null, true ], [ 'https://skyverge.com/', Setting::TYPE_URL, [ 'https://skyverge.com/', 'http://skyverge.com/' ], 'https://skyverge.com/', false ], [ 'https://google.com/', Setting::TYPE_URL, [ 'https://skyverge.com/', 'http://skyverge.com/' ], null, true ], [ 'test@example.com', Setting::TYPE_EMAIL, [], 'test@example.com', false ], [ 'not-an-email.com', Setting::TYPE_EMAIL, [], null, true ], [ 'test@example.com', Setting::TYPE_EMAIL, [ 'test@example.com' ], 'test@example.com', false ], [ 'another@example.com', Setting::TYPE_EMAIL, [ 'test@example.com' ], null, true ], [ 12345, Setting::TYPE_INTEGER, [], 12345, false ], [ 1.345, Setting::TYPE_INTEGER, [], null, true ], [ '234', Setting::TYPE_INTEGER, [], null, true ], [ 1, Setting::TYPE_INTEGER, [ 1, 2 ], 1, false ], [ 3, Setting::TYPE_INTEGER, [ 1, 2 ], null, true ], [ 12345, Setting::TYPE_FLOAT, [], 12345, false ], [ 1.345, Setting::TYPE_FLOAT, [], 1.345, false ], [ '234', Setting::TYPE_FLOAT, [], null, true ], [ 1.5, Setting::TYPE_FLOAT, [ 1.5, 2.5 ], 1.5, false ], [ 3.5, Setting::TYPE_FLOAT, [ 1.5, 2.5 ], null, true ], [ true, Setting::TYPE_BOOLEAN, [], true, false ], [ 'yes', Setting::TYPE_BOOLEAN, [], null, true ], [ 1, Setting::TYPE_BOOLEAN, [], null, true ], // it beats me why someone would have a boolean setting with only one option, but in theory it is possible [ true, Setting::TYPE_BOOLEAN, [ true ], true, false ], [ false, Setting::TYPE_BOOLEAN, [ true ], null, true ], ]; } /** * @see Setting::validate_value() * * @param mixed $value value to pass to method * @param string $type setting type * @param bool $expected whether the value should be considered valid or not * * @dataProvider provider_validate_value */ public function test_validate_value( $value, $type, $expected ) { $setting = new Setting(); $setting->set_type( $type ); $this->assertSame( $expected, $setting->validate_value( $value ) ); } /** * Provider for test_validate_value() * * @return array */ public function provider_validate_value() { require_once( 'woocommerce/Settings_API/Setting.php' ); return [ [ 'example', Setting::TYPE_STRING, true ], [ 3.1415926, Setting::TYPE_STRING, false ], [ 'https://skyverge.com/', Setting::TYPE_URL, true ], [ 'file:///tmp/', Setting::TYPE_URL, false ], [ 'example', Setting::TYPE_URL, false ], [ 'test@example.com', Setting::TYPE_EMAIL, true ], [ 'not-an-email.com', Setting::TYPE_EMAIL, false ], [ '', Setting::TYPE_EMAIL, false ], [ 12345, Setting::TYPE_INTEGER, true ], [ 1.345, Setting::TYPE_INTEGER, false ], [ '234', Setting::TYPE_INTEGER, false ], [ '2.4', Setting::TYPE_INTEGER, false ], [ 'hey', Setting::TYPE_INTEGER, false ], [ 12345, Setting::TYPE_FLOAT, true ], [ 1.345, Setting::TYPE_FLOAT, true ], [ '234', Setting::TYPE_FLOAT, false ], [ '2.4', Setting::TYPE_FLOAT, false ], [ 'hey', Setting::TYPE_FLOAT, false ], [ true, Setting::TYPE_BOOLEAN, true ], [ false, Setting::TYPE_BOOLEAN, true ], [ 'yes', Setting::TYPE_BOOLEAN, false ], [ 'no', Setting::TYPE_BOOLEAN, false ], [ 1, Setting::TYPE_BOOLEAN, false ], [ 0, Setting::TYPE_BOOLEAN, false ], ]; } /** * @see Setting::set_options() * * @param string $setting_type setting type * @param array $input input options * @param array $expected expected return options * * @dataProvider provider_set_options */ public function test_set_options( $setting_type, $input, $expected ) { $setting = new Setting(); $setting->set_type( $setting_type ); $setting->set_options( $input ); $this->assertEquals( $expected, $setting->get_options() ); } /** * Provider for test_set_options() * * @return array */ public function provider_set_options() { require_once( 'woocommerce/Settings_API/Setting.php' ); return [ [ Setting::TYPE_STRING, [ 'example 1', 'example 2', 0 ], [ 'example 1', 'example 2' ] ], [ Setting::TYPE_URL, [ 'http://www.example1.test', 'https://www.example2.test', 'invalid-url' ], [ 'http://www.example1.test', 'https://www.example2.test' ] ], [ Setting::TYPE_EMAIL, [ 'example@example1.test', 'example@example2.test', 'invalid-email' ], [ 'example@example1.test', 'example@example2.test' ] ], [ Setting::TYPE_INTEGER, [ - 1, 1, 2, 2.4 ], [ - 1, 1, 2 ] ], [ Setting::TYPE_FLOAT, [ 1.5, 2.5, - 3.0, 'invalid-float' ], [ 1.5, 2.5, - 3.0 ] ], [ Setting::TYPE_BOOLEAN, [ true, false, 'invalid-boolean' ], [ true, false ] ], ]; } }