mousetrap 0.3.3
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.
- data/.document +5 -0
- data/.gitignore +6 -0
- data/MIT-LICENSE +20 -0
- data/README.textile +25 -0
- data/Rakefile +51 -0
- data/VERSION +1 -0
- data/lib/mousetrap.rb +22 -0
- data/lib/mousetrap/customer.rb +118 -0
- data/lib/mousetrap/plan.rb +30 -0
- data/lib/mousetrap/resource.rb +137 -0
- data/lib/mousetrap/subscription.rb +100 -0
- data/mousetrap.gemspec +83 -0
- data/spec/factories.rb +22 -0
- data/spec/integration/settings.example.yml +6 -0
- data/spec/integration/smoke_test.rb +149 -0
- data/spec/integration/spike.rb +53 -0
- data/spec/mousetrap/customer_spec.rb +209 -0
- data/spec/mousetrap/plan_spec.rb +41 -0
- data/spec/mousetrap/resource_spec.rb +132 -0
- data/spec/mousetrap/subscription_spec.rb +42 -0
- data/spec/mousetrap_spec.rb +17 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +23 -0
- data/spec/support/random_data.rb +21 -0
- metadata +129 -0
data/mousetrap.gemspec
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE
|
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{mousetrap}
|
8
|
+
s.version = "0.3.3"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Jon Larkowski", "Sandro Turriate", "Wolfram Arnold", "Corey Grusden"]
|
12
|
+
s.date = %q{2009-10-12}
|
13
|
+
s.description = %q{CheddarGetter API Client in Ruby}
|
14
|
+
s.email = %q{jonlarkowski@gmail.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"README.textile"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
".document",
|
20
|
+
".gitignore",
|
21
|
+
"MIT-LICENSE",
|
22
|
+
"README.textile",
|
23
|
+
"Rakefile",
|
24
|
+
"VERSION",
|
25
|
+
"lib/mousetrap.rb",
|
26
|
+
"lib/mousetrap/customer.rb",
|
27
|
+
"lib/mousetrap/plan.rb",
|
28
|
+
"lib/mousetrap/resource.rb",
|
29
|
+
"lib/mousetrap/subscription.rb",
|
30
|
+
"mousetrap.gemspec",
|
31
|
+
"spec/factories.rb",
|
32
|
+
"spec/integration/settings.example.yml",
|
33
|
+
"spec/integration/smoke_test.rb",
|
34
|
+
"spec/integration/spike.rb",
|
35
|
+
"spec/mousetrap/customer_spec.rb",
|
36
|
+
"spec/mousetrap/plan_spec.rb",
|
37
|
+
"spec/mousetrap/resource_spec.rb",
|
38
|
+
"spec/mousetrap/subscription_spec.rb",
|
39
|
+
"spec/mousetrap_spec.rb",
|
40
|
+
"spec/spec.opts",
|
41
|
+
"spec/spec_helper.rb",
|
42
|
+
"spec/support/random_data.rb"
|
43
|
+
]
|
44
|
+
s.homepage = %q{http://github.com/hashrocket/mousetrap}
|
45
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
46
|
+
s.require_paths = ["lib"]
|
47
|
+
s.rubygems_version = %q{1.3.5}
|
48
|
+
s.summary = %q{CheddarGetter API Client in Ruby}
|
49
|
+
s.test_files = [
|
50
|
+
"spec/factories.rb",
|
51
|
+
"spec/integration/smoke_test.rb",
|
52
|
+
"spec/integration/spike.rb",
|
53
|
+
"spec/mousetrap/customer_spec.rb",
|
54
|
+
"spec/mousetrap/plan_spec.rb",
|
55
|
+
"spec/mousetrap/resource_spec.rb",
|
56
|
+
"spec/mousetrap/subscription_spec.rb",
|
57
|
+
"spec/mousetrap_spec.rb",
|
58
|
+
"spec/spec_helper.rb",
|
59
|
+
"spec/support/random_data.rb"
|
60
|
+
]
|
61
|
+
|
62
|
+
if s.respond_to? :specification_version then
|
63
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
64
|
+
s.specification_version = 3
|
65
|
+
|
66
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
67
|
+
s.add_runtime_dependency(%q<httparty>, [">= 0.4.2"])
|
68
|
+
s.add_development_dependency(%q<activesupport>, [">= 2.3.3"])
|
69
|
+
s.add_development_dependency(%q<rspec>, [">= 1.2.8"])
|
70
|
+
s.add_development_dependency(%q<thoughtbot-factory_girl>, [">= 1.2.2"])
|
71
|
+
else
|
72
|
+
s.add_dependency(%q<httparty>, [">= 0.4.2"])
|
73
|
+
s.add_dependency(%q<activesupport>, [">= 2.3.3"])
|
74
|
+
s.add_dependency(%q<rspec>, [">= 1.2.8"])
|
75
|
+
s.add_dependency(%q<thoughtbot-factory_girl>, [">= 1.2.2"])
|
76
|
+
end
|
77
|
+
else
|
78
|
+
s.add_dependency(%q<httparty>, [">= 0.4.2"])
|
79
|
+
s.add_dependency(%q<activesupport>, [">= 2.3.3"])
|
80
|
+
s.add_dependency(%q<rspec>, [">= 1.2.8"])
|
81
|
+
s.add_dependency(%q<thoughtbot-factory_girl>, [">= 1.2.2"])
|
82
|
+
end
|
83
|
+
end
|
data/spec/factories.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Factory.define :new_customer, :class => Mousetrap::Customer, :default_strategy => :stub do |f|
|
2
|
+
f.email { random_email_address }
|
3
|
+
f.first_name { random_string }
|
4
|
+
f.last_name { random_string }
|
5
|
+
f.code { |me| me.email }
|
6
|
+
f.add_attribute :id, nil
|
7
|
+
f.subscription_attributes { Factory.attributes_for :subscription }
|
8
|
+
end
|
9
|
+
|
10
|
+
Factory.define :existing_customer, :parent => :new_customer, :default_strategy => :stub do |f|
|
11
|
+
f.add_attribute :id, '2d1244e8-e338-102c-a92d-40402145ee8b'
|
12
|
+
end
|
13
|
+
|
14
|
+
Factory.define :subscription, :class => Mousetrap::Subscription, :default_strategy => :stub do |f|
|
15
|
+
f.plan_code 'TEST'
|
16
|
+
f.billing_first_name { random_string }
|
17
|
+
f.billing_last_name { random_string }
|
18
|
+
f.credit_card_number '4111111111111111'
|
19
|
+
f.credit_card_expiration_month '12'
|
20
|
+
f.credit_card_expiration_year '2012'
|
21
|
+
f.billing_zip_code '90210'
|
22
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
require File.expand_path('../../../lib/mousetrap', __FILE__)
|
2
|
+
|
3
|
+
require 'spec'
|
4
|
+
require 'spec/autorun'
|
5
|
+
require 'factory_girl'
|
6
|
+
require 'active_support'
|
7
|
+
require 'yaml'
|
8
|
+
|
9
|
+
Dir["#{File.dirname(__FILE__)}/../support/**/*.rb"].each {|f| require f}
|
10
|
+
|
11
|
+
settings = YAML.load_file(File.dirname(__FILE__) + '/settings.yml')
|
12
|
+
Mousetrap.authenticate(settings['user'], settings['password'])
|
13
|
+
Mousetrap.product_code = settings['product_code']
|
14
|
+
|
15
|
+
Spec::Runner.configure do |config|
|
16
|
+
config.before :suite do
|
17
|
+
begin
|
18
|
+
Mousetrap::Customer.destroy_all
|
19
|
+
rescue
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
shared_examples_for "a Customer record from CheddarGetter" do
|
25
|
+
describe "And I get the customer" do
|
26
|
+
before :all do
|
27
|
+
@api_customer = Mousetrap::Customer[@customer.code]
|
28
|
+
end
|
29
|
+
|
30
|
+
it "Then I should see first name" do
|
31
|
+
@api_customer.first_name.should == @customer.first_name
|
32
|
+
end
|
33
|
+
|
34
|
+
it "And I should see last name" do
|
35
|
+
@api_customer.last_name.should == @customer.last_name
|
36
|
+
end
|
37
|
+
|
38
|
+
it "And I should see the code" do
|
39
|
+
@api_customer.code.should == @customer.code
|
40
|
+
end
|
41
|
+
|
42
|
+
it "And I should see the ID" do
|
43
|
+
@api_customer.id.should == @customer.id
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "The Wrapper Gem" do
|
49
|
+
describe Mousetrap::Customer do
|
50
|
+
describe ".all" do
|
51
|
+
describe "Given a few customers on CheddarGetter" do
|
52
|
+
before :all do
|
53
|
+
3.times { Factory(:new_customer).save }
|
54
|
+
violated "Couldn't save customers" unless Mousetrap::Customer.all.size == 3
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "When I call .all" do
|
58
|
+
before :all do
|
59
|
+
@all_customers = Mousetrap::Customer.all
|
60
|
+
end
|
61
|
+
|
62
|
+
it "Then I should get all the customers" do
|
63
|
+
@all_customers.size.should == 3
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe ".create" do
|
70
|
+
describe "When I create a customer" do
|
71
|
+
before :all do
|
72
|
+
attributes = Factory.attributes_for :new_customer
|
73
|
+
@customer = Mousetrap::Customer.create attributes
|
74
|
+
end
|
75
|
+
|
76
|
+
it_should_behave_like "a Customer record from CheddarGetter"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe ".destroy_all" do
|
81
|
+
describe "Given a few customers on CheddarGetter" do
|
82
|
+
before :all do
|
83
|
+
Mousetrap::Customer.destroy_all
|
84
|
+
3.times { Factory(:new_customer).save }
|
85
|
+
violated "Couldn't save customers" unless Mousetrap::Customer.all.size == 3
|
86
|
+
end
|
87
|
+
|
88
|
+
describe "When I call .destroy_all" do
|
89
|
+
before :all do
|
90
|
+
Mousetrap::Customer.destroy_all
|
91
|
+
end
|
92
|
+
|
93
|
+
it "Then there should be no customers" do
|
94
|
+
Mousetrap::Customer.all.size.should == 0
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe "#cancel" do
|
101
|
+
describe "Given a customer" do
|
102
|
+
before :all do
|
103
|
+
@customer = Factory :new_customer
|
104
|
+
@customer.save
|
105
|
+
@api_customer = Mousetrap::Customer[@customer.code]
|
106
|
+
end
|
107
|
+
|
108
|
+
describe "When I cancel" do
|
109
|
+
before :all do
|
110
|
+
@api_customer.cancel
|
111
|
+
end
|
112
|
+
|
113
|
+
describe "And I get the customer" do
|
114
|
+
before :all do
|
115
|
+
@api_customer = Mousetrap::Customer[@customer.code]
|
116
|
+
end
|
117
|
+
|
118
|
+
it "Then I should see a cancelation date on subscription" do
|
119
|
+
@api_customer.subscription.canceled_at.should be
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
describe "#save" do
|
127
|
+
describe "When I save a customer" do
|
128
|
+
before :all do
|
129
|
+
@customer = Factory :new_customer
|
130
|
+
@customer.save
|
131
|
+
end
|
132
|
+
|
133
|
+
it_should_behave_like "a Customer record from CheddarGetter"
|
134
|
+
|
135
|
+
describe "And I save it again, with different attributes" do
|
136
|
+
before :all do
|
137
|
+
attributes = Factory.attributes_for :new_customer
|
138
|
+
@customer.first_name = attributes[:first_name]
|
139
|
+
@customer.last_name = attributes[:last_name]
|
140
|
+
@customer.email = attributes[:email]
|
141
|
+
@customer.save
|
142
|
+
end
|
143
|
+
|
144
|
+
it_should_behave_like "a Customer record from CheddarGetter"
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# This script is for hacking and playing around.
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../../lib/mousetrap'
|
4
|
+
require 'activesupport'
|
5
|
+
require 'factory_girl'
|
6
|
+
require 'ruby-debug'
|
7
|
+
require 'yaml'
|
8
|
+
|
9
|
+
Dir["#{File.dirname(__FILE__)}/../support/**/*.rb"].each {|f| require f}
|
10
|
+
|
11
|
+
settings = YAML.load_file(File.dirname(__FILE__) + '/settings.yml')
|
12
|
+
Mousetrap.authenticate(settings['user'], settings['password'])
|
13
|
+
Mousetrap.product_code = settings['product_code']
|
14
|
+
|
15
|
+
|
16
|
+
def plans
|
17
|
+
all_plans = Mousetrap::Plan.all
|
18
|
+
puts all_plans.to_yaml
|
19
|
+
|
20
|
+
test_plan = Mousetrap::Plan['TEST']
|
21
|
+
puts test_plan.to_yaml
|
22
|
+
end
|
23
|
+
|
24
|
+
def all_customers
|
25
|
+
all_customers = Mousetrap::Customer.all
|
26
|
+
puts all_customers.to_yaml
|
27
|
+
end
|
28
|
+
|
29
|
+
def create_customer
|
30
|
+
customer = Factory :new_customer
|
31
|
+
customer.save
|
32
|
+
|
33
|
+
api_customer = Mousetrap::Customer[customer.code]
|
34
|
+
puts api_customer.to_yaml
|
35
|
+
end
|
36
|
+
|
37
|
+
def destroy_all_customers
|
38
|
+
Mousetrap::Customer.destroy_all
|
39
|
+
end
|
40
|
+
|
41
|
+
# create_customer
|
42
|
+
|
43
|
+
code = 'igcuvfehrc@example.com'
|
44
|
+
api_customer = Mousetrap::Customer[code]
|
45
|
+
puts api_customer.to_yaml
|
46
|
+
puts '-' * 80
|
47
|
+
puts 'cancel'
|
48
|
+
puts api_customer.cancel
|
49
|
+
puts '-' * 80
|
50
|
+
api_customer = Mousetrap::Customer[code]
|
51
|
+
puts api_customer.to_yaml
|
52
|
+
|
53
|
+
|
@@ -0,0 +1,209 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe Mousetrap::Customer do
|
4
|
+
# customers:
|
5
|
+
# customer:
|
6
|
+
# firstName: nvnawrelyv
|
7
|
+
# lastName: vklidifvfd
|
8
|
+
# email: bvvljaeegs@example.com
|
9
|
+
# code: ablntsorai@example.com
|
10
|
+
# company:
|
11
|
+
# gatewayToken:
|
12
|
+
# id: eac1cf0e-fc5b-102c-a92d-40402145ee8b
|
13
|
+
# createdDatetime: "2009-09-27T02:16:15+00:00"
|
14
|
+
# modifiedDatetime: "2009-09-27T02:16:16+00:00"
|
15
|
+
# subscriptions:
|
16
|
+
# subscription:
|
17
|
+
# gatewayToken:
|
18
|
+
# id: eac26b4e-fc5b-102c-a92d-40402145ee8b
|
19
|
+
# createdDatetime: "2009-09-27T02:16:15+00:00"
|
20
|
+
# ccType: visa
|
21
|
+
# ccLastFour: "1111"
|
22
|
+
# ccExpirationDate: "2012-12-31T00:00:00+00:00"
|
23
|
+
# canceledDatetime:
|
24
|
+
# plans:
|
25
|
+
# plan:
|
26
|
+
# name: Test
|
27
|
+
# setupChargeAmount: "0.00"
|
28
|
+
# code: TEST
|
29
|
+
# recurringChargeAmount: "42.00"
|
30
|
+
# billingFrequencyQuantity: "1"
|
31
|
+
# trialDays: "0"
|
32
|
+
# id: 5fbb9a84-e27f-102c-a92d-40402145ee8b
|
33
|
+
# billingFrequency: monthly
|
34
|
+
# createdDatetime: "2009-08-25T04:24:34+00:00"
|
35
|
+
# recurringChargeCode: TEST_RECURRING
|
36
|
+
# isActive: "1"
|
37
|
+
# billingFrequencyUnit: months
|
38
|
+
# description: Test
|
39
|
+
# billingFrequencyPer: month
|
40
|
+
# setupChargeCode: TEST_SETUP
|
41
|
+
# invoices:
|
42
|
+
# invoice:
|
43
|
+
# number: "2"
|
44
|
+
# billingDatetime: "2009-10-27T02:16:15+00:00"
|
45
|
+
# id: eac74d62-fc5b-102c-a92d-40402145ee8b
|
46
|
+
# createdDatetime: "2009-09-27T02:16:15+00:00"
|
47
|
+
# type: subscription
|
48
|
+
|
49
|
+
def customer_attributes_for_api(customer)
|
50
|
+
{
|
51
|
+
:firstName => customer.first_name,
|
52
|
+
:lastName => customer.last_name,
|
53
|
+
:email => customer.email,
|
54
|
+
:code => customer.code,
|
55
|
+
:subscription => {
|
56
|
+
:planCode => customer.subscription.plan_code,
|
57
|
+
:ccFirstName => customer.subscription.billing_first_name,
|
58
|
+
:ccLastName => customer.subscription.billing_last_name,
|
59
|
+
:ccNumber => customer.subscription.credit_card_number,
|
60
|
+
:ccExpMonth => customer.subscription.credit_card_expiration_month,
|
61
|
+
:ccExpYear => customer.subscription.credit_card_expiration_year,
|
62
|
+
:ccZip => customer.subscription.billing_zip_code,
|
63
|
+
}
|
64
|
+
}
|
65
|
+
end
|
66
|
+
|
67
|
+
describe "when having multiple subscriptions" do
|
68
|
+
it "returns the latest one" do
|
69
|
+
Mousetrap::Customer.new_from_api(FULL_CUSTOMER).subscription.should_not be_nil
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe '.all' do
|
74
|
+
before do
|
75
|
+
Mousetrap::Customer.stub :build_resources_from
|
76
|
+
end
|
77
|
+
|
78
|
+
it "gets all customers" do
|
79
|
+
Mousetrap::Customer.should_receive(:get_resources).with('customers').and_return('some hash')
|
80
|
+
Mousetrap::Customer.all
|
81
|
+
end
|
82
|
+
|
83
|
+
it "handles kludgy 'no customers found' response" do
|
84
|
+
Mousetrap::Customer.stub :get_resources => {
|
85
|
+
'error' => 'Resource not found: No customers found.'
|
86
|
+
}
|
87
|
+
Mousetrap::Customer.all.should == []
|
88
|
+
end
|
89
|
+
|
90
|
+
it "raises error if response has one" do
|
91
|
+
expect do
|
92
|
+
Mousetrap::Customer.stub :get_resources => { 'error' => "some other error" }
|
93
|
+
Mousetrap::Customer.all
|
94
|
+
end.to raise_error(RuntimeError, "some other error")
|
95
|
+
end
|
96
|
+
|
97
|
+
it "builds resources from the response" do
|
98
|
+
Mousetrap::Customer.stub :get_resources => 'some hash'
|
99
|
+
Mousetrap::Customer.should_receive(:build_resources_from).with('some hash')
|
100
|
+
Mousetrap::Customer.all
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
describe '.create' do
|
105
|
+
before do
|
106
|
+
@customer_hash = Factory.attributes_for :new_customer
|
107
|
+
@customer = Mousetrap::Customer.new @customer_hash
|
108
|
+
@customer.stub(:save)
|
109
|
+
Mousetrap::Customer.stub(:new => @customer)
|
110
|
+
Mousetrap::Customer.stub(:build_resource_from => stub(:id => 0))
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'instantiates a customer with a hash of attributes' do
|
114
|
+
Mousetrap::Customer.should_receive(:new).with(@customer_hash).and_return(@customer)
|
115
|
+
Mousetrap::Customer.create(@customer_hash)
|
116
|
+
end
|
117
|
+
|
118
|
+
it 'saves the new customer instance' do
|
119
|
+
@customer.should_receive(:save)
|
120
|
+
Mousetrap::Customer.create(@customer_hash)
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'sets the id of the newly created customer' do
|
124
|
+
Mousetrap::Customer.stub(:build_resource_from => stub(:id => 1))
|
125
|
+
@customer.should_receive(:id=).with(1)
|
126
|
+
Mousetrap::Customer.create(@customer_hash)
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'returns an instance of Mousetrap::Customer' do
|
130
|
+
Mousetrap::Customer.create(@customer_hash).should be_instance_of(Mousetrap::Customer)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
describe ".new" do
|
135
|
+
subject do
|
136
|
+
Mousetrap::Customer.new \
|
137
|
+
:first_name => 'Jon',
|
138
|
+
:last_name => 'Larkowski',
|
139
|
+
:email => 'lark@example.com',
|
140
|
+
:code => 'asfkhw0'
|
141
|
+
end
|
142
|
+
|
143
|
+
it { should be_instance_of(Mousetrap::Customer) }
|
144
|
+
it { should be_new_record }
|
145
|
+
|
146
|
+
describe "sets" do
|
147
|
+
it 'first_name' do
|
148
|
+
subject.first_name.should == 'Jon'
|
149
|
+
end
|
150
|
+
|
151
|
+
it 'last_name' do
|
152
|
+
subject.last_name.should == 'Larkowski'
|
153
|
+
end
|
154
|
+
|
155
|
+
it 'email' do
|
156
|
+
subject.email.should == 'lark@example.com'
|
157
|
+
end
|
158
|
+
|
159
|
+
it 'code' do
|
160
|
+
subject.code.should == 'asfkhw0'
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
describe '#cancel' do
|
166
|
+
context "for existing records" do
|
167
|
+
it 'cancels' do
|
168
|
+
customer = Factory :existing_customer
|
169
|
+
customer.should_receive(:member_action).with('cancel')
|
170
|
+
customer.cancel
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
context "for new records" do
|
175
|
+
it "does nothing" do
|
176
|
+
customer = Factory.build :new_customer
|
177
|
+
customer.should_not_receive(:member_action).with('cancel')
|
178
|
+
customer.cancel
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
describe '#save' do
|
184
|
+
context "for existing records" do
|
185
|
+
before do
|
186
|
+
@customer = Factory :existing_customer
|
187
|
+
end
|
188
|
+
|
189
|
+
it 'posts to edit-customer action' do
|
190
|
+
attributes_for_api = customer_attributes_for_api(@customer)
|
191
|
+
|
192
|
+
# We don't send code for existing API resources.
|
193
|
+
attributes_for_api.delete(:code)
|
194
|
+
|
195
|
+
@customer.class.should_receive(:put_resource).with(
|
196
|
+
'customers', 'edit-customer', @customer.code, attributes_for_api)
|
197
|
+
@customer.save
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
context "for new records" do
|
202
|
+
it 'calls create' do
|
203
|
+
customer = Factory :new_customer
|
204
|
+
customer.should_receive(:create)
|
205
|
+
customer.save
|
206
|
+
end
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|