spec/mousetrap/customer_spec.rb in hashrocket-mousetrap-0.1.1 vs spec/mousetrap/customer_spec.rb in hashrocket-mousetrap-0.2.0
- old
+ new
@@ -1,19 +1,126 @@
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe Mousetrap::Customer do
- subject { Mousetrap::Customer }
-
- describe '.all' do
- it 'gets customers resources' do
- subject.should_receive(:get_resources).with('customers')
- subject.all
- end
+ def customer_attributes_for_api(customer)
+ {
+ :firstName => customer.first_name,
+ :lastName => customer.last_name,
+ :email => customer.email,
+ :code => customer.code,
+ :subscription => {
+ :planCode => customer.subscription.plan_code,
+ :ccFirstName => customer.subscription.billing_first_name,
+ :ccLastName => customer.subscription.billing_last_name,
+ :ccNumber => customer.subscription.credit_card_number,
+ :ccExpiration => customer.subscription.credit_card_expiration,
+ :ccZip => customer.subscription.billing_zip_code,
+ }
+ }
end
-
+
describe '.create' do
- it "creates a customer" do
- subject.should_receive(:post_resource).with('customers', 'new', 'some_hash')
- subject.create('some_hash')
+ before do
+ @customer_hash = Factory.attributes_for :new_customer
+ @customer = Mousetrap::Customer.new @customer_hash
+ @customer.stub(:save)
+ Mousetrap::Customer.stub(:new => @customer)
+ Mousetrap::Customer.stub(:build_resource_from => stub(:id => 0))
+ end
+
+ it 'instantiates a customer with a hash of attributes' do
+ Mousetrap::Customer.should_receive(:new).with(@customer_hash).and_return(@customer)
+ Mousetrap::Customer.create(@customer_hash)
+ end
+
+ it 'saves the new customer instance' do
+ @customer.should_receive(:save)
+ Mousetrap::Customer.create(@customer_hash)
+ end
+
+ it 'sets the id of the newly created customer' do
+ Mousetrap::Customer.stub(:build_resource_from => stub(:id => 1))
+ @customer.should_receive(:id=).with(1)
+ Mousetrap::Customer.create(@customer_hash)
+ end
+
+ it 'returns an instance of Mousetrap::Customer' do
+ Mousetrap::Customer.create(@customer_hash).should be_instance_of(Mousetrap::Customer)
+ end
+ end
+
+ describe ".new" do
+ subject do
+ Mousetrap::Customer.new \
+ :first_name => 'Jon',
+ :last_name => 'Larkowski',
+ :email => 'lark@example.com',
+ :code => 'asfkhw0'
+ end
+
+ it { should be_instance_of(Mousetrap::Customer) }
+ it { should be_new_record }
+
+ describe "sets" do
+ it 'first_name' do
+ subject.first_name.should == 'Jon'
+ end
+
+ it 'last_name' do
+ subject.last_name.should == 'Larkowski'
+ end
+
+ it 'email' do
+ subject.email.should == 'lark@example.com'
+ end
+
+ it 'code' do
+ subject.code.should == 'asfkhw0'
+ end
+ end
+ end
+
+ describe '#destroy' do
+ context "for existing records" do
+ it 'destroys' do
+ customer = Factory :existing_customer
+ Mousetrap::Customer.should_receive(:delete_resource).with('customers', customer.code)
+ customer.destroy
+ end
+ end
+
+ context "for new records" do
+ it "does nothing" do
+ customer = Factory :new_customer
+ Mousetrap::Customer.should_not_receive(:delete_resource)
+ customer.destroy
+ end
+ end
+ end
+
+ describe '#save' do
+ context "for existing records" do
+ before do
+ @customer = Factory :existing_customer
+ end
+
+ it 'posts to edit-customer action' do
+ attributes_for_api = customer_attributes_for_api(@customer)
+
+ # We don't send code for existing API resources.
+ attributes_for_api.delete(:code)
+
+ @customer.class.should_receive(:put_resource).with(
+ 'customers', 'edit-customer', @customer.code, attributes_for_api)
+ @customer.save
+ end
+ end
+
+ context "for new records" do
+ it 'calls create' do
+ customer = Factory :new_customer
+ customer.should_receive(:create)
+ customer.save
+ end
end
end
end