vitalish-chargify_api_ares 0.3.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,37 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', '..', 'lib'))
5
+
6
+ require 'chargify_api_ares'
7
+
8
+ Spec::Runner.configure do |config|
9
+ config.before(:all) do
10
+ Chargify.configure do |c|
11
+ c.subdomain = remote_configuration['subdomain']
12
+ c.api_key = remote_configuration['api_key']
13
+ if remote_configuration['site']
14
+ c.site = remote_configuration['site']
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ def run_remote_tests?
21
+ remote_configuration['run_tests'] === true
22
+ end
23
+
24
+ def remote_configuration
25
+ @remote_configuration ||= load_remote_configuration_file
26
+ end
27
+
28
+ private
29
+
30
+ def load_remote_configuration_file
31
+ configuration_file = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'config', 'remote.yml'))
32
+ if File.exist?(configuration_file)
33
+ YAML.load_file(configuration_file)
34
+ else
35
+ {}
36
+ end
37
+ end
@@ -0,0 +1,2 @@
1
+ --colour
2
+ --format progress
@@ -0,0 +1,29 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+
6
+ require 'chargify_api_ares'
7
+
8
+ require 'fakeweb'
9
+ require 'mocks/fake_resource'
10
+ ActiveResource::Base.send :include, ActiveResource::FakeResource
11
+ FakeWeb.allow_net_connect = false
12
+ require 'factory_girl'
13
+ require 'faker'
14
+ require 'factories'
15
+
16
+ Chargify.configure do |c|
17
+ c.subdomain = 'test'
18
+ c.api_key = 'test'
19
+ end
20
+
21
+ Spec::Runner.configure do |config|
22
+ config.after(:each) do
23
+ ActiveResource::FakeResource.clean
24
+ end
25
+ end
26
+
27
+ def test_domain
28
+ "#{Chargify::Base.connection.site.scheme}://#{Chargify::Base.connection.user}:#{Chargify::Base.connection.password}@#{Chargify::Base.connection.site.host}:#{Chargify::Base.connection.site.port}"
29
+ end
@@ -0,0 +1,78 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe Chargify::Subscription do
4
+
5
+ context 'strips nested association attributes before saving' do
6
+ before do
7
+ @subscription = Factory.build(:subscription_with_extra_attrs)
8
+ end
9
+
10
+ it 'strips customer' do
11
+ @subscription.attributes['customer'].should_not be_blank
12
+ @subscription.save!
13
+ @subscription.attributes['customer'].should be_blank
14
+ end
15
+
16
+ it 'strips product' do
17
+ @subscription.attributes['product'].should_not be_blank
18
+ @subscription.save!
19
+ @subscription.attributes['product'].should be_blank
20
+ end
21
+
22
+ it 'strips credit card' do
23
+ @subscription.attributes['credit_card'].should_not be_blank
24
+ @subscription.save!
25
+ @subscription.attributes['credit_card'].should be_blank
26
+ end
27
+
28
+ it 'doesn\'t strip other attrs' do
29
+ subscription = Factory.build(:subscription)
30
+
31
+ lambda { subscription.save! }.should_not change(subscription, :attributes)
32
+ end
33
+ end
34
+
35
+ it 'creates a one-time charge' do
36
+ id = Factory.next(:subscription_id)
37
+ subscription = Factory(:subscription, :id => id)
38
+ expected_response = {:charge => {:amount_in_cents => 1000, :memo => "one-time charge", :success => true}}.to_xml
39
+ FakeWeb.register_uri(:post, "#{test_domain}/subscriptions/#{id}/charges.xml?charge%5Bamount%5D=10.00&charge%5Bmemo%5D=one-time+charge", :status => 201, :body => expected_response)
40
+
41
+ response = subscription.charge(:amount => "10.00", "memo" => "one-time charge")
42
+
43
+ response.body.should == expected_response
44
+ response.should be_a(Net::HTTPCreated)
45
+ end
46
+
47
+ it 'finds by customer reference' do
48
+ customer = Factory(:customer, :reference => 'roger', :id => 10)
49
+ subscription = Factory(:subscription, :id => 11, :customer_id => customer.id, :product => Factory(:product))
50
+
51
+ expected_response = [subscription.attributes].to_xml(:root => 'subscriptions')
52
+ FakeWeb.register_uri(:get, "#{test_domain}/subscriptions.xml?customer_id=#{customer.id}", :status => 200, :body => expected_response)
53
+
54
+ Chargify::Customer.stub!(:find_by_reference).with('roger').and_return(customer)
55
+ Chargify::Subscription.find_by_customer_reference('roger').should eql(subscription)
56
+ end
57
+
58
+ it 'cancels the subscription' do
59
+ @subscription = Factory(:subscription, :id => 1)
60
+ find_subscription = lambda { Chargify::Subscription.find(1) }
61
+
62
+ find_subscription.should_not raise_error
63
+ @subscription.cancel
64
+ find_subscription.should raise_error
65
+ end
66
+
67
+ it 'migrates the subscription' do
68
+ id = Factory.next(:subscription_id)
69
+ subscription = Factory(:subscription, :id => id)
70
+ expected_response = [subscription.attributes].to_xml(:root => 'subscription')
71
+ FakeWeb.register_uri(:post, "#{test_domain}/subscriptions/#{id}/migrations.xml?migration%5Bproduct_handle%5D=upgraded-plan", :status => 201, :body => expected_response)
72
+
73
+ response = subscription.migrate(:product_handle => 'upgraded-plan')
74
+
75
+ response.body.should == expected_response
76
+ response.should be_a(Net::HTTPCreated)
77
+ end
78
+ end
@@ -0,0 +1,82 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe Chargify::Subscription::Component do
4
+ before(:each) do
5
+ @subscription = Chargify::Subscription.new(:id => 1)
6
+ @sc1 = Chargify::Subscription::Component.new(
7
+ :subscription_id => @subscription.id,
8
+ :component_id => 1,
9
+ :allocated_quantity => 0,
10
+ :name => "Paying Customers",
11
+ :unit_name => "customers",
12
+ :component_type => "quantity_based_component",
13
+ :pricing_scheme => "stairstep"
14
+ )
15
+ @sc2 = Chargify::Subscription::Component.new(
16
+ :subscription_id => @subscription.id,
17
+ :component_id => 2,
18
+ :unit_balance => 0,
19
+ :name => "Text Messages",
20
+ :unit_name => "text message",
21
+ :component_type => "metered_component"
22
+ )
23
+ @subscriptions_components = [@sc1, @sc2]
24
+ end
25
+
26
+ describe "listing subscription components" do
27
+ before(:each) do
28
+ FakeWeb.register_uri(:get, "#{test_domain}/subscriptions/#{@subscription.id}.xml", :body => @subscription.to_xml)
29
+ FakeWeb.register_uri(:get, "#{test_domain}/subscriptions/#{@subscription.id}/components.xml", :body => @subscriptions_components.to_xml(:root => 'components'))
30
+ end
31
+
32
+ it "returns an array of components from Chargify::Subscription::Component.find(:all, :params => {:subscription_id => @subscription.id})" do
33
+ Chargify::Subscription::Component.find(:all, :params => {:subscription_id => @subscription.id}).should == @subscriptions_components
34
+ end
35
+
36
+ it "returns an array of components from Chargify::Subscription.find(2).components" do
37
+ subscription = Chargify::Subscription.find(@subscription.id)
38
+ subscription.components.should == @subscriptions_components
39
+ end
40
+ end
41
+
42
+ describe "reading a subscription component" do
43
+ before(:each) do
44
+ FakeWeb.register_uri(:get, "#{test_domain}/subscriptions/#{@subscription.id}.xml", :body => @subscription.to_xml)
45
+ FakeWeb.register_uri(:get, "#{test_domain}/subscriptions/#{@subscription.id}/components/#{@sc1.component_id}.xml", :body => @sc1.to_xml)
46
+ end
47
+
48
+ it "returns the subscription's component resource from Chargify::Subscription::Component.find(1, :params => {:subscription_id => 1})" do
49
+ Chargify::Subscription::Component.find(@sc1.component_id, :params => {:subscription_id => @subscription.id}).should == @sc1
50
+ end
51
+
52
+ it "returns the subscription's component resource from Chargify::Subscription.find(1).component(1)" do
53
+ subscription = Chargify::Subscription.find(@subscription.id)
54
+ subscription.component(@sc1.component_id).should == @sc1
55
+ end
56
+ end
57
+
58
+ describe "updating a subscription component" do
59
+ before(:each) do
60
+ @new_allocated_quantity = @sc1.allocated_quantity + 5
61
+
62
+ FakeWeb.register_uri(:get, "#{test_domain}/subscriptions/#{@subscription.id}.xml", :body => @subscription.to_xml)
63
+ FakeWeb.register_uri(:get, "#{test_domain}/subscriptions/#{@subscription.id}/components/#{@sc1.component_id}.xml", :body => @sc1.to_xml)
64
+
65
+ @sc1_prime = @sc1
66
+ @sc1_prime.allocated_quantity = @new_allocated_quantity
67
+
68
+ FakeWeb.register_uri(:put, "#{test_domain}/subscriptions/#{@subscription.id}/components/#{@sc1.component_id}.xml", :body => @sc1_prime.to_xml)
69
+ FakeWeb.register_uri(:get, "#{test_domain}/subscriptions/#{@subscription.id}/components/#{@sc1.component_id}.xml", :body => @sc1_prime.to_xml)
70
+ end
71
+
72
+ it "updates the subscription's component allocated quantity" do
73
+ component = Chargify::Subscription::Component.find(@sc1.component_id, :params => {:subscription_id => @subscription.id})
74
+ component.allocated_quantity = @new_allocated_quantity
75
+
76
+ result = component.save
77
+ result.should be_true
78
+
79
+ Chargify::Subscription::Component.find(@sc1.component_id, :params => {:subscription_id => @subscription.id}).should == @sc1_prime
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,75 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{vitalish-chargify_api_ares}
8
+ s.version = "0.3.9"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Michael Klett", "The Lab Rats @ Phase Two Labs", "Brian Rose", "Nathan Verni"]
12
+ s.date = %q{2011-03-14}
13
+ s.description = %q{}
14
+ s.email = %q{mklett@grasshopper.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.md"
18
+ ]
19
+ s.files = [
20
+ ".rvmrc",
21
+ "LICENSE.txt",
22
+ "README.md",
23
+ "Rakefile",
24
+ "VERSION",
25
+ "chargify_api_ares.gemspec",
26
+ "config/remote.example.yml",
27
+ "lib/chargify_api_ares.rb",
28
+ "samples/customers.rb",
29
+ "samples/metered_components.rb",
30
+ "samples/products.rb",
31
+ "samples/subscriptions.rb",
32
+ "samples/transactions.rb",
33
+ "spec/base_spec.rb",
34
+ "spec/components_spec.rb",
35
+ "spec/customer_spec.rb",
36
+ "spec/factories.rb",
37
+ "spec/mocks/fake_resource.rb",
38
+ "spec/product_spec.rb",
39
+ "spec/remote/remote_spec.rb",
40
+ "spec/remote/spec_helper.rb",
41
+ "spec/spec.opts",
42
+ "spec/spec_helper.rb",
43
+ "spec/subscription_spec.rb",
44
+ "spec/subscriptions_component_spec.rb",
45
+ "vitalish-chargify_api_ares.gemspec"
46
+ ]
47
+ s.homepage = %q{http://github.com/grasshopperlabs/chargify_api_ares}
48
+ s.require_paths = ["lib"]
49
+ s.rubygems_version = %q{1.3.7}
50
+ s.summary = %q{A Chargify API wrapper for Ruby using ActiveResource}
51
+ s.test_files = [
52
+ "spec/base_spec.rb",
53
+ "spec/components_spec.rb",
54
+ "spec/customer_spec.rb",
55
+ "spec/factories.rb",
56
+ "spec/mocks/fake_resource.rb",
57
+ "spec/product_spec.rb",
58
+ "spec/remote/remote_spec.rb",
59
+ "spec/remote/spec_helper.rb",
60
+ "spec/spec_helper.rb",
61
+ "spec/subscription_spec.rb",
62
+ "spec/subscriptions_component_spec.rb"
63
+ ]
64
+
65
+ if s.respond_to? :specification_version then
66
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
67
+ s.specification_version = 3
68
+
69
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
70
+ else
71
+ end
72
+ else
73
+ end
74
+ end
75
+
metadata ADDED
@@ -0,0 +1,106 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vitalish-chargify_api_ares
3
+ version: !ruby/object:Gem::Version
4
+ hash: 1
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 3
9
+ - 9
10
+ version: 0.3.9
11
+ platform: ruby
12
+ authors:
13
+ - Michael Klett
14
+ - The Lab Rats @ Phase Two Labs
15
+ - Brian Rose
16
+ - Nathan Verni
17
+ autorequire:
18
+ bindir: bin
19
+ cert_chain: []
20
+
21
+ date: 2011-03-14 00:00:00 +02:00
22
+ default_executable:
23
+ dependencies: []
24
+
25
+ description: ""
26
+ email: mklett@grasshopper.com
27
+ executables: []
28
+
29
+ extensions: []
30
+
31
+ extra_rdoc_files:
32
+ - LICENSE.txt
33
+ - README.md
34
+ files:
35
+ - .rvmrc
36
+ - LICENSE.txt
37
+ - README.md
38
+ - Rakefile
39
+ - VERSION
40
+ - chargify_api_ares.gemspec
41
+ - config/remote.example.yml
42
+ - lib/chargify_api_ares.rb
43
+ - samples/customers.rb
44
+ - samples/metered_components.rb
45
+ - samples/products.rb
46
+ - samples/subscriptions.rb
47
+ - samples/transactions.rb
48
+ - spec/base_spec.rb
49
+ - spec/components_spec.rb
50
+ - spec/customer_spec.rb
51
+ - spec/factories.rb
52
+ - spec/mocks/fake_resource.rb
53
+ - spec/product_spec.rb
54
+ - spec/remote/remote_spec.rb
55
+ - spec/remote/spec_helper.rb
56
+ - spec/spec.opts
57
+ - spec/spec_helper.rb
58
+ - spec/subscription_spec.rb
59
+ - spec/subscriptions_component_spec.rb
60
+ - vitalish-chargify_api_ares.gemspec
61
+ has_rdoc: true
62
+ homepage: http://github.com/grasshopperlabs/chargify_api_ares
63
+ licenses: []
64
+
65
+ post_install_message:
66
+ rdoc_options: []
67
+
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ hash: 3
76
+ segments:
77
+ - 0
78
+ version: "0"
79
+ required_rubygems_version: !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ hash: 3
85
+ segments:
86
+ - 0
87
+ version: "0"
88
+ requirements: []
89
+
90
+ rubyforge_project:
91
+ rubygems_version: 1.3.7
92
+ signing_key:
93
+ specification_version: 3
94
+ summary: A Chargify API wrapper for Ruby using ActiveResource
95
+ test_files:
96
+ - spec/base_spec.rb
97
+ - spec/components_spec.rb
98
+ - spec/customer_spec.rb
99
+ - spec/factories.rb
100
+ - spec/mocks/fake_resource.rb
101
+ - spec/product_spec.rb
102
+ - spec/remote/remote_spec.rb
103
+ - spec/remote/spec_helper.rb
104
+ - spec/spec_helper.rb
105
+ - spec/subscription_spec.rb
106
+ - spec/subscriptions_component_spec.rb