diff options
Diffstat (limited to 'tests/test-post-order.php')
-rw-r--r-- | tests/test-post-order.php | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/tests/test-post-order.php b/tests/test-post-order.php new file mode 100644 index 0000000..b5b26c7 --- /dev/null +++ b/tests/test-post-order.php @@ -0,0 +1,109 @@ +<?php +/** + * Class TestPostOrder + * + * @package DraggablePostOrder + */ + +/** + * Sample test case. + */ +class TestPostOrder extends WP_UnitTestCase { + + /** + * The post type for testing. + * + * @var WP_Post_Type + */ + public WP_Post_Type $test_post_type; + + /** + * Runs the routine before each test is executed. + */ + public function setUp(): void { + parent::setUp(); + + $this->test_post_type = register_post_type( + 'test', + [ + 'supports' => [ 'draggable-post-order' ], + 'has_archive' => true, + ] + ); + + // since tests are loaded after init, run init manually. + \Draggable_Post_Order\Draggable_Post_Order::init(); + } + + /** + * Test query manipulation on meta_query + */ + public function test_query_manipulation_meta_query() { + $this->go_to( '/?post_type=test' ); + $wp_query = $GLOBALS['wp_query']; + + $meta_sub_query = [ + 'relation' => 'OR', + 'draggable-post-order-clause' => [ + 'key' => 'draggable-post-order', + 'type' => 'NUMERIC', + ], + // get all posts without the meta as well. + 'draggable-post-order-exists-clause' => [ + 'key' => 'draggable-post-order', + 'compare' => 'NOT EXISTS', + ], + ]; + $this->assertEquals( [ $meta_sub_query ], $wp_query->get( 'meta_query' ) ); + } + + /** + * Test query manipulation on orderby with ASC + */ + public function test_query_manipulation_orderby_asc() { + $this->go_to( '/?post_type=test' ); + $wp_query = $GLOBALS['wp_query']; + + $orderby = [ + 'draggable-post-order-clause' => 'ASC', + 'draggable-post-order-exists-clause' => 'ASC', + ]; + $this->assertEquals( $orderby, $wp_query->get( 'orderby' ) ); + } + + /** + * Test query manipulation on orderby with DESC + */ + public function test_query_manipulation_orderby_desc() { + tests_add_filter( + 'draggable_post_order_order', + function ( $order, $post_type, $query ) { + $this->assertEquals( 'ASC', $order ); + $this->assertEquals( 'test', $post_type ); + $this->assertTrue( $query->is_archive ); + + return 'DESC'; + }, + 10, + 3 + ); + $this->go_to( '/?post_type=test' ); + $wp_query = $GLOBALS['wp_query']; + + $orderby = [ + 'draggable-post-order-clause' => 'DESC', + 'draggable-post-order-exists-clause' => 'DESC', + ]; + $this->assertEquals( $orderby, $wp_query->get( 'orderby' ) ); + } + + /** + * Test that query is not manipulated on unrelated pages + */ + public function test_query_manipulation_orderby_none() { + $this->go_to( '/' ); + $wp_query = $GLOBALS['wp_query']; + + $this->assertEmpty( $wp_query->get( 'orderby' ) ); + } +} |