Sort the results of WC_Install::get_tables()
Since custom tables can be registered within WooCommerce via the 'woocommerce_install_get_tables' filter, it's helpful to ensure that `WC_Install::get_tables()` automatically sorts the table names alphabetically. This helps avoid false failures when testing a plugin that uses a custom table against the WooCommerce core test suite, as queries like `WC_Tests_Install::test_get_tables()` assumes that tables will be returned in alphabetical order.
This commit is contained in:
parent
8a60d0aee9
commit
74a3f1d6d8
|
@ -809,6 +809,9 @@ CREATE TABLE {$wpdb->prefix}woocommerce_termmeta (
|
|||
*/
|
||||
$tables = apply_filters( 'woocommerce_install_get_tables', $tables );
|
||||
|
||||
// Sort the tables alphabetically.
|
||||
sort( $tables );
|
||||
|
||||
return $tables;
|
||||
}
|
||||
|
||||
|
|
|
@ -146,4 +146,31 @@ class WC_Tests_Install extends WC_Unit_Test_Case {
|
|||
|
||||
return $tables;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test - WC_Install::get_tables() should sort tables alphabetically.
|
||||
*/
|
||||
public function test_get_tables_sorts_results() {
|
||||
global $wpdb;
|
||||
|
||||
add_filter( 'woocommerce_install_get_tables', array( $this, 'append_tables_for_sorting' ) );
|
||||
|
||||
$sorted = WC_Install::get_tables();
|
||||
sort( $sorted );
|
||||
|
||||
$this->assertEquals( $sorted, WC_Install::get_tables() );
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter callback for test_get_tables_sorts_results().
|
||||
*/
|
||||
public function append_tables_for_sorting( $tables ) {
|
||||
global $wpdb;
|
||||
|
||||
$tables[] = "{$wpdb->prefix}wc_another_table";
|
||||
$tables[] = "{$wpdb->prefix}woocommerce_another_one";
|
||||
$tables[] = "{$wpdb->prefix}woocommerce_yet_another_table";
|
||||
|
||||
return $tables;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue