require 'spec_helper' describe Venice::Client do let(:receipt_data) { 'asdfzxcvjklqwer' } let(:client) { subject } describe '#verify!' do context 'with a receipt response' do before do client.stub(:json_response_from_verifying_data).and_return(response) end let(:response) do { 'status' => 0, 'receipt' => {} } end it 'does not generate a self-referencing Hash' do receipt = client.verify! 'asdf' expect(receipt.original_json_response['receipt']).not_to have_key('original_json_response') end end context 'no shared_secret' do before do client.shared_secret = nil Venice::Receipt.stub :new end it 'should only include the receipt_data' do Net::HTTP.any_instance.should_receive(:request) do |post| post.body.should eq({ 'receipt-data' => receipt_data }.to_json) post end client.verify! receipt_data end end context 'with a shared secret' do let(:secret) { 'shhhhhh' } before do Venice::Receipt.stub :new end context 'set secret manually' do before do client.shared_secret = secret end it 'should include the secret in the post' do Net::HTTP.any_instance.should_receive(:request) do |post| post.body.should eq({ 'receipt-data' => receipt_data, 'password' => secret }.to_json) post end client.verify! receipt_data end end context 'set secret when verification' do let(:options) { { shared_secret: secret } } it 'should include the secret in the post' do Net::HTTP.any_instance.should_receive(:request) do |post| post.body.should eq({ 'receipt-data' => receipt_data, 'password' => secret }.to_json) post end client.verify! receipt_data, options end end end context 'with a latest receipt info attribute' do before do client.stub(:json_response_from_verifying_data).and_return(response) end let(:response) do { 'status' => 0, 'receipt' => {}, 'latest_receipt' => '', 'latest_receipt_info' => [ { 'original_purchase_date_pst' => '2012-12-30 09:39:24 America/Los_Angeles', 'unique_identifier' => '0000b01147b8', 'original_transaction_id' => '1000000061051565', 'expires_date' => '1365114731000', 'transaction_id' => '1000000070104252', 'quantity' => '1', 'product_id' => 'com.ficklebits.nsscreencast.monthly_sub', 'original_purchase_date_ms' => '1356889164000', 'bid' => 'com.ficklebits.nsscreencast', 'web_order_line_item_id' => '1000000026812043', 'bvrs' => '0.1', 'expires_date_formatted' => '2013-04-04 22:32:11 Etc/GMT', 'purchase_date' => '2013-04-04 22:27:11 Etc/GMT', 'purchase_date_ms' => '1365114431000', 'expires_date_formatted_pst' => '2013-04-04 15:32:11 America/Los_Angeles', 'purchase_date_pst' => '2013-04-04 15:27:11 America/Los_Angeles', 'original_purchase_date' => '2012-12-30 17:39:24 Etc/GMT', 'item_id' => '590265423' } ] } end it 'should create a latest receipt' do receipt = client.verify! 'asdf' receipt.latest_receipt_info.should_not be_nil end end end end