braintree 1.1.3 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. data/lib/braintree.rb +2 -0
  2. data/lib/braintree/advanced_search.rb +69 -0
  3. data/lib/braintree/configuration.rb +2 -2
  4. data/lib/braintree/credit_card.rb +2 -1
  5. data/lib/braintree/subscription.rb +50 -1
  6. data/lib/braintree/subscription_search.rb +10 -0
  7. data/lib/braintree/transparent_redirect.rb +8 -5
  8. data/lib/braintree/version.rb +2 -2
  9. data/lib/braintree/xml/generator.rb +7 -2
  10. data/lib/ssl/{valicert_ca.crt → sandbox_braintreegateway_com.ca.crt} +1 -0
  11. data/lib/ssl/www_braintreegateway_com.ca.crt +202 -0
  12. data/spec/integration/braintree/credit_card_spec.rb +27 -35
  13. data/spec/integration/braintree/customer_spec.rb +37 -36
  14. data/spec/integration/braintree/http_spec.rb +17 -0
  15. data/spec/integration/braintree/subscription_spec.rb +244 -3
  16. data/spec/integration/braintree/transaction_spec.rb +9 -18
  17. data/spec/integration/braintree/transparent_redirect_spec.rb +21 -0
  18. data/spec/integration/spec_helper.rb +0 -23
  19. data/spec/spec_helper.rb +34 -0
  20. data/spec/support/matchers/include_on_any_page.rb +24 -0
  21. data/spec/unit/braintree/configuration_spec.rb +3 -3
  22. data/spec/unit/braintree/credit_card_spec.rb +1 -1
  23. data/spec/unit/braintree/customer_spec.rb +1 -1
  24. data/spec/unit/braintree/paged_collection_spec.rb +50 -0
  25. data/spec/unit/braintree/subscription_search_spec.rb +35 -0
  26. data/spec/unit/braintree/subscription_spec.rb +10 -0
  27. data/spec/unit/braintree/transaction_spec.rb +1 -1
  28. data/spec/unit/braintree/transparent_redirect_spec.rb +8 -2
  29. data/spec/unit/braintree/xml_spec.rb +5 -0
  30. metadata +11 -5
@@ -207,7 +207,8 @@ describe Braintree::CreditCard do
207
207
  :customer_id => customer.id
208
208
  }
209
209
  }
210
- query_string_response = create_credit_card_via_tr(params, tr_data_params)
210
+ tr_data = Braintree::TransparentRedirect.create_credit_card_data({:redirect_url => "http://example.com"}.merge(tr_data_params))
211
+ query_string_response = SpecHelper.simulate_form_post_for_tr(Braintree::CreditCard.create_credit_card_url, tr_data, params)
211
212
  result = Braintree::CreditCard.create_from_transparent_redirect(query_string_response)
212
213
  result.success?.should == true
213
214
  credit_card = result.credit_card
@@ -234,7 +235,8 @@ describe Braintree::CreditCard do
234
235
  :customer_id => customer.id
235
236
  }
236
237
  }
237
- query_string_response = create_credit_card_via_tr(params, tr_data_params)
238
+ tr_data = Braintree::TransparentRedirect.create_credit_card_data({:redirect_url => "http://example.com"}.merge(tr_data_params))
239
+ query_string_response = SpecHelper.simulate_form_post_for_tr(Braintree::CreditCard.create_credit_card_url, tr_data, params)
238
240
  result = Braintree::CreditCard.create_from_transparent_redirect(query_string_response)
239
241
  result.success?.should == false
240
242
  result.params[:customer_id] == customer.id
@@ -439,7 +441,8 @@ describe Braintree::CreditCard do
439
441
  :token => new_token
440
442
  }
441
443
  }
442
- query_string_response = update_credit_card_via_tr(params, tr_data_params)
444
+ tr_data = Braintree::TransparentRedirect.update_credit_card_data({:redirect_url => "http://example.com"}.merge(tr_data_params))
445
+ query_string_response = SpecHelper.simulate_form_post_for_tr(Braintree::CreditCard.update_credit_card_url, tr_data, params)
443
446
  result = Braintree::CreditCard.update_from_transparent_redirect(query_string_response)
444
447
  result.success?.should == true
445
448
  credit_card = result.credit_card
@@ -578,6 +581,27 @@ describe Braintree::CreditCard do
578
581
  credit_card.expiration_date.should == "05/2012"
579
582
  end
580
583
 
584
+ it "returns associated subscriptions with the credit card" do
585
+ customer = Braintree::Customer.create.customer
586
+ credit_card = Braintree::CreditCard.create(
587
+ :customer_id => customer.id,
588
+ :number => Braintree::Test::CreditCardNumbers::Visa,
589
+ :expiration_date => "05/2012"
590
+ ).credit_card
591
+
592
+ subscription = Braintree::Subscription.create(
593
+ :payment_method_token => credit_card.token,
594
+ :plan_id => "integration_trialless_plan",
595
+ :price => "1.00"
596
+ ).subscription
597
+
598
+ found_card = Braintree::CreditCard.find(credit_card.token)
599
+ found_card.subscriptions.first.id.should == subscription.id
600
+ found_card.subscriptions.first.plan_id.should == "integration_trialless_plan"
601
+ found_card.subscriptions.first.payment_method_token.should == credit_card.token
602
+ found_card.subscriptions.first.price.should == BigDecimal.new("1.00")
603
+ end
604
+
581
605
  it "raises a NotFoundError exception if payment method cannot be found" do
582
606
  expect do
583
607
  Braintree::CreditCard.find("invalid-token")
@@ -827,36 +851,4 @@ describe Braintree::CreditCard do
827
851
  end.to raise_error(Braintree::ValidationsFailed)
828
852
  end
829
853
  end
830
-
831
- def create_credit_card_via_tr(regular_params, tr_params = {})
832
- response = nil
833
- Net::HTTP.start("localhost", Braintree::Configuration.port) do |http|
834
- request = Net::HTTP::Post.new("/" + Braintree::CreditCard.create_credit_card_url.split("/", 4)[3])
835
- request.add_field "Content-Type", "application/x-www-form-urlencoded"
836
- tr_data = Braintree::TransparentRedirect.create_credit_card_data({:redirect_url => "http://example.com"}.merge(tr_params))
837
- request.body = Braintree::Util.hash_to_query_string({:tr_data => tr_data}.merge(regular_params))
838
- response = http.request(request)
839
- end
840
- if response.code.to_i == 303
841
- query_string = response["Location"].split("?", 2).last
842
- else
843
- raise "did not receive a valid tr response: #{response.body[0,1000].inspect}"
844
- end
845
- end
846
-
847
- def update_credit_card_via_tr(regular_params, tr_params = {})
848
- response = nil
849
- Net::HTTP.start("localhost", Braintree::Configuration.port) do |http|
850
- request = Net::HTTP::Post.new("/" + Braintree::CreditCard.update_credit_card_url.split("/", 4)[3])
851
- request.add_field "Content-Type", "application/x-www-form-urlencoded"
852
- tr_data = Braintree::TransparentRedirect.update_credit_card_data({:redirect_url => "http://example.com"}.merge(tr_params))
853
- request.body = Braintree::Util.hash_to_query_string({:tr_data => tr_data}.merge(regular_params))
854
- response = http.request(request)
855
- end
856
- if response.code.to_i == 303
857
- query_string = response["Location"].split("?", 2).last
858
- else
859
- raise "did not receive a valid tr response: #{response.body[0,1000].inspect}"
860
- end
861
- end
862
854
  end
@@ -416,8 +416,11 @@ describe Braintree::Customer do
416
416
  :website => "www.johndoe.com"
417
417
  }
418
418
  }
419
- query_string_response = create_customer_via_tr(params)
419
+
420
+ tr_data = Braintree::TransparentRedirect.create_customer_data({:redirect_url => "http://example.com"}.merge({}))
421
+ query_string_response = SpecHelper.simulate_form_post_for_tr(Braintree::Customer.create_customer_url, tr_data, params)
420
422
  result = Braintree::Customer.create_from_transparent_redirect(query_string_response)
423
+
421
424
  result.success?.should == true
422
425
  customer = result.customer
423
426
  customer.first_name.should == "John"
@@ -443,8 +446,11 @@ describe Braintree::Customer do
443
446
  :website => "www.johndoe.com"
444
447
  }
445
448
  }
446
- query_string_response = create_customer_via_tr({}, tr_data_params)
449
+
450
+ tr_data = Braintree::TransparentRedirect.create_customer_data({:redirect_url => "http://example.com"}.merge(tr_data_params))
451
+ query_string_response = SpecHelper.simulate_form_post_for_tr(Braintree::Customer.create_customer_url, tr_data, {})
447
452
  result = Braintree::Customer.create_from_transparent_redirect(query_string_response)
453
+
448
454
  result.success?.should == true
449
455
  customer = result.customer
450
456
  customer.id.should == customer_id
@@ -489,6 +495,27 @@ describe Braintree::Customer do
489
495
  customer.last_name.should == "Cool"
490
496
  end
491
497
 
498
+ it "returns associated subscriptions" do
499
+ customer = Braintree::Customer.create.customer
500
+ credit_card = Braintree::CreditCard.create(
501
+ :customer_id => customer.id,
502
+ :number => Braintree::Test::CreditCardNumbers::Visa,
503
+ :expiration_date => "05/2012"
504
+ ).credit_card
505
+
506
+ subscription = Braintree::Subscription.create(
507
+ :payment_method_token => credit_card.token,
508
+ :plan_id => "integration_trialless_plan",
509
+ :price => "1.00"
510
+ ).subscription
511
+
512
+ found_customer = Braintree::Customer.find(customer.id)
513
+ found_customer.credit_cards.first.subscriptions.first.id.should == subscription.id
514
+ found_customer.credit_cards.first.subscriptions.first.plan_id.should == "integration_trialless_plan"
515
+ found_customer.credit_cards.first.subscriptions.first.payment_method_token.should == credit_card.token
516
+ found_customer.credit_cards.first.subscriptions.first.price.should == BigDecimal.new("1.00")
517
+ end
518
+
492
519
  it "works for a blank customer" do
493
520
  created_customer = Braintree::Customer.create!
494
521
  found_customer = Braintree::Customer.find(created_customer.id)
@@ -651,8 +678,11 @@ describe Braintree::Customer do
651
678
  tr_data_params = {
652
679
  :customer_id => original_customer.id
653
680
  }
654
- query_string_response = update_customer_via_tr(params, tr_data_params)
681
+
682
+ tr_data = Braintree::TransparentRedirect.update_customer_data({:redirect_url => "http://example.com"}.merge(tr_data_params))
683
+ query_string_response = SpecHelper.simulate_form_post_for_tr(Braintree::Customer.update_customer_url, tr_data, params)
655
684
  result = Braintree::Customer.update_from_transparent_redirect(query_string_response)
685
+
656
686
  result.success?.should == true
657
687
  customer = result.customer
658
688
  customer.id.should == original_customer.id
@@ -689,8 +719,11 @@ describe Braintree::Customer do
689
719
  :website => "new.website.com"
690
720
  }
691
721
  }
692
- query_string_response = update_customer_via_tr({}, tr_data_params)
722
+
723
+ tr_data = Braintree::TransparentRedirect.update_customer_data({:redirect_url => "http://example.com"}.merge(tr_data_params))
724
+ query_string_response = SpecHelper.simulate_form_post_for_tr(Braintree::Customer.update_customer_url, tr_data, {})
693
725
  result = Braintree::Customer.update_from_transparent_redirect(query_string_response)
726
+
694
727
  result.success?.should == true
695
728
  customer = result.customer
696
729
  customer.id.should == new_customer_id
@@ -703,36 +736,4 @@ describe Braintree::Customer do
703
736
  customer.website.should == "new.website.com"
704
737
  end
705
738
  end
706
-
707
- def create_customer_via_tr(regular_params, tr_data_params = {})
708
- response = nil
709
- Net::HTTP.start(Braintree::Configuration.server, Braintree::Configuration.port) do |http|
710
- request = Net::HTTP::Post.new("/" + Braintree::Customer.create_customer_url.split("/", 4)[3])
711
- request.add_field "Content-Type", "application/x-www-form-urlencoded"
712
- params = {
713
- :tr_data => Braintree::TransparentRedirect.create_customer_data(
714
- {:redirect_url => "http://testing.com"}.merge(tr_data_params)
715
- )
716
- }.merge(regular_params)
717
- request.body = Braintree::Util.hash_to_query_string(params)
718
- response = http.request(request)
719
- end
720
- query_string = response["Location"].split("?", 2).last
721
- query_string
722
- end
723
-
724
- def update_customer_via_tr(regular_params, tr_data_params = {})
725
- raise "need a customer_id (of the customer to update) in tr_data_params" unless tr_data_params[:customer_id]
726
- response = nil
727
- Net::HTTP.start(Braintree::Configuration.server, Braintree::Configuration.port) do |http|
728
- request = Net::HTTP::Post.new("/" + Braintree::Customer.update_customer_url.split("/", 4)[3])
729
- request.add_field "Content-Type", "application/x-www-form-urlencoded"
730
- tr_data = Braintree::TransparentRedirect.update_customer_data(
731
- {:redirect_url => "http://testing.com"}.merge(tr_data_params)
732
- )
733
- request.body = Braintree::Util.hash_to_query_string({ :tr_data => tr_data }.merge(regular_params))
734
- response = http.request(request)
735
- end
736
- query_string = response["Location"].split("?", 2).last
737
- end
738
739
  end
@@ -67,6 +67,23 @@ describe Braintree::Http do
67
67
  end
68
68
  end
69
69
 
70
+ describe "user_agent" do
71
+ after do
72
+ Braintree::Configuration.custom_user_agent = nil
73
+ end
74
+
75
+ it "sets the User-Agent header using the default user agent" do
76
+ response = Braintree::Http.get("/test/headers")
77
+ response[:headers][:HTTP_USER_AGENT].should == "Braintree Ruby Gem #{Braintree::Version::String}"
78
+ end
79
+
80
+ it "sets the User-Agent header using a customer user agent" do
81
+ Braintree::Configuration.custom_user_agent = "ActiveMerchant 1.2.3"
82
+ response = Braintree::Http.get("/test/headers")
83
+ response[:headers][:HTTP_USER_AGENT].should == "Braintree Ruby Gem #{Braintree::Version::String} (ActiveMerchant 1.2.3)"
84
+ end
85
+ end
86
+
70
87
  describe "ssl verification" do
71
88
  it "rejects when the certificate isn't verified by our certificate authority (self-signed)" do
72
89
  begin
@@ -1,7 +1,6 @@
1
1
  require File.dirname(__FILE__) + "/../spec_helper"
2
2
 
3
3
  describe Braintree::Subscription do
4
-
5
4
  TrialPlan = {
6
5
  :description => "Plan for integration tests -- with trial",
7
6
  :id => "integration_trial_plan",
@@ -18,6 +17,9 @@ describe Braintree::Subscription do
18
17
  :trial_period => false
19
18
  }
20
19
 
20
+ DefaultMerchantAccountId = "sandbox_credit_card"
21
+ NonDefaultMerchantAccountId = "sandbox_credit_card_non_default"
22
+
21
23
  before(:each) do
22
24
  @credit_card = Braintree::Customer.create!(
23
25
  :credit_card => {
@@ -62,6 +64,29 @@ describe Braintree::Subscription do
62
64
  result.subscription.id.should == new_id
63
65
  end
64
66
 
67
+ context "merchant_account_id" do
68
+ it "defaults to the default merchant account if no merchant_account_id is provided" do
69
+ result = Braintree::Subscription.create(
70
+ :payment_method_token => @credit_card.token,
71
+ :plan_id => TriallessPlan[:id]
72
+ )
73
+
74
+ result.success?.should == true
75
+ result.subscription.merchant_account_id.should == DefaultMerchantAccountId
76
+ end
77
+
78
+ it "allows setting the merchant_account_id" do
79
+ result = Braintree::Subscription.create(
80
+ :payment_method_token => @credit_card.token,
81
+ :plan_id => TriallessPlan[:id],
82
+ :merchant_account_id => NonDefaultMerchantAccountId
83
+ )
84
+
85
+ result.success?.should == true
86
+ result.subscription.merchant_account_id.should == NonDefaultMerchantAccountId
87
+ end
88
+ end
89
+
65
90
  context "trial period" do
66
91
  context "defaults to the plan's trial period settings" do
67
92
  it "with no trial" do
@@ -190,7 +215,7 @@ describe Braintree::Subscription do
190
215
  :trial_duration => nil
191
216
  )
192
217
  result.success?.should == false
193
- result.errors.for(:subscription)[0].message.should == "Trial Duration is required."
218
+ result.errors.for(:subscription).on(:trial_duration)[0].message.should == "Trial Duration is required."
194
219
  end
195
220
 
196
221
  it "trial duration unit required" do
@@ -235,6 +260,17 @@ describe Braintree::Subscription do
235
260
  ).subscription
236
261
  end
237
262
 
263
+ context "merchant_account_id" do
264
+ it "allows changing the merchant_account_id" do
265
+ result = Braintree::Subscription.update(@subscription.id,
266
+ :merchant_account_id => NonDefaultMerchantAccountId
267
+ )
268
+
269
+ result.success?.should == true
270
+ result.subscription.merchant_account_id.should == NonDefaultMerchantAccountId
271
+ end
272
+ end
273
+
238
274
  context "when successful" do
239
275
  it "returns a success response with the updated subscription if valid" do
240
276
  new_id = rand(36**9).to_s(36)
@@ -359,7 +395,7 @@ describe Braintree::Subscription do
359
395
  }.to raise_error(Braintree::NotFoundError, 'subscription with id "noSuchSubscription" not found')
360
396
  end
361
397
 
362
- it "cannot be canceled if already canceld" do
398
+ it "cannot be canceled if already canceled" do
363
399
  subscription = Braintree::Subscription.create(
364
400
  :payment_method_token => @credit_card.token,
365
401
  :price => 54.32,
@@ -375,4 +411,209 @@ describe Braintree::Subscription do
375
411
  result.errors.for(:subscription)[0].code.should == "81905"
376
412
  end
377
413
  end
414
+
415
+ describe "self.search" do
416
+ context "search_fields" do
417
+ it "correctly returns a result with no matches" do
418
+ collection = Braintree::Subscription.search do |search|
419
+ search.plan_id.is "not_a_real_plan_id"
420
+ end
421
+
422
+ collection.items.size.should == 0
423
+ end
424
+
425
+ context "is statement" do
426
+ it "returns paged collection with matching results" do
427
+ trialless_subscription = Braintree::Subscription.create(
428
+ :payment_method_token => @credit_card.token,
429
+ :plan_id => TriallessPlan[:id]
430
+ ).subscription
431
+
432
+ trial_subscription = Braintree::Subscription.create(
433
+ :payment_method_token => @credit_card.token,
434
+ :plan_id => TrialPlan[:id]
435
+ ).subscription
436
+
437
+ collection = Braintree::Subscription.search do |search|
438
+ search.plan_id.is TriallessPlan[:id]
439
+ end
440
+
441
+ collection.should include_on_any_page(trialless_subscription)
442
+ collection.should_not include_on_any_page(trial_subscription)
443
+ end
444
+ end
445
+
446
+ context "is_not statement" do
447
+ it "returns paged collection without matching results" do
448
+ trialless_subscription = Braintree::Subscription.create(
449
+ :payment_method_token => @credit_card.token,
450
+ :plan_id => TriallessPlan[:id]
451
+ ).subscription
452
+
453
+ trial_subscription = Braintree::Subscription.create(
454
+ :payment_method_token => @credit_card.token,
455
+ :plan_id => TrialPlan[:id]
456
+ ).subscription
457
+
458
+ collection = Braintree::Subscription.search do |search|
459
+ search.plan_id.is_not TriallessPlan[:id]
460
+ end
461
+
462
+ collection.should_not include_on_any_page(trialless_subscription)
463
+ collection.should include_on_any_page(trial_subscription)
464
+ end
465
+ end
466
+
467
+ context "ends_with statement" do
468
+ it "returns paged collection with matching results" do
469
+ trialless_subscription = Braintree::Subscription.create(
470
+ :payment_method_token => @credit_card.token,
471
+ :plan_id => TriallessPlan[:id]
472
+ ).subscription
473
+
474
+ trial_subscription = Braintree::Subscription.create(
475
+ :payment_method_token => @credit_card.token,
476
+ :plan_id => TrialPlan[:id]
477
+ ).subscription
478
+
479
+ collection = Braintree::Subscription.search do |search|
480
+ search.plan_id.ends_with "trial_plan"
481
+ end
482
+
483
+ collection.should include_on_any_page(trial_subscription)
484
+ collection.should_not include_on_any_page(trialless_subscription)
485
+ end
486
+ end
487
+
488
+ context "starts_with statement" do
489
+ it "returns paged collection with matching results" do
490
+ trialless_subscription = Braintree::Subscription.create(
491
+ :payment_method_token => @credit_card.token,
492
+ :plan_id => TriallessPlan[:id]
493
+ ).subscription
494
+
495
+ trial_subscription = Braintree::Subscription.create(
496
+ :payment_method_token => @credit_card.token,
497
+ :plan_id => TrialPlan[:id]
498
+ ).subscription
499
+
500
+ collection = Braintree::Subscription.search do |search|
501
+ search.plan_id.starts_with "integration_trial_p"
502
+ end
503
+
504
+ collection.should include_on_any_page(trial_subscription)
505
+ collection.should_not include_on_any_page(trialless_subscription)
506
+ end
507
+ end
508
+
509
+ context "contains statement" do
510
+ it "returns paged collection with matching results" do
511
+ trialless_subscription = Braintree::Subscription.create(
512
+ :payment_method_token => @credit_card.token,
513
+ :plan_id => TriallessPlan[:id]
514
+ ).subscription
515
+
516
+ trial_subscription = Braintree::Subscription.create(
517
+ :payment_method_token => @credit_card.token,
518
+ :plan_id => TrialPlan[:id]
519
+ ).subscription
520
+
521
+ collection = Braintree::Subscription.search do |search|
522
+ search.plan_id.contains "trial_p"
523
+ end
524
+
525
+ collection.should include_on_any_page(trial_subscription)
526
+ collection.should_not include_on_any_page(trialless_subscription)
527
+ end
528
+ end
529
+ end
530
+
531
+ context "multiple_value_fields" do
532
+ context "in" do
533
+ it "matches all values if none are specified" do
534
+ subscription1 = Braintree::Subscription.create(
535
+ :payment_method_token => @credit_card.token,
536
+ :plan_id => TriallessPlan[:id]
537
+ ).subscription
538
+
539
+ subscription2 = Braintree::Subscription.create(
540
+ :payment_method_token => @credit_card.token,
541
+ :plan_id => TriallessPlan[:id]
542
+ ).subscription
543
+
544
+ Braintree::Subscription.cancel(subscription2.id)
545
+
546
+ collection = Braintree::Subscription.search do |search|
547
+ search.plan_id.is TriallessPlan[:id]
548
+ end
549
+
550
+ collection.should include_on_any_page(subscription1)
551
+ collection.should include_on_any_page(subscription2)
552
+ end
553
+
554
+ it "returns only matching results" do
555
+ subscription1 = Braintree::Subscription.create(
556
+ :payment_method_token => @credit_card.token,
557
+ :plan_id => TriallessPlan[:id]
558
+ ).subscription
559
+
560
+ subscription2 = Braintree::Subscription.create(
561
+ :payment_method_token => @credit_card.token,
562
+ :plan_id => TriallessPlan[:id]
563
+ ).subscription
564
+
565
+ Braintree::Subscription.cancel(subscription2.id)
566
+
567
+ collection = Braintree::Subscription.search do |search|
568
+ search.status.in Braintree::Subscription::Status::Active
569
+ end
570
+
571
+ collection.should include_on_any_page(subscription1)
572
+ collection.should_not include_on_any_page(subscription2)
573
+ end
574
+
575
+ it "returns only matching results given an argument list" do
576
+ subscription1 = Braintree::Subscription.create(
577
+ :payment_method_token => @credit_card.token,
578
+ :plan_id => TriallessPlan[:id]
579
+ ).subscription
580
+
581
+ subscription2 = Braintree::Subscription.create(
582
+ :payment_method_token => @credit_card.token,
583
+ :plan_id => TriallessPlan[:id]
584
+ ).subscription
585
+
586
+ Braintree::Subscription.cancel(subscription2.id)
587
+
588
+ collection = Braintree::Subscription.search do |search|
589
+ search.status.in Braintree::Subscription::Status::Active, Braintree::Subscription::Status::Canceled
590
+ end
591
+
592
+ collection.should include_on_any_page(subscription1)
593
+ collection.should include_on_any_page(subscription2)
594
+ end
595
+
596
+ it "returns only matching results given an array" do
597
+ subscription1 = Braintree::Subscription.create(
598
+ :payment_method_token => @credit_card.token,
599
+ :plan_id => TriallessPlan[:id]
600
+ ).subscription
601
+
602
+ subscription2 = Braintree::Subscription.create(
603
+ :payment_method_token => @credit_card.token,
604
+ :plan_id => TriallessPlan[:id]
605
+ ).subscription
606
+
607
+ Braintree::Subscription.cancel(subscription2.id)
608
+
609
+ collection = Braintree::Subscription.search do |search|
610
+ search.status.in [Braintree::Subscription::Status::Active, Braintree::Subscription::Status::Canceled]
611
+ end
612
+
613
+ collection.should include_on_any_page(subscription1)
614
+ collection.should include_on_any_page(subscription2)
615
+ end
616
+ end
617
+ end
618
+ end
378
619
  end