From 0d1da4356173e926fdcac42462daa4fcb7617109 Mon Sep 17 00:00:00 2001 From: Daniel Weipert Date: Mon, 21 Dec 2020 16:11:17 +0100 Subject: Initial commit --- tests/bootstrap.php | 31 +++++++++++++ tests/test-post-order.php | 109 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 140 insertions(+) create mode 100644 tests/bootstrap.php create mode 100644 tests/test-post-order.php (limited to 'tests') diff --git a/tests/bootstrap.php b/tests/bootstrap.php new file mode 100644 index 0000000..67d85f5 --- /dev/null +++ b/tests/bootstrap.php @@ -0,0 +1,31 @@ +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' ) ); + } +} -- cgit v1.2.3