@@ -824,9 +824,16 @@ public function test_1_wcs_get_subscriptions() {
824
824
}
825
825
826
826
/**
827
- * Deals with cases where we're filtering for status
827
+ * Deals with cases where we're querying by status.
828
+ *
829
+ * Status can be specified in two different ways. Traditionally, via the
830
+ * 'subscription_status' argument, but 'status' can also be used directly
831
+ * since 7.3.0.
832
+ *
833
+ * @testWith ["subscription_status"]
834
+ * ["status"]
828
835
*/
829
- public function test_2_wcs_get_subscriptions () {
836
+ public function test_2_wcs_get_subscriptions ( string $ status_key ) {
830
837
831
838
$ subscription_1 = WCS_Helper_Subscription::create_subscription (
832
839
array (
@@ -877,7 +884,7 @@ public function test_2_wcs_get_subscriptions() {
877
884
);
878
885
879
886
// Check for on-hold
880
- $ subscriptions = wcs_get_subscriptions ( array ( ' subscription_status ' => 'on-hold ' ) );
887
+ $ subscriptions = wcs_get_subscriptions ( array ( $ status_key => 'on-hold ' ) );
881
888
882
889
$ this ->assertIsArray ( $ subscriptions );
883
890
$ this ->assertEquals ( 1 , count ( $ subscriptions ) );
@@ -892,7 +899,7 @@ public function test_2_wcs_get_subscriptions() {
892
899
unset( $ subscriptions );
893
900
894
901
// Pending
895
- $ subscriptions = wcs_get_subscriptions ( array ( ' subscription_status ' => 'pending ' ) );
902
+ $ subscriptions = wcs_get_subscriptions ( array ( $ status_key => 'pending ' ) );
896
903
897
904
$ this ->assertIsArray ( $ subscriptions );
898
905
$ this ->assertEquals ( 2 , count ( $ subscriptions ) );
@@ -907,7 +914,7 @@ public function test_2_wcs_get_subscriptions() {
907
914
unset( $ subscriptions );
908
915
909
916
// Switched
910
- $ subscriptions = wcs_get_subscriptions ( array ( ' subscription_status ' => 'switched ' ) );
917
+ $ subscriptions = wcs_get_subscriptions ( array ( $ status_key => 'switched ' ) );
911
918
912
919
$ this ->assertIsArray ( $ subscriptions );
913
920
$ this ->assertEquals ( 1 , count ( $ subscriptions ) );
@@ -922,7 +929,7 @@ public function test_2_wcs_get_subscriptions() {
922
929
unset( $ subscriptions );
923
930
924
931
// Any
925
- $ subscriptions = wcs_get_subscriptions ( array ( ' subscription_status ' => 'any ' ) );
932
+ $ subscriptions = wcs_get_subscriptions ( array ( $ status_key => 'any ' ) );
926
933
927
934
$ this ->assertIsArray ( $ subscriptions );
928
935
$ this ->assertEquals ( 8 , count ( $ subscriptions ) );
@@ -937,14 +944,14 @@ public function test_2_wcs_get_subscriptions() {
937
944
unset( $ subscriptions );
938
945
939
946
// Trash
940
- $ subscriptions = wcs_get_subscriptions ( array ( ' subscription_status ' => 'trash ' ) );
947
+ $ subscriptions = wcs_get_subscriptions ( array ( $ status_key => 'trash ' ) );
941
948
942
949
$ this ->assertIsArray ( $ subscriptions );
943
950
$ this ->assertEmpty ( $ subscriptions );
944
951
unset( $ subscriptions );
945
952
946
953
// Active
947
- $ subscriptions = wcs_get_subscriptions ( array ( ' subscription_status ' => 'active ' ) );
954
+ $ subscriptions = wcs_get_subscriptions ( array ( $ status_key => 'active ' ) );
948
955
949
956
$ this ->assertIsArray ( $ subscriptions );
950
957
$ this ->assertEquals ( 1 , count ( $ subscriptions ) );
@@ -959,7 +966,7 @@ public function test_2_wcs_get_subscriptions() {
959
966
unset( $ subscriptions );
960
967
961
968
// Cancelled
962
- $ subscriptions = wcs_get_subscriptions ( array ( ' subscription_status ' => 'cancelled ' ) );
969
+ $ subscriptions = wcs_get_subscriptions ( array ( $ status_key => 'cancelled ' ) );
963
970
964
971
$ this ->assertIsArray ( $ subscriptions );
965
972
$ this ->assertEquals ( 1 , count ( $ subscriptions ) );
@@ -974,7 +981,7 @@ public function test_2_wcs_get_subscriptions() {
974
981
unset( $ subscriptions );
975
982
976
983
// Expired
977
- $ subscriptions = wcs_get_subscriptions ( array ( ' subscription_status ' => 'expired ' ) );
984
+ $ subscriptions = wcs_get_subscriptions ( array ( $ status_key => 'expired ' ) );
978
985
979
986
$ this ->assertIsArray ( $ subscriptions );
980
987
$ this ->assertEquals ( 1 , count ( $ subscriptions ) );
@@ -989,7 +996,7 @@ public function test_2_wcs_get_subscriptions() {
989
996
unset( $ subscriptions );
990
997
991
998
// Pending Cancellation
992
- $ subscriptions = wcs_get_subscriptions ( array ( ' subscription_status ' => 'pending-cancel ' ) );
999
+ $ subscriptions = wcs_get_subscriptions ( array ( $ status_key => 'pending-cancel ' ) );
993
1000
994
1001
$ this ->assertIsArray ( $ subscriptions );
995
1002
$ this ->assertEquals ( 1 , count ( $ subscriptions ) );
@@ -1006,7 +1013,7 @@ public function test_2_wcs_get_subscriptions() {
1006
1013
$ is_hpos_enabled = wcs_is_custom_order_tables_usage_enabled ();
1007
1014
1008
1015
// An invalid status
1009
- $ subscriptions = wcs_get_subscriptions ( array ( ' subscription_status ' => 'rubbish ' ) );
1016
+ $ subscriptions = wcs_get_subscriptions ( array ( $ status_key => 'rubbish ' ) );
1010
1017
1011
1018
if ( $ is_hpos_enabled ) {
1012
1019
// No subscriptions should match the invalid status.
@@ -1029,7 +1036,7 @@ public function test_2_wcs_get_subscriptions() {
1029
1036
unset( $ subscriptions );
1030
1037
1031
1038
// An invalid status is ignored and does not apply as a clause to the query, while the valid status still applies.
1032
- $ subscriptions = wcs_get_subscriptions ( array ( ' subscription_status ' => [ 'rubbish ' , 'active ' ] ) );
1039
+ $ subscriptions = wcs_get_subscriptions ( array ( $ status_key => [ 'rubbish ' , 'active ' ] ) );
1033
1040
1034
1041
$ this ->assertIsArray ( $ subscriptions );
1035
1042
$ this ->assertEquals ( 1 , count ( $ subscriptions ) );
@@ -1117,6 +1124,52 @@ public function test_5_wcs_get_subscriptions() {
1117
1124
$ this ->assertEquals ( $ subscriptions , $ correct_order );
1118
1125
}
1119
1126
1127
+ /**
1128
+ * Since 7.3.0, the number of queries accepted by wcs_get_subscriptions() has broadened,
1129
+ * and arbitrary arguments can be provided (chiefly to open up access to the features of
1130
+ * WooCommerce's own order queries).
1131
+ *
1132
+ * @return void
1133
+ */
1134
+ public function test_wcs_get_subscriptions_wc_order_query_compat () {
1135
+ $ old_subscription = WCS_Helper_Subscription::create_subscription (
1136
+ array (
1137
+ 'status ' => 'pending ' ,
1138
+ 'start_date ' => '2024-12-31 00:00:00 ' ,
1139
+ 'customer_id ' =>
wp_create_user (
'withnail ' ,
'x ' ,
'[email protected] ' ),
1140
+ )
1141
+ );
1142
+
1143
+ $ new_subscription = WCS_Helper_Subscription::create_subscription (
1144
+ array (
1145
+ 'status ' => 'pending ' ,
1146
+ 'start_date ' => '2025-12-31 00:00:00 ' ,
1147
+ 'customer_id ' =>
wp_create_user (
'marwood ' ,
'x ' ,
'[email protected] ' ),
1148
+ )
1149
+ );
1150
+
1151
+ $ old_subscription ->set_date_created ( '2024-12-31 00:00:00 ' );
1152
+ $ new_subscription ->set_date_created ( '2025-12-31 00:00:00 ' );
1153
+ $ old_subscription ->save ();
1154
+ $ new_subscription ->save ();
1155
+
1156
+ $ old_subscriptions = wcs_get_subscriptions ( array ( 'date_created ' => '<=2025-06-01 ' ) );
1157
+ $ this ->assertCount ( 1 , $ old_subscriptions , '`WC_Order_Query` args such as `date_created` can be used when querying for subscriptions. ' );
1158
+ $ this ->assertEquals ( $ old_subscription ->get_id (), current ( $ old_subscriptions )->get_id (), 'The correct subscription is returned. ' );
1159
+
1160
+ // Watch for and capture the query arguments passed to WC_Order_Query.
1161
+ $ query_args = array ();
1162
+ $ query_arg_watcher = function ( $ query , $ args ) use ( &$ query_args ) {
1163
+ $ query_args = $ args ;
1164
+ return $ query ;
1165
+ };
1166
+
1167
+ add_filter ( 'woocommerce_order_query ' , $ query_arg_watcher , 10 , 2 );
1168
+ wcs_get_subscriptions ( array ( 'foo_bar ' => 'baz ' ) );
1169
+ $ this ->assertArrayHasKey ( 'foo_bar ' , $ query_args , 'When querying subscriptions, and additional or arbitrary arguments are also passed to `WC_Order_Query`. ' );
1170
+ remove_filter ( 'woocommerce_order_query ' , $ query_arg_watcher );
1171
+ }
1172
+
1120
1173
/**
1121
1174
* Test for non-existent product
1122
1175
*/
0 commit comments