123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479 |
- <?php
- namespace Test\Integration;
- require_once dirname(__DIR__) . '/Setup.php';
- use DateTime;
- use DateTimeZone;
- use Test;
- use Test\Setup;
- use Braintree;
- class SubscriptionSearchTest extends Setup
- {
- public function testSearch_planIdIs()
- {
- $creditCard = SubscriptionHelper::createCreditCard();
- $triallessPlan = SubscriptionHelper::triallessPlan();
- $trialPlan = SubscriptionHelper::trialPlan();
- $trialSubscription = Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $trialPlan['id'],
- 'price' => '1'
- ])->subscription;
- $triallessSubscription = Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $triallessPlan['id'],
- 'price' => '1'
- ])->subscription;
- $collection = Braintree\Subscription::search([
- Braintree\SubscriptionSearch::planId()->is('integration_trial_plan'),
- Braintree\SubscriptionSearch::price()->is('1')
- ]);
- $this->assertTrue(Test\Helper::includes($collection, $trialSubscription));
- $this->assertFalse(Test\Helper::includes($collection, $triallessSubscription));
- }
- public function test_noRequestsWhenIterating()
- {
- $resultsReturned = false;
- $collection = Braintree\Subscription::search([
- Braintree\SubscriptionSearch::planId()->is('imaginary')
- ]);
- foreach ($collection as $transaction) {
- $resultsReturned = true;
- break;
- }
- $this->assertSame(0, $collection->maximumCount());
- $this->assertEquals(false, $resultsReturned);
- }
- public function testSearch_inTrialPeriod()
- {
- $creditCard = SubscriptionHelper::createCreditCard();
- $triallessPlan = SubscriptionHelper::triallessPlan();
- $trialPlan = SubscriptionHelper::trialPlan();
- $trialSubscription = Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $trialPlan['id'],
- 'price' => '1'
- ])->subscription;
- $triallessSubscription = Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $triallessPlan['id'],
- 'price' => '1'
- ])->subscription;
- $subscriptions_in_trial = Braintree\Subscription::search([
- Braintree\SubscriptionSearch::inTrialPeriod()->is(true)
- ]);
- $this->assertTrue(Test\Helper::includes($subscriptions_in_trial, $trialSubscription));
- $this->assertFalse(Test\Helper::includes($subscriptions_in_trial, $triallessSubscription));
- $subscriptions_not_in_trial = Braintree\Subscription::search([
- Braintree\SubscriptionSearch::inTrialPeriod()->is(false)
- ]);
- $this->assertTrue(Test\Helper::includes($subscriptions_not_in_trial, $triallessSubscription));
- $this->assertFalse(Test\Helper::includes($subscriptions_not_in_trial, $trialSubscription));
- }
- public function testSearch_statusIsPastDue()
- {
- $found = false;
- $collection = Braintree\Subscription::search([
- Braintree\SubscriptionSearch::status()->in([Braintree\Subscription::PAST_DUE])
- ]);
- foreach ($collection AS $item) {
- $found = true;
- $this->assertEquals(Braintree\Subscription::PAST_DUE, $item->status);
- }
- $this->assertTrue($found);
- }
- public function testSearch_statusIsExpired()
- {
- $found = false;
- $collection = Braintree\Subscription::search([
- Braintree\SubscriptionSearch::status()->in([Braintree\Subscription::EXPIRED])
- ]);
- foreach ($collection as $item) {
- $found = true;
- $this->assertEquals(Braintree\Subscription::EXPIRED, $item->status);
- }
- $this->assertTrue($found);
- }
- public function testSearch_billingCyclesRemaing()
- {
- $creditCard = SubscriptionHelper::createCreditCard();
- $triallessPlan = SubscriptionHelper::triallessPlan();
- $subscription_4 = Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $triallessPlan['id'],
- 'numberOfBillingCycles' => 4
- ])->subscription;
- $subscription_8 = Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $triallessPlan['id'],
- 'numberOfBillingCycles' => 8
- ])->subscription;
- $subscription_10 = Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $triallessPlan['id'],
- 'numberOfBillingCycles' => 10
- ])->subscription;
- $collection = Braintree\Subscription::search([
- Braintree\SubscriptionSearch::billingCyclesRemaining()->between(5, 10)
- ]);
- $this->assertFalse(Test\Helper::includes($collection, $subscription_4));
- $this->assertTrue(Test\Helper::includes($collection, $subscription_8));
- $this->assertTrue(Test\Helper::includes($collection, $subscription_10));
- }
- public function testSearch_subscriptionId()
- {
- $creditCard = SubscriptionHelper::createCreditCard();
- $triallessPlan = SubscriptionHelper::triallessPlan();
- $rand_id = strval(rand());
- $subscription_1 = Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $triallessPlan['id'],
- 'id' => 'subscription_123_id_' . $rand_id
- ])->subscription;
- $subscription_2 = Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $triallessPlan['id'],
- 'id' => 'subscription_23_id_' . $rand_id
- ])->subscription;
- $subscription_3 = Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $triallessPlan['id'],
- 'id' => 'subscription_3_id_' . $rand_id
- ])->subscription;
- $collection = Braintree\Subscription::search([
- Braintree\SubscriptionSearch::id()->contains('23_id_')
- ]);
- $this->assertTrue(Test\Helper::includes($collection, $subscription_1));
- $this->assertTrue(Test\Helper::includes($collection, $subscription_2));
- $this->assertFalse(Test\Helper::includes($collection, $subscription_3));
- }
- public function testSearch_merchantAccountId()
- {
- $creditCard = SubscriptionHelper::createCreditCard();
- $triallessPlan = SubscriptionHelper::triallessPlan();
- $rand_id = strval(rand());
- $subscription_1 = Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $triallessPlan['id'],
- 'id' => strval(rand()) . '_subscription_' . $rand_id,
- 'price' => '2'
- ])->subscription;
- $subscription_2 = Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $triallessPlan['id'],
- 'id' => strval(rand()) . '_subscription_' . $rand_id,
- 'merchantAccountId' => Test\Helper::nonDefaultMerchantAccountId(),
- 'price' => '2'
- ])->subscription;
- $collection = Braintree\Subscription::search([
- Braintree\SubscriptionSearch::id()->endsWith('subscription_' . $rand_id),
- Braintree\SubscriptionSearch::merchantAccountId()->in([Test\Helper::nonDefaultMerchantAccountId()]),
- Braintree\SubscriptionSearch::price()->is('2')
- ]);
- $this->assertFalse(Test\Helper::includes($collection, $subscription_1));
- $this->assertTrue(Test\Helper::includes($collection, $subscription_2));
- }
- public function testSearch_bogusMerchantAccountId()
- {
- $creditCard = SubscriptionHelper::createCreditCard();
- $triallessPlan = SubscriptionHelper::triallessPlan();
- $rand_id = strval(rand());
- $subscription = Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $triallessPlan['id'],
- 'id' => strval(rand()) . '_subscription_' . $rand_id,
- 'price' => '11.38'
- ])->subscription;
- $collection = Braintree\Subscription::search([
- Braintree\SubscriptionSearch::id()->endsWith('subscription_' . $rand_id),
- Braintree\SubscriptionSearch::merchantAccountId()->in(['bogus_merchant_account']),
- Braintree\SubscriptionSearch::price()->is('11.38')
- ]);
- $this->assertFalse(Test\Helper::includes($collection, $subscription));
- }
- public function testSearch_daysPastDue()
- {
- $creditCard = SubscriptionHelper::createCreditCard();
- $triallessPlan = SubscriptionHelper::triallessPlan();
- $subscription = Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $triallessPlan['id']
- ])->subscription;
- $http = new Braintree\Http(Braintree\Configuration::$global);
- $path = Braintree\Configuration::$global->merchantPath() . '/subscriptions/' . $subscription->id . '/make_past_due';
- $http->put($path, ['daysPastDue' => 5]);
- $found = false;
- $collection = Braintree\Subscription::search([
- Braintree\SubscriptionSearch::daysPastDue()->between(2, 10)
- ]);
- foreach ($collection AS $item) {
- $found = true;
- $this->assertTrue($item->daysPastDue <= 10);
- $this->assertTrue($item->daysPastDue >= 2);
- }
- $this->assertTrue($found);
- }
- public function testSearch_price()
- {
- $creditCard = SubscriptionHelper::createCreditCard();
- $triallessPlan = SubscriptionHelper::triallessPlan();
- $subscription_850 = Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $triallessPlan['id'],
- 'price' => '8.50'
- ])->subscription;
- $subscription_851 = Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $triallessPlan['id'],
- 'price' => '8.51'
- ])->subscription;
- $subscription_852 = Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $triallessPlan['id'],
- 'price' => '8.52'
- ])->subscription;
- $collection = Braintree\Subscription::search([
- Braintree\SubscriptionSearch::price()->between('8.51', '8.52')
- ]);
- $this->assertTrue(Test\Helper::includes($collection, $subscription_851));
- $this->assertTrue(Test\Helper::includes($collection, $subscription_852));
- $this->assertFalse(Test\Helper::includes($collection, $subscription_850));
- }
- public function testSearch_nextBillingDate()
- {
- $creditCard = SubscriptionHelper::createCreditCard();
- $triallessPlan = SubscriptionHelper::triallessPlan();
- $trialPlan = SubscriptionHelper::trialPlan();
- $triallessSubscription = Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $triallessPlan['id'],
- ])->subscription;
- $trialSubscription = Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $trialPlan['id'],
- ])->subscription;
- $fiveDaysFromNow = new DateTime();
- $fiveDaysFromNow->modify("+5 days");
- $collection = Braintree\Subscription::search([
- Braintree\SubscriptionSearch::nextBillingDate()->greaterThanOrEqualTo($fiveDaysFromNow),
- ]);
- $this->assertTrue(Test\Helper::includes($collection, $triallessSubscription));
- $this->assertFalse(Test\Helper::includes($collection, $trialSubscription));
- }
- public function testSearch_createdAt_lessThanOrEqualTo()
- {
- $creditCard = SubscriptionHelper::createCreditCard();
- $plan = SubscriptionHelper::trialPlan();
- $subscription= Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $plan['id'],
- ])->subscription;
- $fiveDaysFromNow = new DateTime();
- $fiveDaysFromNow->modify("+5 days");
- $collection = Braintree\Subscription::search([
- Braintree\SubscriptionSearch::createdAt()->lessThanOrEqualTo($fiveDaysFromNow),
- ]);
- $this->assertTrue(Test\Helper::includes($collection, $subscription));
- $fiveDaysAgo = new DateTime();
- $fiveDaysAgo->modify("-5 days");
- $emptyCollection = Braintree\Subscription::search([
- Braintree\SubscriptionSearch::createdAt()->lessThanOrEqualTo($fiveDaysAgo),
- ]);
- $this->assertFalse(Test\Helper::includes($emptyCollection, $subscription));
- }
- public function testSearch_createdAt_greaterThanOrEqualTo()
- {
- $creditCard = SubscriptionHelper::createCreditCard();
- $plan = SubscriptionHelper::trialPlan();
- $subscription= Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $plan['id'],
- ])->subscription;
- $fiveDaysAgo = new DateTime();
- $fiveDaysAgo->modify("-5 days");
- $collection = Braintree\Subscription::search([
- Braintree\SubscriptionSearch::createdAt()->greaterThanOrEqualTo($fiveDaysAgo),
- ]);
- $this->assertTrue(Test\Helper::includes($collection, $subscription));
- $fiveDaysFromNow = new DateTime();
- $fiveDaysFromNow->modify("+5 days");
- $emptyCollection = Braintree\Subscription::search([
- Braintree\SubscriptionSearch::createdAt()->greaterThanOrEqualTo($fiveDaysFromNow),
- ]);
- $this->assertFalse(Test\Helper::includes($emptyCollection, $subscription));
- }
- public function testSearch_createdAt_between()
- {
- $creditCard = SubscriptionHelper::createCreditCard();
- $plan = SubscriptionHelper::trialPlan();
- $subscription= Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $plan['id'],
- ])->subscription;
- $fiveDaysAgo = new DateTime();
- $fiveDaysFromNow = new DateTime();
- $tenDaysFromNow = new DateTime();
- $fiveDaysAgo->modify("-5 days");
- $fiveDaysFromNow->modify("+5 days");
- $tenDaysFromNow->modify("+10 days");
- $collection = Braintree\Subscription::search([
- Braintree\SubscriptionSearch::createdAt()->between($fiveDaysAgo, $fiveDaysFromNow),
- ]);
- $this->assertTrue(Test\Helper::includes($collection, $subscription));
- $emptyCollection = Braintree\Subscription::search([
- Braintree\SubscriptionSearch::createdAt()->between($fiveDaysFromNow, $tenDaysFromNow),
- ]);
- $this->assertFalse(Test\Helper::includes($emptyCollection, $subscription));
- }
- public function testSearch_createdAt_is()
- {
- $creditCard = SubscriptionHelper::createCreditCard();
- $plan = SubscriptionHelper::trialPlan();
- $subscription= Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $plan['id'],
- ])->subscription;
- $collection = Braintree\Subscription::search([
- Braintree\SubscriptionSearch::createdAt()->is($subscription->createdAt),
- ]);
- $this->assertTrue(Test\Helper::includes($collection, $subscription));
- $oneDayAgo = $subscription->createdAt;
- $oneDayAgo->modify("-1 days");
- $emptyCollection = Braintree\Subscription::search([
- Braintree\SubscriptionSearch::createdAt()->is($oneDayAgo),
- ]);
- $this->assertFalse(Test\Helper::includes($emptyCollection, $subscription));
- }
- public function testSearch_createdAt_convertLocalToUTC()
- {
- $creditCard = SubscriptionHelper::createCreditCard();
- $plan = SubscriptionHelper::trialPlan();
- $subscription= Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $plan['id'],
- ])->subscription;
- $tenMinAgo = date_create("now -10 minutes", new DateTimeZone("US/Pacific"));
- $tenMinFromNow = date_create("now +10 minutes", new DateTimeZone("US/Pacific"));
- $collection = Braintree\Subscription::search([
- Braintree\SubscriptionSearch::createdAt()->between($tenMinAgo, $tenMinFromNow),
- ]);
- $this->assertTrue(Test\Helper::includes($collection, $subscription));
- }
- public function testSearch_transactionId()
- {
- $creditCard = SubscriptionHelper::createCreditCard();
- $triallessPlan = SubscriptionHelper::triallessPlan();
- $matchingSubscription = Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $triallessPlan['id'],
- ])->subscription;
- $nonMatchingSubscription = Braintree\Subscription::create([
- 'paymentMethodToken' => $creditCard->token,
- 'planId' => $triallessPlan['id'],
- ])->subscription;
- $collection = Braintree\Subscription::search([
- Braintree\SubscriptionSearch::transactionId()->is($matchingSubscription->transactions[0]->id),
- ]);
- $this->assertTrue(Test\Helper::includes($collection, $matchingSubscription));
- $this->assertFalse(Test\Helper::includes($collection, $nonMatchingSubscription));
- }
- }
|