PHP code example of greys / wc-subscriptions-tests
1. Go to this page and download the library: Download greys/wc-subscriptions-tests library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
greys / wc-subscriptions-tests example snippets
use Greys\WooCommerce\Subscriptions\Tests\UnitTestCase;
use Greys\WooCommerce\Subscriptions\Tests\Helpers\Subscription;
class My_Subscription_Test extends UnitTestCase {
public function test_subscription_creation() {
// Arrange - Create a subscription using helper.
$subscription = Subscription::create_subscription( array(
'status' => 'active',
'billing_period' => 'month',
'billing_interval' => 1,
) );
// Act - Add to tracked subscriptions for cleanup.
$this->subscription_ids[] = $subscription->get_id();
// Assert - Use custom assertions.
$this->assertSubscriptionActive( $subscription );
$this->assertSubscriptionSchedule( 'month', 1, $subscription );
}
}
// Simple subscription
$subscription = Subscription::create_subscription();
// Subscription with trial
$subscription = Subscription::create_subscription( array(
'trial_end' => gmdate( 'Y-m-d H:i:s', strtotime( '+7 days' ) ),
) );
// Add products
$product = Subscription::create_subscription_product( array(
'name' => 'Monthly Plan',
'regular_price' => '29.99',
) );
Subscription::add_product( $subscription, $product->get_id() );
use Greys\WooCommerce\Subscriptions\Tests\Helpers\Renewal;
public function test_renewal_order_creation() {
// Arrange.
$subscription = Subscription::create_subscription();
// Act.
$renewal_order = Renewal::create_renewal_order( $subscription );
// Assert.
$this->assertRenewalOrderCreated( $subscription );
$this->assertEquals( 'pending', $renewal_order->get_status() );
}
use Greys\WooCommerce\Subscriptions\Tests\Helpers\RecurringCart;
public function test_recurring_cart() {
// Arrange.
$product = Subscription::create_subscription_product();
// Act.
$cart_key = RecurringCart::add_subscription_to_cart(
$product->get_id(),
2 // quantity
);
// Assert.
$this->assertNotEmpty( $cart_key );
$this->assertEquals( 2, WC()->cart->get_cart_contents_count() );
}
// Status assertions
$this->assertSubscriptionActive( $subscription );
$this->assertSubscriptionOnHold( $subscription );
$this->assertSubscriptionCancelled( $subscription );
// Schedule assertions
$this->assertSubscriptionSchedule( 'month', 1, $subscription );
$this->assertSubscriptionDate( 'next_payment', '2024-02-01', $subscription );
// Content assertions
$this->assertSubscriptionContainsProduct( $product_id, $subscription );
$this->assertSubscriptionItemCount( 3, $subscription );
$this->assertSubscriptionTotal( 99.99, $subscription );
// Trial assertions
$this->assertSubscriptionHasTrial( $subscription );
$this->assertSubscriptionNoTrial( $subscription );
// Payment assertions
$this->assertSubscriptionPaymentMethod( 'stripe', $subscription );
$this->assertSubscriptionManual( $subscription );
$this->assertSubscriptionFailedPaymentCount( 2, $subscription );
// Relationship assertions
$this->assertSubscriptionHasParentOrder( $subscription );
$this->assertSubscriptionHasRenewalOrders( $subscription, 3 );
$this->assertRenewalOrderCreated( $subscription );
$mock_subscription = new \WCS\Testing\Mocks\WC_Subscription_Mock();
$mock_subscription->set_billing_period( 'month' );
$mock_subscription->set_billing_interval( 1 );
$mock_subscription->update_dates( array(
'start' => gmdate( 'Y-m-d H:i:s' ),
'next_payment' => gmdate( 'Y-m-d H:i:s', strtotime( '+1 month' ) ),
) );
public function test_payment_failure_handling() {
// Arrange.
$subscription = Subscription::create_subscription( array(
'status' => 'active',
) );
// Act.
Subscription::process_payment( $subscription, false );
// Assert.
$this->assertSubscriptionOnHold( $subscription );
$this->assertSubscriptionFailedPaymentCount( 1, $subscription );
}
public function test_trial_period() {
// Arrange.
$trial_end = gmdate( 'Y-m-d H:i:s', strtotime( '+14 days' ) );
$subscription = Subscription::create_subscription( array(
'trial_end' => $trial_end,
) );
// Assert.
$this->assertSubscriptionHasTrial( $subscription );
$this->assertSubscriptionDate( 'trial_end', $trial_end, $subscription );
}
public function test_renewal_retry_mechanism() {
// Arrange.
$subscription = Subscription::create_subscription();
$failed_renewal = Renewal::create_failed_renewal_order(
$subscription,
'Insufficient funds'
);
// Act.
Renewal::trigger_renewal_retry( $failed_renewal, 1 );
// Assert.
$this->assertSubscriptionOnHold( $subscription );
$retry_scheduled = as_next_scheduled_action(
'woocommerce_subscription_payment_retry',
array( $failed_renewal->get_id() )
);
$this->assertNotFalse( $retry_scheduled );
}
public function test_mixed_cart_checkout() {
// Arrange.
$regular_product = WC_Helper_Product::create_simple_product();
$subscription_product = Subscription::create_subscription_product();
// Act.
$cart = RecurringCart::create_mixed_cart( array(
array( 'id' => $regular_product->get_id(), 'quantity' => 1 ),
array( 'id' => $subscription_product->get_id(), 'quantity' => 1, 'is_subscription' => true ),
) );
// Assert.
$this->assertCount( 2, $cart );
$this->assertTrue( WC()->cart->contains_subscription() );
}
// Load WC Subscriptions mock if not available
if ( ! class_exists( 'WC_Subscription' ) ) {
S_INIT_TIMESTAMP', time() );
}
class MyTest extends UnitTestCase {
// Scheduled actions are automatically cleared
}
PaymentGateway::mock_gateway( 'stripe', array(
'supports' => array( 'subscriptions', 'subscription_cancellation' ),
) );