diff --git a/lib/chargify_api_ares.rb b/lib/chargify_api_ares.rb index 84db294..238c638 100644 --- a/lib/chargify_api_ares.rb +++ b/lib/chargify_api_ares.rb @@ -298,6 +298,10 @@ class PaymentProfile < Base end class Coupon < Base + def self.find_all_by_product_family_id(product_family_id) + Coupon.find(:all, :params => { :product_family_id => product_family_id }) + end + def self.find_by_product_family_id_and_code(product_family_id, code) Coupon.new get(:lookup, :product_family_id => product_family_id, :code => code) end diff --git a/spec/coupon_spec.rb b/spec/coupon_spec.rb new file mode 100644 index 0000000..086ff97 --- /dev/null +++ b/spec/coupon_spec.rb @@ -0,0 +1,35 @@ +require 'spec_helper' + +describe Chargify::Coupon do + context '.find_by_product_family_id_and_code' do + let(:existing_coupon) { Factory.build(:coupon, :code => '20OFF') } + + before do + FakeWeb.register_uri(:get, "#{test_domain}/product_families/10/coupons/lookup.xml?code=#{existing_coupon.code}", :body => existing_coupon.attributes.to_xml) + end + + it "finds the correct coupon by product family and code" do + Chargify::Coupon.find_by_product_family_id_and_code(10, '20OFF').should == existing_coupon + end + + it "is an instance of Chargify::Coupon" do + coupon = Chargify::Coupon.find_by_product_family_id_and_code(10, '20OFF') + coupon.should be_instance_of(Chargify::Coupon) + end + end + + context '.find_all_by_product_family_id' do + let(:coupon_1) { Factory.build(:coupon, :product_family_id => 5) } + let(:coupon_2) { Factory.build(:coupon, :product_family_id => 5) } + + before do + FakeWeb.register_uri(:get, "#{test_domain}/product_families/5/coupons.xml", :body => [coupon_1.attributes, coupon_2.attributes].to_xml) + end + + it "returns all of the coupons for a product family" do + coupons = Chargify::Coupon.find_all_by_product_family_id(5) + coupons.count.should == 2 + coupons.map{|c| c.should be_instance_of(Chargify::Coupon)} + end + end +end diff --git a/spec/factories.rb b/spec/factories.rb index aab2bdc..5dc87e5 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -61,4 +61,14 @@ f.unit_name 'unit' f.component_type 'quantity_based_component' end + + factory :coupon, :class => Chargify::Coupon do |f| + f.name { '15% off' } + f.code { '15OFF' } + f.description { '15% off for life' } + f.percentage { '14' } + f.allow_negative_balance { false } + f.recurring { false } + f.end_date { 1.month.from_now } + end end