'default-gateway', ), ); } ); } /** * Tear down. */ public function tearDown() { parent::tearDown(); PaymentGatewaySuggestions::delete_specs_transient(); remove_all_filters( 'transient_' . PaymentGatewaySuggestions::SPECS_TRANSIENT_NAME ); } /** * Add test specs. */ public function get_mock_specs() { return array( array( 'id' => 'mock-gateway', 'is_visible' => (object) array( 'type' => 'base_location_country', 'value' => 'ZA', 'operation' => '=', ), ), ); } /** * Test that default gateways are provided when remote sources don't exist. */ public function test_get_default_specs() { remove_all_filters( 'transient_' . PaymentGatewaySuggestions::SPECS_TRANSIENT_NAME ); add_filter( 'woocommerce_admin_payment_gateway_suggestions_data_sources', function() { return array(); }, PHP_INT_MAX ); $specs = PaymentGatewaySuggestions::get_specs(); $defaults = DefaultPaymentGateways::get_all(); $this->assertEquals( $defaults, $specs ); } /** * Test that specs are read from cache when they exist. */ public function test_specs_transient() { set_transient( PaymentGatewaySuggestions::SPECS_TRANSIENT_NAME, array( array( 'id' => 'mock-gateway1', ), array( 'id' => 'mock-gateway2', ), ) ); $suggestions = PaymentGatewaySuggestions::get_suggestions(); $this->assertCount( 2, $suggestions ); } /** * Test that non-matched suggestions are not shown. */ public function test_non_matching_suggestions() { update_option( 'woocommerce_default_country', 'US' ); set_transient( PaymentGatewaySuggestions::SPECS_TRANSIENT_NAME, $this->get_mock_specs() ); $suggestions = PaymentGatewaySuggestions::get_suggestions(); $this->assertCount( 0, $suggestions ); } /** * Test that matched suggestions are shown. */ public function test_matching_suggestions() { update_option( 'woocommerce_default_country', 'ZA' ); set_transient( PaymentGatewaySuggestions::SPECS_TRANSIENT_NAME, $this->get_mock_specs() ); $suggestions = PaymentGatewaySuggestions::get_suggestions(); $this->assertEquals( 'mock-gateway', $suggestions[0]->id ); } /** * Test that the transient is deleted on locale change. */ public function test_delete_transient_on_locale_change() { set_transient( PaymentGatewaySuggestions::SPECS_TRANSIENT_NAME, array( array( 'id' => 'mock-gateway', ), ) ); add_filter( 'get_available_languages', function( $languages ) { $languages[] = 'zh_TW'; return $languages; } ); $wp_locale_switcher = new WP_Locale_switcher(); $wp_locale_switcher->switch_to_locale( 'zh_TW' ); $suggestions = PaymentGatewaySuggestions::get_suggestions(); $wp_locale_switcher->switch_to_locale( 'en_US' ); $this->assertEquals( 'default-gateway', $suggestions[0]->id ); } /** * Test that the locale is filter based on current store locale. */ public function test_localization() { $wp_locale_switcher = new WP_Locale_switcher(); $wp_locale_switcher->switch_to_locale( 'en_US' ); $specs = array( (object) array( 'id' => 'mock-gateway', 'locales' => array( (object) array( 'locale' => 'en_US', 'title' => 'Mock Gateway', ), (object) array( 'locale' => 'zh_TW', 'title' => '測試付款方式', ), ), ), ); $localized_specs = PaymentGatewaySuggestions::localize( $specs ); $this->assertEquals( 'Mock Gateway', $localized_specs[0]->title ); $this->assertCount( 1, $localized_specs ); } }