From 28cdf336e36b74042ab970b1039da995cf81491c Mon Sep 17 00:00:00 2001 From: James Hart Date: Wed, 30 Nov 2016 23:52:45 -0800 Subject: [PATCH] Resolve transactions with the tracking number! --- app/models/transaction_resolver.rb | 10 +++++++ config/environment.rb | 1 + spec/models/transaction_resolver_spec.rb | 38 ++++++++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 app/models/transaction_resolver.rb create mode 100644 spec/models/transaction_resolver_spec.rb diff --git a/app/models/transaction_resolver.rb b/app/models/transaction_resolver.rb new file mode 100644 index 0000000..0679db7 --- /dev/null +++ b/app/models/transaction_resolver.rb @@ -0,0 +1,10 @@ +class TransactionResolver + include Virtus.model + + attribute :remaining_items, Array[Item] + attribute :fulfillment, Fulfillment + + def items + self.remaining_items.select { |item| item.tracking_number == fulfillment.tracking_number } + end +end diff --git a/config/environment.rb b/config/environment.rb index a1e1806..d3f9f04 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -8,6 +8,7 @@ require_relative '../app/models/item' require_relative '../app/models/order' require_relative '../app/models/order_loader' +require_relative '../app/models/transaction_resolver' # Huh? https://github.com/RubyMoney/money/issues/593 I18n.enforce_available_locales = false \ No newline at end of file diff --git a/spec/models/transaction_resolver_spec.rb b/spec/models/transaction_resolver_spec.rb new file mode 100644 index 0000000..fe17646 --- /dev/null +++ b/spec/models/transaction_resolver_spec.rb @@ -0,0 +1,38 @@ +require 'environment_helper' + +describe TransactionResolver do + context 'simplest case' do + let(:fulfillment) { Fulfillment.new(shipment_date: '11/01/16', total_price: '$12.34') } + let(:items) { [item] } + let(:item) { Item.new(title: 'Furby!', total_price: '$12.34') } + + it 'correctly matches the shipments to the items memo' do + result = TransactionResolver.new(fulfillment: fulfillment, remaining_items: items).items + expect(result).to eq([item]) + end + end + + context 'one fulfillment, three items' do + let(:fulfillment) { Fulfillment.new(shipment_date: '11/05/16', total_price: '$3.00', tracking_number: 'AMZN_US(TBA109359633000)')} + let(:items) { [item_one, item_two, item_three] } + let(:item_one) { Item.new(title: 'Pickles!', total_price: '$1.50', tracking_number: 'AMZN_US(TBA109359633000)') } + let(:item_two) { Item.new(title: 'Pancakes!', total_price: '$1.50', tracking_number: 'AMZN_US(TBA109359633000)') } + let(:item_three) { Item.new(title: 'Dickle!', total_price: '$5.00', tracking_number: 'AMZN_US(BUTTS)') } + + + it 'correctly matches the shipments to the items memo' do + result = TransactionResolver.new(fulfillment: fulfillment, remaining_items: items).items + expect(result).to eq([item_one, item_two]) + end + end + + context 'when there is no match' do + let(:fulfillment) { Fulfillment.new(shipment_date: '11/05/16', total_price: '$3.00', tracking_number: 'AMZN_US(TBA109359633000)')} + + it 'returns an empty array' do + + result = TransactionResolver.new(fulfillment: fulfillment, remaining_items: []).items + expect(result).to be_empty + end + end +end \ No newline at end of file